Skip to main content

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