mirror of
https://github.com/BillyOutlast/Drop-Shielded.git
synced 2026-02-04 03:01:20 +01:00
46efba9ed47bfd684effa867b56185c8256bb9ac
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
-
Clone the repository
git clone https://github.com/BillyOutlast/Drop-Shielded.git cd Drop-Shielded -
Configure environment
cp .env.example .env # Edit .env with your configuration -
Generate SSL certificates
bash ./generate-certs.sh -
Start the services
docker-compose up -d # or with Podman podman-compose up -d -
Access your Drop server
- URL:
https://your-domain:your-port - Default:
https://drop.airdns.org:3000
- URL:
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
- Log into your AirVPN account
- Generate a Wireguard configuration
- Extract the private key, preshared key, and addresses
- Add these to your
.envfile
SSL Certificates
The setup uses self-signed certificates generated by the included script:
./generate-certs.sh
This creates:
nginx/certs/server.crt- SSL certificatenginx/certs/server.key- Private keynginx/certs/server.pem- Certificate bundle
Library Configuration
Single Library
Use LIBRARY_PATH for a single media library:
LIBRARY_PATH=./library
Multiple Libraries
Uncomment and configure multiple library paths in docker-compose.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
- Verify your AirVPN credentials in
.env - Check Gluetun logs:
docker-compose logs gluetun - Ensure your AirVPN account is active
SSL Certificate Issues
- Regenerate certificates:
bash ./generate-certs.sh - Verify certificate permissions
- Check Nginx logs:
docker-compose logs nginx
Database Connection Issues
- Wait for PostgreSQL to start completely
- Check health status:
docker-compose ps - Verify database credentials in
.env
Port Access Issues
- Ensure
DROP_AIRVPN_PORTis correctly configured - Check firewall settings
- 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
- Fork the repository
- Create a feature branch
- Make your changes
- Test the configuration
- Submit a pull request
License
This project is open source. Please check individual component licenses:
Support
For issues related to:
- Drop application: Drop GitHub Issues
- VPN connectivity: Gluetun GitHub Issues
- This setup: Create an issue
Description
Languages
Shell
100%