Files
hermes-config/skills/self-hosting/docker-service-deployment/references/sparkyfitness.md
T
2026-07-13 02:00:15 -04:00

3.2 KiB

SparkyFitness Setup (rayserver)

Deployment

  • Docker Compose: /mnt/seagate8tb/Websites/SparkyFitness/docker-compose.yml
  • Env config: /mnt/seagate8tb/Websites/SparkyFitness/.env
  • Backup dir: /mnt/seagate8tb/Websites/SparkyFitness/backup/
  • Uploads dir: /mnt/seagate8tb/Websites/SparkyFitness/uploads/

Architecture

[Internet] → nginx (home server, port 3451 SSL) → localhost:3004 → frontend container (nginx, port 80)
                                                              ↕ (Docker network)
                                              server container (port 3010)
                                                              ↕
                                              Postgres container (port 5432)

The frontend container runs its own nginx that reverse-proxies API calls to the server container over the Docker internal network. The home server nginx just proxies HTTP to port 3004.

Nginx Reverse Proxy Config

Home nginx (/etc/nginx/sites-available/sparkyfitness):

server {
    listen 3451 ssl;
    server_name sparkyfitness.graj-media.com grajmedia.duckdns.org;

    ssl_certificate /etc/letsencrypt/live/grajmedia.duckdns.org/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/grajmedia.duckdns.org/privkey.pem;
    ssl_protocols TLSv1.2 TLSv1.3;
    ssl_ciphers HIGH:!aNULL:!MD5;

    client_max_body_size 100M;

    location / {
        proxy_pass http://127.0.0.1:3004;
        proxy_http_version 1.1;
        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_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "upgrade";
        proxy_read_timeout 86400;
    }
}

Then symlink and reload:

sudo ln -sf /etc/nginx/sites-available/sparkyfitness /etc/nginx/sites-enabled/sparkyfitness
sudo nginx -t && sudo systemctl reload nginx

Env Var Changes When Exposing Publicly

In .env, change these from the default:

SPARKY_FITNESS_FRONTEND_URL=https://sparkyfitness.graj-media.com
SPARKY_FITNESS_EXTRA_TRUSTED_ORIGINS=https://sparkyfitness.graj-media.com,http://localhost:3004,http://192.168.50.98:3004

After changing .env, restart the stack:

cd /mnt/seagate8tb/Websites/SparkyFitness
docker compose up -d --force-recreate

Android Mobile App

Verification

# Local access
curl -sk https://localhost:3451/

# Check response includes the SparkyFitness HTML
curl -sk https://localhost:3451/ | grep -o '<title>.*</title>'

# nginx logs
sudo tail -20 /var/log/nginx/access.log | grep 3451