Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/bitlytwiser/pufs
Decentralized file system using IPFS,gRPC,Protobuf, and Go
https://github.com/bitlytwiser/pufs
filesystem golang grpc grpc-client grpc-go grpc-server protobuf real-time streaming
Last synced: 6 days ago
JSON representation
Decentralized file system using IPFS,gRPC,Protobuf, and Go
- Host: GitHub
- URL: https://github.com/bitlytwiser/pufs
- Owner: BitlyTwiser
- License: mit
- Created: 2022-09-04T03:25:39.000Z (about 2 years ago)
- Default Branch: main
- Last Pushed: 2022-10-23T19:26:33.000Z (about 2 years ago)
- Last Synced: 2023-07-18T11:37:23.063Z (over 1 year ago)
- Topics: filesystem, golang, grpc, grpc-client, grpc-go, grpc-server, protobuf, real-time, streaming
- Language: Go
- Homepage:
- Size: 6.46 MB
- Stars: 0
- Watchers: 2
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# pufs
- Pufs is a distributes file system utilizing IPFS, gRPC, and protocol buffers.
- The goal is to utilize the server as a primary mechanism to store uplodaed files in memory, allowing the user to stream file system changes to listening clients. The files are stored in a distributed fashion, utilizing IPFS as the backbone to accomplish this.# Example usage:
![Usage](https://pufs-gif-github.s3.us-west-2.amazonaws.com/pufs.gif)
# Usage:
- One can utilize the dockerized version of the application or run the server on a node.
- ```make docker``` will use docker compose to build the application using the subsequent dockerfile.# Cli Usage:
- You can utilize the client cli to interface with the server.
- Examples:
- Upload file:
```
go run ./client/pufs_client.go upload -path
```
- Stream file changes:
```
go run ./client/pufs_client.go stream
```
- List files currently within the file system:
```
go run ./client/pufs_client.go list
```
- Download file to local filesystem:
- Provide to the client the path of where you want the file to be stored when it is downloaded to disk and the name of the file.
```
go run ./client/pufs_client.go download -name -path /tmp
```
- Deleting file:
```
go run ./client/pufs_client.go delete -name
```# Changes distributes to clients in real time:
- If you utilize the client in stream mode, you will obtain changes to the file system in real time.
- When any user uploads a new file, the user will see all file changes reflected in their client.
- Example:# Ipfs:
- This application uses [kubo](https://github.com/ipfs/kubo) for spinning up an IPFS node using a local IPFS installation.
- One must have IPFS installed in order to properly utlize the application.
- The dockerized application installs IPFS within the container.
- You can follow the [install](https://docs.ipfs.io/install/) docs for IPFS to get IPFS setup locally.
- IPFS files are pinned, allowing your stored files to forgo IPFS garbage collection.
[Persistence docs](https://docs.ipfs.tech/concepts/persistence/)# gRPC:
- To enhance server logging for gRPC (in case of error), one can utilize the environment variables:
```export GRPC_GO_LOG_VERBOSITY_LEVEL=99```
```export GRPC_GO_LOG_SEVERITY_LEVEL=info```