3.2 KiB
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
- Download:
app-release.apkfrom https://github.com/CodeWithCJ/SparkyFitness/releases/latest (v0.17.3, ~188MB) - Sideload on Android phone
- Configure the app to point at
https://sparkyfitness.graj-media.com(or whichever subdomain) - Requires HTTPS — the app won't connect over plain HTTP
- Integrates with Android Health Connect for data sync
- Play Store beta: Join https://groups.google.com/g/sparkyfitness first, then https://play.google.com/store/apps/details?id=com.SparkyApps.SparkyFitnessMobile
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