Deployment Guide (DigitalOcean + Local)
Repository: github.com/ianroy/makerflowPM
Local Test Environment
git clone https://github.com/ianroy/makerflowPM.git
cd makerflowPM
cp .env.example .env
pip install -r requirements.txt
python3 app/server.py
Open http://127.0.0.1:8080/login.
DigitalOcean Droplet (Recommended)
./scripts/deploy_production.sh \
--ssh ubuntu@YOUR_DROPLET_IP \
--domain makerflow.org \
--admin-email [email protected] \
--admin-password 'REPLACE_WITH_STRONG_PASSWORD'
DigitalOcean App Platform
Use the included spec: .do/app.yaml.
doctl apps create --spec .do/app.yaml
doctl apps update <APP_ID> --spec .do/app.yaml
If configuring manually, use:
Build command: pip install -r requirements.txt
Run command: bash -lc "python3 scripts/bootstrap_db.py && gunicorn wsgi:application --bind 0.0.0.0:$PORT --workers 2 --threads 2 --timeout 120"
HTTP port: 8080
Health check path: /readyz
Managed PostgreSQL Setup
- Create a DO Managed PostgreSQL cluster.
- Add your app as a trusted source.
- Set
MAKERSPACE_DATABASE_URLin app environment variables. - Redeploy.
postgresql://doadmin:REPLACE_PASSWORD@REPLACE_HOST:25060/defaultdb?sslmode=require
Troubleshooting (Field-tested)
Run Command Not Executable
- Clear broken custom run command overrides in DO UI.
- Use the exact run command above.
Health Check Failures
- Confirm bind target is
0.0.0.0:$PORT. - Confirm health route is
/readyzor/healthz. - Increase initial delay to 30-60 seconds for cold starts.
Missing Tables (e.g., spaces)
- Ensure startup runs
python3 scripts/bootstrap_db.pybefore gunicorn.
Login Loop / Session Issues
- Set stable
MAKERSPACE_SECRET_KEY. - Set
MAKERSPACE_COOKIE_SECURE=1for HTTPS production. - Verify database writes are succeeding for sessions.
CSRF Token Mismatch
- Log out and clear cookies.
- Use one canonical HTTPS domain (avoid mixed hostnames).
Validation Commands
curl -i http://127.0.0.1:8080/healthz
curl -i http://127.0.0.1:8080/readyz