Ir al contenido principal

FastAPI + Nginx + Swagger protegido

  • Nginx como proxy reverso
  • Socket UNIX (mejor rendimiento)
  • Swagger protegido con usuario y contraseña
  • Systemd para ejecución automática
Objetivo: Tener Swagger accesible solo para administradores y la API funcionando normalmente.

📁 Estructura del proyecto

/opt/factum/
├── app/
│   └── main.py
├── venv/
├── requirements.txt
└── factum_instalacion.py

Socket usado:

/tmp/factum.sock

⚙️ FastAPI

from fastapi import FastAPI
from app.routes import router

app = FastAPI(
    title="Factum",
    docs_url="/docs",
    redoc_url=None,
    openapi_url="/openapi.json"
)

app.include_router(router)
Swagger queda disponible en /factum/docs

🧠 Servicio systemd

[Unit]
Description=FastAPI Factum
After=network.target

[Service]
User=ubuntu
Group=ubuntu
WorkingDirectory=/opt/factum
Environment="PATH=/opt/factum/venv/bin"
ExecStartPre=/usr/bin/rm -f /tmp/factum.sock
ExecStart=/opt/factum/venv/bin/uvicorn app.main:app --uds /tmp/factum.sock
Restart=always

[Install]
WantedBy=multi-user.target
No olvides ejecutar systemctl daemon-reload después de crear el servicio.

🌐 Configuración Nginx

server {
    listen 443 ssl;
    server_name japo.click;

    ssl_certificate /etc/letsencrypt/live/japo.click/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/japo.click/privkey.pem;

    location /factum/ {
        rewrite ^/factum/(.*)$ /$1 break;
        proxy_pass http://unix:/tmp/factum.sock:;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    }

    location /factum/docs {
        auth_basic "Swagger protegido";
        auth_basic_user_file /etc/nginx/.htpasswd;

        proxy_pass http://unix:/tmp/factum.sock:/docs;
    }

    location /factum/openapi.json {
        auth_basic "Swagger protegido";
        auth_basic_user_file /etc/nginx/.htpasswd;

        proxy_pass http://unix:/tmp/factum.sock:/openapi.json;
    }
}

🔐 Proteger Swagger con contraseña

sudo htpasswd -c /etc/nginx/.htpasswd swagger
El usuario será swagger y la contraseña la defines al momento de crearla.

🔁 Recargar servicios

sudo nginx -t
sudo systemctl reload nginx
sudo systemctl restart factum

✅ Resultado final

RutaEstado
/factum/health✅ Público
/factum/api/*🔐 Token
/factum/docs🔒 Usuario y contraseña
/factum/openapi.json🔒 Protegido
✔ Swagger protegido
✔ API segura
✔ Compatible con producción
✔ Fácil mantenimiento

📌 Tip final

Si querés aún más seguridad, podés:
  • Restringir Swagger por IP
  • Ocultarlo en producción
  • Usar JWT en los endpoints

Comentarios

Entradas populares de este blog

Instalación y Configuración de MySQL 5.7 en Ubuntu 24.04 LTS

Instalar MySQL 5.7 en Ubuntu 24.04 1. Descargar e instalar MySQL Copiar mkdir ~/mysql57 cd ~/mysql57 wget https://cdn.mysql.com/archives/mysql-5.7/mysql-5.7.44-linux-glibc2.12-x86_64.tar.gz tar -zxvf mysql-5.7.44-linux-glibc2.12-x86_64.tar.gz sudo mv mysql-5.7.44-linux-glibc2.12-x86_64 /usr/local/mysql sudo ln -s /usr/local/mysql/bin/mysql /usr/local/bin/mysql 2. Instalar dependencias necesarias IMPORTANTE: Se descargan las versiones nuevas de las librerías y se las vincula con las librerías que necesita MySQL. Copiar sudo apt update # Reemplazo de libaio sudo apt install libaio1t64 # Reemplazo de libtinfo y ncurses sudo apt install libtinfo6 libncurses6 Copiar # Crear los enlaces simbólicos sudo ln -sf /usr/lib/x86_64-linux-gnu/libaio.so.1t64 /usr/lib/libaio.so.1 sudo ln -sf /usr/lib/x86_64-linux-gnu/libtinfo.so.6 /usr/lib/x86_64-linux-gnu/libtinfo.so.5 sudo ln -sf /usr/lib/x86_64-linux-gnu/libncurses.so.6 /usr/lib/x86_64...

Instalar Evolution API en Docker con Redis y PostgreSQL Local

Instalar Evolution API en Docker con Redis y PostgreSQL Local En este tutorial vamos a levantar Evolution API usando Docker , con soporte de Redis para sesiones y PostgreSQL local para almacenar datos de manera persistente y compartida entre varios usuarios. 1. Estructura del proyecto Crea una carpeta para tu proyecto y colócate en ella: mkdir -p ~/docker/evolution-api cd ~/docker/evolution-api 2. Archivo docker-compose.yml Este compose levanta Redis y Evolution API : version: "3.9" services: # ✅ SERVICIO REDIS redis: container_name: evolution_redis image: redis:7-alpine restart: unless-stopped ports: - "6379:6379" volumes: - redis_data:/data command: redis-server --save 60 1 --loglevel warning # ✅ SERVICIO EVOLUTION API evolution-api: container_name: evolution_api image: atendai/evolution-api restart: unless-stopped ports: - "8085:8080" env_file: - .env ...

Instalar Jasper Studio 6.21 para Ubuntu 24.04

Instalar js-studiocomm_6.21.3 en Ubuntu 24.4 Para instalar Jaspersoft Studio en Ubuntu 24.4, sigue estos pasos: 1. Descargar Jasper Studio Descarga la versión js-studiocomm_6.21.3 desde el siguiente enlace: Jaspersoft Studio 6.21.3 2. Crear el directorio de instalación mkdir /opt/jasperstudio 3. Mover el archivo descargado mv /dir_descarga/js-studiocomm_6.21.3_linux_x86_64.tgz /opt/jasperstudio/ cd /opt/jasperstudio 4. Extraer el archivo tar -xvzf js-studiocomm_6.21.3_linux_x86_64.tgz cd js-studiocomm_6.21.3 5. Ejecutar Jaspersoft Studio ./Jaspersoft\ Studio 6. Crear acceso directo en el escritorio Para facilitar el acceso, crea un archivo .desktop en el escritorio: gedit ~/Escritorio/jaspersoft-studio.desktop En el archivo jaspersoft-studio.desktop , agrega lo siguiente: [Desktop Entry] Version=1.0 Ty...