Welcome to Decentralized Cloud Storage, an innovative project combining a powerful backend and an intuitive frontend to deliver a complete decentralized storage solution. This project merges The Merkle Trees (backend API) and The Merkle Trees Client (frontend interface) into a unified platform.
- Introduction
- Features
- Architecture
- Prerequisites
- Installation
- Usage
- Configuration
- Contributing
- License
Decentralized Cloud Storage is a comprehensive solution designed to provide secure, resilient, and decentralized data management. By leveraging IPFS (InterPlanetary File System) for distributed storage and MongoDB for metadata management, this project eliminates the risks associated with centralized cloud providers. The system features a modern Nuxt.js frontend that enables users to create folders, upload files, write notes, and interact with a local Large Language Model (LLM).
- Decentralized Storage: Utilizes IPFS for distributed data storage across multiple nodes
- Enhanced Security: Data is encrypted and distributed, reducing the risk of data loss or unauthorized access
- Scalability: Easily scales to accommodate growing data volumes
- Robust API: RESTful API built with ASP.Net Core for reliable data operations
- MongoDB Integration: Efficient metadata and document management
- Modern UI: User-friendly interface built with Nuxt.js
- Folder Management: Create and organize folders hierarchically
- File Upload: Seamlessly upload files to decentralized storage
- Note Taking: Write and manage notes directly in the application
- LLM Integration: Interact with a local Large Language Model for enhanced productivity
- Responsive Design: Works across desktop and mobile devices
This project consists of two main components:
- Backend API (ASP.Net Core): Handles storage operations, IPFS interactions, and data management
- Frontend Client (Nuxt.js): Provides the user interface and connects to the backend API
┌─────────────────────┐
│ Nuxt.js Client │
│ (User Interface) │
└──────────┬──────────┘
│
▼
┌─────────────────────┐
│ ASP.Net Core API │
│ (Backend Logic) │
└──────────┬──────────┘
│
┌─────┴─────┐
▼ ▼
┌─────────┐ ┌─────────┐
│ IPFS │ │ MongoDB │
│ Node │ │ │
└─────────┘ └─────────┘
Before starting, ensure you have the following installed:
- .NET 8 SDK or later
- Node.js (v18 or later) and npm
- IPFS (InterPlanetary File System)
- MongoDB (local or remote instance)
git clone https://github.com/pierreuntas/decentralized-cloud-storage
cd decentralized-cloud-storageInitialize and start your local IPFS node:
ipfs init
ipfs daemonThe IPFS daemon should now be running on http://localhost:5001.
Ensure MongoDB is running and accessible. Note your connection string for the configuration step.
Navigate to the API directory and configure your settings:
cd TheMerkleTrees.ApiEdit appsettings.json with your MongoDB configuration:
{
"MongoDB": {
"ConnectionString": "your_mongodb_connection_string",
"DatabaseName": "your_database_name"
}
}Install dependencies and run the API:
dotnet restore
dotnet runThe API will be available at http://localhost:5083.
Open a new terminal and navigate to the client directory:
cd TheMerkleTreeClientInstall dependencies:
npm installConfigure the API endpoint in your Nuxt configuration file if needed, then start the development server:
npm run devThe frontend will be available at http://localhost:3000.
- Frontend Interface: Navigate to
http://localhost:3000to access the user interface - API Documentation: Access the Swagger documentation at
http://localhost:5083/swagger/index.html
- Create Folders: Organize your files with a hierarchical folder structure
- Upload Files: Drag and drop files for decentralized storage
- Write Notes: Create and edit text notes
- LLM Interaction: Use the integrated local LLM for queries and assistance
- Search: Find your files and notes quickly
Edit appsettings.json in the API project:
{
"MongoDB": {
"ConnectionString": "mongodb://localhost:27017",
"DatabaseName": "decentralized_storage"
},
"IPFS": {
"ApiUrl": "http://localhost:5001"
}
}Configure API endpoints in your Nuxt config file as needed for your environment.
Contributions are welcome and appreciated! To contribute:
- Fork the repository
- Create a feature branch (
git checkout -b feature/amazing-feature) - Commit your changes (
git commit -m 'Add amazing feature') - Push to the branch (
git push origin feature/amazing-feature) - Open a Pull Request
Please ensure your code follows the existing style and includes appropriate tests.
This project is licensed under the GNU Affero General Public License v3.0 (AGPL-3.0). This license ensures that the software remains free and open-source while allowing the project owner to monetize the software. Any modifications to the code must also be released under the same license.
See the LICENSE file for complete details.
Thank you for using Decentralized Cloud Storage! We hope this solution meets your decentralized storage needs while providing a modern and intuitive user experience.
For questions, suggestions, or issues, please feel free to open an issue on GitHub.
Made with ❤️ for a decentralized future