Despliegue de una aplicación Swift en VPS: guía paso a paso para avanzados
Has creado una excelente aplicación de servidor en Swift utilizando el framework Vapor. Ahora necesitas ponerla en producción. El despliegue de una aplicación Swift en VPS requiere comprender las particularidades de Swift en Linux, configurar el entorno del servidor y utilizar las herramientas adecuadas para garantizar estabilidad y rendimiento. En esta guía avanzada, analizaremos el ciclo completo: desde la compilación para Linux hasta la configuración de CI/CD, el trabajo con Docker y Supervisor.
1. Preparación del servidor y compilación de Swift para Linux
Lo primero que debes entender: Swift en macOS y Linux son ecosistemas diferentes. Para el despliegue en VPS (Ubuntu 22.04 LTS) se requiere compilación cruzada o compilación directamente en el servidor. Se recomienda compilar en el servidor para evitar problemas con las librerías.
1.1 Instalación de Swift en Ubuntu
Nos conectamos al servidor por SSH e instalamos las dependencias necesarias:
sudo apt updatesudo apt install -y curl git clang libicu-dev libcurl4-openssl-dev libssl-dev \ libsqlite3-dev libxml2-dev pkg-config uuid-dev
# Descargamos la última versión de Swift Toolchainwget https://download.swift.org/swift-5.9.2-release/ubuntu2204/swift-5.9.2-RELEASE/swift-5.9.2-RELEASE-ubuntu22.04.tar.gztar -xzf swift-5.9.2-RELEASE-ubuntu22.04.tar.gzsudo mv swift-5.9.2-RELEASE-ubuntu22.04 /usr/share/swift
# Agregamos al PATHecho 'export PATH=/usr/share/swift/usr/bin:$PATH' >> ~/.bashrcsource ~/.bashrcswift --version1.2 Clonación y compilación del proyecto
Clonamos el repositorio y compilamos la versión de lanzamiento de la aplicación:
git clone https://github.com/your-username/your-swift-app.gitcd your-swift-appswift build --configuration releaseDespués de una compilación exitosa, el binario se encontrará en .build/release/YourApp. Verifica su ejecución manualmente:
./.build/release/YourApp serve --hostname 0.0.0.0 --port 80802. Configuración del entorno de producción: Nginx y Supervisor
Ejecutar la aplicación Swift directamente en el puerto 80 es una mala práctica. Usamos la combinación de Nginx (proxy inverso) + Supervisor (gestor de procesos).
2.1 Configuración de Nginx
Instalamos Nginx y creamos una configuración para redirigir las solicitudes a nuestra aplicación Swift:
sudo apt install nginxsudo nano /etc/nginx/sites-available/yourappContenido del archivo:
server { listen 80; server_name yourdomain.com www.yourdomain.com;
location / { proxy_pass http://127.0.0.1:8080; proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection 'upgrade'; proxy_set_header Host $host; proxy_cache_bypass $http_upgrade; 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; }
# Configuración para archivos grandes (si es necesario) client_max_body_size 50m;}Activamos la configuración y verificamos:
sudo ln -s /etc/nginx/sites-available/yourapp /etc/nginx/sites-enabled/sudo nginx -tsudo systemctl restart nginx2.2 Configuración de Supervisor para reinicio automático
Supervisor supervisará el proceso y lo reiniciará en caso de fallo. Lo instalamos y creamos la configuración:
sudo apt install supervisorsudo nano /etc/supervisor/conf.d/yourapp.confContenido de la configuración:
[program:yourapp]command=/home/ubuntu/your-swift-app/.build/release/YourApp serve --hostname 0.0.0.0 --port 8080directory=/home/ubuntu/your-swift-appuser=ubuntuautostart=trueautorestart=truestartretries=3stderr_logfile=/var/log/yourapp.err.logstdout_logfile=/var/log/yourapp.out.logenvironment=ENVIRONMENT="producti