Ves al contingut
Tornar al blog

Allotjar Flask en un VPS amb Gunicorn i Nginx

Desplega una aplicació Python amb Flask en un VPS Linux amb entorn virtual, Gunicorn, systemd i Nginx; configura secrets, HTTPS i còpies.

  • allotjament Flask
  • Flask VPS
  • Python
  • Gunicorn

Si una eina d’IA t’ha generat una aplicació Flask, que funcioni amb flask run al teu ordinador no vol dir que estigui a punt per rebre trànsit públic. Flask és una aplicació WSGI: en producció necessites un servidor WSGI, un proxy HTTP i una configuració segura. El VPS és autogestionat: et dona accés al sistema per muntar aquesta pila i et fa responsable de les actualitzacions, la seguretat, les còpies i la recuperació.

Aquesta guia fa servir Debian o Ubuntu, Gunicorn i Nginx. Els noms hello, app i create_app són exemples: substitueix-los pels mòduls i objectes reals del teu repositori. No executis el servidor de desenvolupament ni el depurador de Flask en producció.

1. Identifica l’aplicació que vols executar

Revisa el repositori i localitza requirements.txt o pyproject.toml, el mòdul d’entrada i, si n’hi ha, una fàbrica com create_app(). Anota la versió de Python i els serveis externs que necessita: base de dades, emmagatzematge, tasques, correu o API. Comprova també si el projecte té un frontend separat amb Node; Gunicorn executa el backend Flask, però no compila aquest frontend.

Prova localment les rutes, els formularis, les pujades i les crides externes. Revisa el codi generat per IA per detectar debug=True, credencials pujades a Git i ajustos que només funcionin amb localhost. Si el projecte té una estructura diferent de dependències o serveis, adapta els passos abans del desplegament.

2. Prepara el VPS i un compte de servei

Tria un VPS Hostbrid amb Debian o Ubuntu compatible amb la versió de Python del projecte. Connecta-t’hi per SSH, aplica les actualitzacions i exposa només els ports necessaris. Crea un compte de servei en lloc d’executar l’aplicació com a root:

sudo apt update
sudo apt install git python3-venv nginx
sudo adduser --system --group --home /srv/flaskapp flaskapp

Clona el repositori a /srv/flaskapp/current. Per a repositoris privats, fes servir una clau de desplegament de només lectura i protegeix-ne la clau privada. Crea un entorn virtual i instal·la les versions fixades pel projecte:

sudo -u flaskapp python3 -m venv /srv/flaskapp/venv
sudo -u flaskapp /srv/flaskapp/venv/bin/pip install -r /srv/flaskapp/current/requirements.txt

Declara gunicorn com una dependència de producció. No instal·lis els paquets de l’aplicació al Python global del sistema.

3. Configura l’entorn de producció

Desa les variables de producció fora de Git, en un fitxer restringit com /etc/flaskapp.env. Flask no converteix automàticament qualsevol variable en un ajust de l’aplicació: el teu codi les ha de llegir. Genera una SECRET_KEY única, configura les credencials de base de dades i API i no reutilitzis valors de desenvolupament. No posis secrets a JavaScript del navegador, HTML, imatges ni logs.

Desactiva el mode debug i limita els noms de domini que accepta l’app. Si fas servir Flask 3.1 o posterior, revisa TRUSTED_HOSTS; en versions anteriors, comprova les proteccions equivalents disponibles. Els noms dels ajustos i la manera de carregar-los depenen del codi del projecte.

Fes una còpia abans de modificar dades. Si l’aplicació fa servir SQLite, comprova on desa el fitxer i quin usuari hi pot escriure. Per a més trànsit o diversos processos, valora una base de dades adequada i documenta com restaurar-la. Desa les pujades dels usuaris separades del codi i defineix-ne la retenció i les còpies.

4. Executa Flask amb Gunicorn i systemd

Prova primer la importació. Gunicorn rep el format mòdul:objecte: una instància Flask pot ser hello:app, i una fàbrica pot ser hello:create_app(). Canvia l’exemple pel punt d’entrada real de la teva aplicació:

cd /srv/flaskapp/current
sudo -u flaskapp /srv/flaskapp/venv/bin/gunicorn --bind 127.0.0.1:8000 'hello:create_app()'

Quan funcioni, fes servir systemd perquè el procés arrenqui amb el VPS i es reiniciï si falla. Desa aquesta unitat a /etc/systemd/system/flaskapp.service:

[Unit]
Description=Flask application
After=network.target

[Service]
User=flaskapp
Group=flaskapp
WorkingDirectory=/srv/flaskapp/current
EnvironmentFile=/etc/flaskapp.env
ExecStart=/srv/flaskapp/venv/bin/gunicorn --bind 127.0.0.1:8000 'hello:create_app()'
Restart=on-failure

[Install]
WantedBy=multi-user.target

Adapta el mòdul WSGI i confirma que systemd pot llegir el fitxer d’entorn sense fer-lo accessible a altres usuaris. Després executa sudo systemctl daemon-reload, sudo systemctl enable --now flaskapp i revisa sudo systemctl status flaskapp i journalctl -u flaskapp. Mantén Gunicorn a 127.0.0.1; si Nginx hi és al davant, no l’exposis directament a Internet.

5. Configura Nginx, el domini i HTTPS

Aquest bloc inicial de Nginx reenvia les peticions a Gunicorn. Canvia el domini i confirma el port d’escolta de l’app:

server {
    listen 80;
    server_name example.com www.example.com;

    location / {
        proxy_pass http://127.0.0.1:8000;
        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;
    }
}

Desa’l al directori de configuració de llocs de la distribució, activa’l, valida’l amb sudo nginx -t i recarrega Nginx. Apunta el domini al VPS, permet el trànsit web necessari i emet un certificat TLS amb un mètode compatible amb el sistema. Redirigeix HTTP a HTTPS abans d’acceptar credencials o dades sensibles.

Si Flask necessita conèixer el protocol o l’adreça originals, configura ProxyFix només quan les peticions passin realment pel proxy que controles i indica el nombre correcte de proxies. Confiar en capçaleres reenviades sense limitar la cadena permetria que un client falsifiqués valors.

6. Prova el recorregut i prepara l’operació

Des de fora del VPS, prova la portada, les rutes internes, els formularis, l’inici de sessió, els fitxers estàtics i les pujades. Reinicia el servei i comprova que torna a funcionar. Revisa els logs per trobar errors o secrets exposats i verifica que pots restaurar les còpies de la base de dades i dels fitxers. Si l’app necessita tasques en segon pla, configura aquests processos per separat i supervisa’ls.

Aquest recorregut és per a una aplicació Flask que vols administrar en Linux. Hostbrid proporciona un VPS amb accés root; tu instal·les i mantens Python, Flask, Gunicorn, Nginx, HTTPS, el tallafoc i les còpies. Compara les opcions VPS i els preus vigents amb l’ús mesurat de CPU, memòria i disc.

Referències d’implementació: documentació oficial de Flask sobre el desplegament en producció, Gunicorn, Nginx i ProxyFix.

Gestiona els teus webs, servidors i correu.

És gratis i triga un minut.

Mínim 8 caràcters. Ni només números ni una contrasenya comuna.

T’enviarem un correu per confirmar el compte.