Fenrir Panel — Docker Installation
Install Docker
curl -sSL https://get.docker.com/ | CHANNEL=stable bash
Verify:
docker --version
docker compose version
Download Compose Stack
mkdir -p /opt/fenrir && cd /opt/fenrir
curl -o docker-compose.yml https://raw.githubusercontent.com/Luxxy-Hosting/Fenrir/main/docker/docker-compose.yml
curl -o .env https://raw.githubusercontent.com/Luxxy-Hosting/Fenrir/main/docker/.env.example
Configure Environment
nano .env
POSTGRES_USER=panel
POSTGRES_PASSWORD=CHANGE_ME
POSTGRES_DB=panel
JWT_SECRET=CHANGE_ME
CORS_ORIGIN=https://panel.example.com
NEXT_PUBLIC_API_URL=https://panel.example.com/api
Generate secrets:
sed -i "s|CHANGE_ME|$(openssl rand -hex 16)|g" .env
Start the Panel
docker compose up -d
Run migrations:
docker compose exec backend npx prisma migrate deploy
Reverse Proxy (Nginx)
apt install -y nginx certbot python3-certbot-nginx
nano /etc/nginx/sites-available/panel
server {
listen 80;
server_name panel.example.com;
location / {
proxy_pass http://127.0.0.1:3000;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_read_timeout 86400;
}
location /api {
proxy_pass http://127.0.0.1:3001;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_read_timeout 86400;
client_max_body_size 100m;
}
}
ln -s /etc/nginx/sites-available/panel /etc/nginx/sites-enabled/
rm -f /etc/nginx/sites-enabled/default
nginx -t && systemctl reload nginx
SSL
certbot --nginx -d panel.example.com
Updating
cd /opt/fenrir
docker compose pull
docker compose up -d
docker compose exec backend npx prisma migrate deploy
Useful Commands
docker compose -f /opt/fenrir/docker-compose.yml logs -f # logs
docker compose -f /opt/fenrir/docker-compose.yml restart # restart
docker compose -f /opt/fenrir/docker-compose.yml down # stop
docker compose -f /opt/fenrir/docker-compose.yml exec postgres psql -U panel # db shell