diff --git a/README.md b/README.md deleted file mode 100644 index f546160..0000000 --- a/README.md +++ /dev/null @@ -1,201 +0,0 @@ -# Drop-Shielded - -A secure, VPN-protected Drop media server setup using Docker Compose with Gluetun VPN tunnel, PostgreSQL database, and Nginx reverse proxy with SSL termination. - -## Features - -- 🔒 **VPN Protection**: All traffic routed through AirVPN using Gluetun -- 🗄️ **Database**: PostgreSQL 14 with health checks -- 🔐 **SSL/HTTPS**: Self-signed certificates with Nginx reverse proxy -- 📁 **Media Library**: Configurable library paths for media storage -- 🐳 **Containerized**: Fully containerized setup with Docker Compose - -## Architecture - -``` -Internet → AirVPN (Gluetun) → Nginx (SSL) → Drop Application - ↓ - PostgreSQL Database -``` - -## Prerequisites - -- Docker or Podman with Compose -- AirVPN Wireguard configuration -- OpenSSL (for certificate generation) - -## Quick Start - -1. **Clone the repository** - ```bash - git clone https://github.com/BillyOutlast/Drop-Shielded.git - cd Drop-Shielded - ``` - -2. **Configure environment** - ```bash - cp .env.example .env - # Edit .env with your configuration - ``` - -3. **Generate SSL certificates** - ```bash - bash ./generate-certs.sh - ``` - -4. **Start the services** - ```bash - docker-compose up -d - # or with Podman - podman-compose up -d - ``` - -5. **Access your Drop server** - - URL: `https://your-domain:your-port` - - Default: `https://drop.airdns.org:3000` - -## Configuration - -### Environment Variables - -Copy `.env.example` to `.env` and configure: - -| Variable | Description | Example | -|----------|-------------|---------| -| `DROP_AIRVPN_PORT` | External port for Drop access | `3000` | -| `DROP_DDNS` | Your domain/DDNS hostname | `drop.airdns.org` | -| `WIREGUARD_PRIVATE_KEY` | Your AirVPN private key | `your-private-key` | -| `WIREGUARD_PRESHARED_KEY` | Your AirVPN preshared key | `your-preshared-key` | -| `WIREGUARD_ADDRESSES` | Your AirVPN IP addresses | `10.99.99.99/32` | -| `POSTGRES_PASSWORD` | PostgreSQL password | `drop` | -| `POSTGRES_USER` | PostgreSQL username | `drop` | -| `POSTGRES_DB` | PostgreSQL database name | `drop` | -| `LIBRARY_PATH` | Path to your media library | `./library` | -| `DROP_DATA_PATH` | Path to Drop data directory | `./data` | - -### AirVPN Setup - -1. Log into your AirVPN account -2. Generate a Wireguard configuration -3. Extract the private key, preshared key, and addresses -4. Add these to your `.env` file - -### SSL Certificates - -The setup uses self-signed certificates generated by the included script: - -```bash -./generate-certs.sh -``` - -This creates: -- `nginx/certs/server.crt` - SSL certificate -- `nginx/certs/server.key` - Private key -- `nginx/certs/server.pem` - Certificate bundle - -### Library Configuration - -#### Single Library -Use `LIBRARY_PATH` for a single media library: -```env -LIBRARY_PATH=./library -``` - -#### Multiple Libraries -Uncomment and configure multiple library paths in `docker-compose.yaml`: -```yaml -volumes: - - ${LIBRARY_PATH_1}:/library/1 - - ${LIBRARY_PATH_2}:/library/2 -``` - -## Services - -### Gluetun VPN -- **Image**: `qmcgaw/gluetun` -- **Purpose**: VPN tunnel for all traffic -- **Network**: Host for other containers - -### PostgreSQL -- **Image**: `postgres:14-alpine` -- **Purpose**: Database for Drop application -- **Health Check**: Built-in readiness probe - -### Nginx -- **Image**: `nginx:alpine` -- **Purpose**: SSL termination and reverse proxy -- **Port**: Configurable via `DROP_AIRVPN_PORT` - -### Drop -- **Image**: `ghcr.io/drop-oss/drop:latest` -- **Purpose**: Media server application -- **Dependencies**: PostgreSQL health check - -## File Structure - -``` -Drop-Shielded/ -├── docker-compose.yaml # Main compose configuration -├── .env.example # Environment template -├── .env # Your configuration (create from example) -├── generate-certs.sh # SSL certificate generator -├── nginx/ -│ ├── nginx.conf # Nginx configuration -│ └── certs/ # SSL certificates (generated) -├── db/ # PostgreSQL data -├── data/ # Drop application data -├── gluetun/ # Gluetun configuration -└── library/ # Media library -``` - -## Troubleshooting - -### VPN Connection Issues -1. Verify your AirVPN credentials in `.env` -2. Check Gluetun logs: `docker-compose logs gluetun` -3. Ensure your AirVPN account is active - -### SSL Certificate Issues -1. Regenerate certificates: `bash ./generate-certs.sh` -2. Verify certificate permissions -3. Check Nginx logs: `docker-compose logs nginx` - -### Database Connection Issues -1. Wait for PostgreSQL to start completely -2. Check health status: `docker-compose ps` -3. Verify database credentials in `.env` - -### Port Access Issues -1. Ensure `DROP_AIRVPN_PORT` is correctly configured -2. Check firewall settings -3. Verify VPN port forwarding - -## Security Notes - -- All traffic is routed through the VPN -- Self-signed certificates provide encryption but will show browser warnings -- Database is only accessible within the container network -- Media libraries are mounted read-only where possible - -## Contributing - -1. Fork the repository -2. Create a feature branch -3. Make your changes -4. Test the configuration -5. Submit a pull request - -## License - -This project is open source. Please check individual component licenses: -- [Drop](https://github.com/drop-oss/drop) -- [Gluetun](https://github.com/qdm12/gluetun) -- [PostgreSQL](https://www.postgresql.org/) -- [Nginx](https://nginx.org/) - -## Support - -For issues related to: -- **Drop application**: [Drop GitHub Issues](https://github.com/drop-oss/drop/issues) -- **VPN connectivity**: [Gluetun GitHub Issues](https://github.com/qdm12/gluetun/issues) -- **This setup**: [Create an issue](https://github.com/BillyOutlast/Drop-Shielded/issues) \ No newline at end of file