Skip to content

Flask Application Deployment

Used for kedevo.com, topcoasters.co.uk, and similar apps on VPS3.

Stack

Component Technology
Runtime Python 3 + Flask
WSGI Gunicorn (2 workers)
Process Manager systemd
Reverse Proxy nginx
SSL Let's Encrypt (certbot)

Deployment Steps

  1. Create app directory: /home/deploy/{app_name}/
  2. Create venv: python3 -m venv venv
  3. Install deps: ./venv/bin/pip install flask gunicorn
  4. Create app.py with Flask application
  5. Create systemd service
  6. Enable and start: sudo systemctl enable --now {app}
  7. Create nginx config in /etc/nginx/sites-available/
  8. Symlink to sites-enabled, test, reload nginx
  9. Certbot for SSL: sudo certbot certonly --webroot -w /var/www/html -d domain.com
  10. Update nginx to include SSL, reload

Systemd Template

[Unit]
Description={App Name}
After=network.target

[Service]
User=deploy
WorkingDirectory=/home/deploy/{app_name}
ExecStart=/home/deploy/{app_name}/venv/bin/gunicorn -w 2 -b 127.0.0.1:{port} app:app
Restart=always
RestartSec=5

[Install]
WantedBy=multi-user.target