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

94 lines
3.2 KiB
Markdown

# 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`):
```nginx
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:
```bash
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:
```bash
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:
```bash
cd /mnt/seagate8tb/Websites/SparkyFitness
docker compose up -d --force-recreate
```
## Android Mobile App
- Download: `app-release.apk` from 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
```bash
# 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
```