Distributed File Storage
- Overview
- Features
- Project Structure
- Getting Started
- Project Roadmap
- Contributing
- License
- Acknowledgments
DFS is a distributed file storage application written in Go. It enables multiple nodes to share and store files across a network, providing redundancy and scalability. The system currently uses TCP as its transport protocol for communication and file data transfer between nodes. DFS is designed to be modular, making it easy to extend or swap out components such as transport layers or storage backends in the future.
- End-to-End Encryption: All file transfers are protected using end-to-end encryption based on the Diffie-Hellman key exchange algorithm, ensuring data privacy and security between nodes.
- Fast File Sharing: Efficient protocols enable rapid file distribution and retrieval across the network.
- Redundant Storage: Files are replicated across multiple nodes to provide fault tolerance and high availability.
- Modular Architecture: Easily extend or replace core components such as transport protocols or storage backends.
- Scalable Design: Supports seamless scaling as new nodes join the network.
- Simple CLI Usage: Intuitive command-line interface for managing files and nodes.
└── dfs/
├── .github
│ └── workflows
├── Makefile
├── README.md
├── api
│ └── api.go
├── cmd
│ ├── lorem.txt
│ └── main.go
├── encdec
│ ├── encdec.go
│ └── encdec_test.go
├── fs
│ └── server.go
├── go.mod
├── go.sum
├── p2p
│ ├── encoding.go
│ ├── encoding_test.go
│ ├── tcp_transport.go
│ ├── tcp_transport_test.go
│ └── transport.go
├── storage
│ ├── store.go
│ └── store_test.go
└── tmp
└── build-errors.logDFS/
.github
workflows
ci.yml ❯ REPLACE-ME
encdec
encdec_test.go ❯ REPLACE-MEencdec.go ❯ REPLACE-ME
storage
store_test.go ❯ REPLACE-MEstore.go ❯ REPLACE-ME
fs
server.go ❯ REPLACE-ME
p2p
transport.go ❯ REPLACE-MEencoding_test.go ❯ REPLACE-MEtcp_transport.go ❯ REPLACE-MEencoding.go ❯ REPLACE-MEtcp_transport_test.go ❯ REPLACE-ME
api
api.go ❯ REPLACE-ME
Before getting started with dfs, ensure your runtime environment meets the following requirements:
- Programming Language: Go
- Package Manager: Go modules
Install dfs using one of the following methods:
Build from source:
- Clone the dfs repository:
❯ git clone https://github.com/brinestone/dfs- Navigate to the project directory:
❯ cd dfs- Install the project dependencies:
❯ go buildRun dfs using the following command:
Using go modules
❯ go run {entrypoint}Run the test suite using the following command:
Using go modules
❯ go test ./...-
Task 1:Implement feature one. -
Task 2: Implement feature two. -
Task 3: Implement feature three.
- 💬 Join the Discussions: Share your insights, provide feedback, or ask questions.
- 🐛 Report Issues: Submit bugs found or log feature requests for the
dfsproject. - 💡 Submit Pull Requests: Review open PRs, and submit your own PRs.
Contributing Guidelines
- Fork the Repository: Start by forking the project repository to your github account.
- Clone Locally: Clone the forked repository to your local machine using a git client.
git clone https://github.com/brinestone/dfs
- Create a New Branch: Always work on a new branch, giving it a descriptive name.
git checkout -b new-feature-x
- Make Your Changes: Develop and test your changes locally.
- Commit Your Changes: Commit with a clear message describing your updates.
git commit -m 'Implemented new feature x.' - Push to github: Push the changes to your forked repository.
git push origin new-feature-x
- Submit a Pull Request: Create a PR against the original project repository. Clearly describe the changes and their motivations.
- Review: Once your PR is reviewed and approved, it will be merged into the main branch. Congratulations on your contribution!
This project is protected under the SELECT-A-LICENSE License. For more details, refer to the LICENSE file.
- List any resources, contributors, inspiration, etc. here.