Despliegue de una aplicación Swift en VPS: paso a paso de la A a la Z
\n\nSwift dejó de ser hace tiempo un lenguaje solo para el desarrollo de iOS. Gracias al framework Vapor y al soporte oficial de Linux, puedes crear aplicaciones de servidor de alto rendimiento en Swift y desplegarlas en un VPS. En esta guía, recorreremos todo el proceso, desde la configuración del servidor hasta la puesta en marcha de la versión de producción de tu aplicación Swift.
\n\n1. Preparación del VPS e instalación de Swift
\n\nPara empezar, necesitarás un VPS con Ubuntu 22.04 LTS (o 20.04). Conéctate por SSH y realiza la actualización del sistema:
\n\nssh root@tu-ip-del-servidor\napt update && apt upgrade -y\n\nInstala las dependencias necesarias para Swift:
\n\napt install -y curl git build-essential libssl-dev libcurl4-openssl-dev\napt install -y libxml2-dev libicu-dev libsqlite3-dev libz-dev\n\nAhora descarga e instala Swift para Ubuntu. Verifica la versión actual en swift.org. En el momento de escribir este artículo, es Swift 5.9:
\n\ncd /opt\nwget https://download.swift.org/swift-5.9-release/ubuntu2204/swift-5.9-RELEASE/swift-5.9-RELEASE-ubuntu22.04.tar.gz\ntar xzf swift-5.9-RELEASE-ubuntu22.04.tar.gz\necho 'export PATH=/opt/swift-5.9-RELEASE-ubuntu22.04/usr/bin:$PATH' >> ~/.bashrc\nsource ~/.bashrc\n\nVerifica la instalación:
\n\nswift --version\n\nDeberías ver la versión de Swift 5.9.
\n\n2. Creación y compilación de la aplicación Swift/Vapor
\n\nInstala Vapor Toolbox (opcional, pero conveniente):
\n\ngit clone https://github.com/vapor/toolbox.git\ncd toolbox\nswift build -c release\ncp .build/release/vapor /usr/local/bin/\n\nCreemos una aplicación de prueba con Vapor. Si ya tienes un proyecto, simplemente cópialo al servidor mediante SCP o Git.
\n\ncd ~\nvapor new HelloServer\ncd HelloServer\n\nEditemos Sources/App/routes.swift para añadir un endpoint simple:
import Vapor\n\nfunc routes(_ app: Application) throws {\n app.get { req async in\n "Hello from Swift on VPS!"\n }\n \n app.get("status") { req async -> HTTPStatus in\n return .ok\n }\n}\n\nCompila el proyecto en modo producción:
\n\nswift build -c release\n\nEl binario aparecerá en .build/release/HelloServer.
3. Configuración del inicio y del servicio systemd
\n\nPara que la aplicación se inicie automáticamente después de reiniciar el servidor, crearemos un servicio systemd. Primero, crea un usuario para la aplicación (seguridad):
\n\nuseradd -m -s /bin/bash swiftuser\nchown -R swiftuser:swiftuser /root/HelloServer\n\nCrea el archivo de servicio:
\n\nnano /etc/systemd/system/helloserver.service\n\nInserta el siguiente contenido:
\n\n[Unit]\nDescription=HelloServer Swift App\nAfter=network.target\n\n[Service]\nType=simple\nUser=swiftuser\nWorkingDirectory=/root/HelloServer\nExecStart=/root/HelloServer/.build/release/HelloServer --host 127.0.0.1 --port 8080\nRestart=on-failure\nRestartSec=5\n\n[Install]\nWantedBy=multi-user.target\n\nInicia el servicio:
\n\nsystemctl daemon-reload\nsystemctl enable helloserver\nsystemctl start helloserver\nsystemctl status helloserver\n\nVerifica que la aplicación responda localmente:
\n\ncurl http://127.0.0.1:8080\n\n4. Configuración de Nginx como proxy inverso
\n\nPara un entorno de producción, no se recomienda abrir el puerto 8080 directamente. Instalemos Nginx y configuremos el proxy con SSL (Let's Encrypt).
\n\napt install -y nginx certbot python3-certbot-nginx\n\nCrea la configuración de Nginx:
\n\nnano /etc/nginx/sites-available/helloserver\n\nInserta:
\n\nserver {\n listen 80;\