Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/virjilakrum/zkl-full-local-ipfs-gateway
Custom IPFS gateway and storage solution for the zk-lokomotive project. This implementation provides a decentralized file storage system with multiple node support and automatic replication.
https://github.com/virjilakrum/zkl-full-local-ipfs-gateway
arweave file gateway ipfs svelte upload zk-lokomotive zkl
Last synced: 7 days ago
JSON representation
Custom IPFS gateway and storage solution for the zk-lokomotive project. This implementation provides a decentralized file storage system with multiple node support and automatic replication.
- Host: GitHub
- URL: https://github.com/virjilakrum/zkl-full-local-ipfs-gateway
- Owner: virjilakrum
- License: mit
- Created: 2024-11-11T12:55:20.000Z (about 2 months ago)
- Default Branch: main
- Last Pushed: 2024-11-18T12:32:44.000Z (about 1 month ago)
- Last Synced: 2024-12-02T16:52:44.595Z (26 days ago)
- Topics: arweave, file, gateway, ipfs, svelte, upload, zk-lokomotive, zkl
- Language: TypeScript
- Homepage: https://zkl-full-local-ipfs-gateway.vercel.app/
- Size: 340 KB
- Stars: 0
- Watchers: 1
- Forks: 1
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# ZKL IPFS Gateway & Storage System
**Co-authored-by:** virjilakrum
**Signed-off-by:** virjilakrum
* _Custom IPFS gateway and storage solution for the zk-lokomotive project. This implementation provides a decentralized file storage system with multiple node support and automatic replication._
## Prerequisites
- Node.js (v16 or higher)
- Docker & Docker Compose
- IPFS Desktop (optional, for development)## Quick Start
1. Clone the repository:
```bash
git clone https://github.com/your-username/zkl-ipfs-gateway
cd zkl-ipfs-gateway
```2. Install dependencies:
```bash
npm install
```3. Start IPFS nodes using Docker:
```bash
docker-compose up -d
```4. Initialize IPFS configuration:
```bash
# Configure CORS for the primary node
docker exec ipfs-node-1 ipfs config --json API.HTTPHeaders.Access-Control-Allow-Origin '["*"]'
docker exec ipfs-node-1 ipfs config --json API.HTTPHeaders.Access-Control-Allow-Methods '["PUT", "POST", "GET"]'# Configure CORS for the backup node
docker exec ipfs-node-2 ipfs config --json API.HTTPHeaders.Access-Control-Allow-Origin '["*"]'
docker exec ipfs-node-2 ipfs config --json API.HTTPHeaders.Access-Control-Allow-Methods '["PUT", "POST", "GET"]'
```5. Start the development server:
```bash
npm run dev
```## Manual IPFS Node Setup (Alternative to Docker)
If you prefer running IPFS nodes manually:
1. Install IPFS:
```bash
# MacOS
brew install ipfs# Linux
wget https://dist.ipfs.io/go-ipfs/v0.12.0/go-ipfs_v0.12.0_linux-amd64.tar.gz
tar -xvzf go-ipfs_v0.12.0_linux-amd64.tar.gz
cd go-ipfs
sudo bash install.sh
```2. Initialize and start IPFS:
```bash
# Initialize IPFS
ipfs init# Configure CORS
ipfs config --json API.HTTPHeaders.Access-Control-Allow-Origin '["*"]'
ipfs config --json API.HTTPHeaders.Access-Control-Allow-Methods '["PUT", "POST", "GET"]'
ipfs config Addresses.API /ip4/0.0.0.0/tcp/5001# Start IPFS daemon
ipfs daemon
```## Project Structure
```bash
src/
├── lib/
│ └── storage/
│ ├── gateway.ts # Main gateway implementation
│ ├── types.ts # TypeScript interfaces
│ └── utils.ts # Helper functions
├── components/ # React/Svelte components
└── config/ # Configuration files
```## Docker Commands
```bash
# Start all services
docker-compose up -d# View logs
docker-compose logs -f# Stop all services
docker-compose down# Restart a specific node
docker-compose restart ipfs-node-1# Check node status
docker exec ipfs-node-1 ipfs swarm peers
```## Development Commands
```bash
# Start development server
npm run dev# Build for production
npm run build# Run tests
npm test# Check TypeScript types
npm run check
```## Environment Variables
Create a `.env` file in the root directory:
```env
# IPFS Node Configuration
IPFS_PRIMARY_NODE=http://localhost:5001
IPFS_BACKUP_NODE=http://localhost:5002
IPFS_REPLICATION_FACTOR=3# Storage Configuration
MAX_FILE_SIZE=100000000 # 100MB in bytes
PIN_TIMEOUT=300000 # 5 minutes in milliseconds
```## Production Deployment
For production deployment, update the node URLs in `gateway.ts`:
```typescript
const GATEWAY_CONFIG = {
nodes: [
{ url: process.env.IPFS_PRIMARY_NODE, type: 'primary' },
{ url: process.env.IPFS_BACKUP_NODE, type: 'backup' },
{ url: 'https://ipfs.io', type: 'public' }
]
};
```Then build and start:
```bash
npm run build
npm start
```## Monitoring
Check gateway status:
```bash
# View IPFS node status
curl http://localhost:5001/api/v0/id# Check peers
curl http://localhost:5001/api/v0/swarm/peers# View pinned files
curl http://localhost:5001/api/v0/pin/ls
```## Common Issues
1. If CORS errors occur:
```bash
# Restart IPFS with correct CORS settings
ipfs shutdown
ipfs config --json API.HTTPHeaders.Access-Control-Allow-Origin '["*"]'
ipfs daemon
```2. If connection refused:
```bash
# Check if IPFS daemon is running
ps aux | grep ipfs# Remove repo.lock if needed
rm -f ~/.ipfs/repo.lock
```## License
MIT
---
For more detailed documentation, please refer to the [official documentation](https://git.fybx.dev/fyb/zkl-docs).