Despliegue en Google Cloud: Flask + PostgreSQL + Nginx
🎯 Objetivo:
Llevar tu aplicación web (Python, Flask, PostgreSQL) a un servidor en la nube usando
Google Cloud Platform (GCP) .
Requisitos previos
Cuenta en Google Cloud Console
Tener activo el proyecto con los $300 USD de crédito
Conocimiento básico de terminal Linux
Tu código listo localmente (el que ya implementaste en Ubuntu)
1. Crear una instancia en Compute Engine
Paso 1: Ir a Compute Engine
• En Google Cloud Console → Menú ☰ → Compute Engine → Instancias de VM
Paso 2: Crear nueva VM
Haz clic en Crear instancia y configura así:
Nombre flask-app-server
Región / Zona Selecciona algo cerca de ti ([Link]-central1-a)
Máquina e2-micro(gratuito dentro del límite)
Imagen Debian 12oUbuntu 22.04 LTS
Acceso HTTP/HTTPS Marca ambas opciones
✅ e2-micro está dentro del Tier Gratuito de GCP.
Paso 3: Crear
Una vez creada, copia la IP externa asignada. La usarás para acceder desde internet.
2. Conectar a la máquina vía SSH
Puedes usar directamente el botón SSH en la consola de GCP o conectarte desde tu terminal local:
bash
ssh -i ~/.ssh/tu_clave usuario@tu_ip_externa
3. Instalar dependencias necesarias
bash
sudo apt update && sudo apt upgrade -y
sudo apt install python3 python3-pip python3-venv nginx postgresql
postgresql-contrib git -y
4. Subir tu código a la VM
Tienes varias formas:
Opción A: Usar Git
Si ya tienes tu proyecto en GitHub o GitLab:
bash
git clone [Link]
cd tuproyecto
Opción B: Subir archivos manualmente
Usa scp desde tu PC local:
bash
scp -r ./mi_app_web usuario@tu_ip_externa:/home/usuario/
5. Configurar entorno Python
bash
cd mi_app_web
python3 -m venv venv
source venv/bin/activate
pip install -r [Link]
Si no tienes [Link], instala manualmente:
bash
pip install flask gunicorn psycopg2-binary
6. Configurar PostgreSQL
bash
sudo -u postgres psql
Dentro de psql:
sql
CREATE DATABASE tu_basedatos;
CREATE USER tu_usuario WITH PASSWORD 'tu_contraseña';
ALTER ROLE tu_usuario SET client_encoding TO 'utf8';
ALTER ROLE tu_usuario SET default_transaction_isolation TO 'read committed';
ALTER ROLE tu_usuario SET timezone TO 'UTC';
GRANT ALL PRIVILEGES ON DATABASE tu_basedatos TO tu_usuario;
\q
Edite su archivo [Link] o [Link] con las credenciales correctas.
7. Probar la aplicación con Gunicorn
bash
gunicorn --bind [Link]:5000 app:app
Desde tu navegador visita:
[Link]
Presiona Ctrl+C para detener.
8. Configurar Gunicorn como servicio systemd
Crea el archivo:
bash
sudo nano /etc/systemd/system/[Link]
Contenido:
ini
[Unit]
Description=Gunicorn instance for Flask App
After=[Link]
[Service]
User=tu_usuario
Group=www-data
WorkingDirectory=/home/tu_usuario/mi_app_web
Environment="PATH=/home/tu_usuario/mi_app_web/venv/bin"
ExecStart=/home/tu_usuario/mi_app_web/venv/bin/gunicorn --workers 3 --bind
unix:[Link] -m 007 app:app
[Install]
WantedBy=[Link]
Guarda y ejecuta:
bash
sudo systemctl daemon-reload
sudo systemctl start flaskapp
sudo systemctl enable flaskapp
9. Configurar Nginx como proxy inverso
bash
sudo nano /etc/nginx/sites-available/flaskapp
Contenido:
nginx
server {
listen 80;
server_name tu_ip_externa;
location / {
proxy_pass [Link]
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}
Activa la configuración:
bash
sudo ln -s /etc/nginx/sites-available/flaskapp /etc/nginx/sites-enabled/
sudo nginx -t
sudo systemctl restart nginx
✅ ¡Listo!
Ahora puedes acceder a tu aplicación desde cualquier lugar:
1
[Link]
📝 Notas importantes
• Tu IP externa puede cambiar si apagas la VM. Para evitar esto, reserva una IP estática en:
• Menú ☰ → Redes VPC → Direcciones IP externas → Reservar IP estática
• Puedes automatizar el proceso con scripts o incluso con Docker si lo deseas.