Despliegue de Strapi Headless CMS en un VPS: PostgreSQL, Nginx y SSL
TL;DR
En esta guía, configuraremos paso a paso el potente Headless CMS Strapi en su servidor privado virtual (VPS). Aprenderá a instalar y configurar todos los componentes necesarios: la base de datos PostgreSQL para almacenar contenido, el servidor web Nginx para procesar solicitudes y garantizar la seguridad, y los certificados SSL con Certbot para cifrar el tráfico. Como resultado, obtendrá una plataforma de gestión de contenido totalmente funcional, segura y lista para usar, accesible a través de su nombre de dominio.
Instalación de Strapi v5.x.x y software relacionado (Node.js 22.x, PostgreSQL 16.x, Nginx 1.28.x, PM2).
Configuración de PostgreSQL para trabajar con Strapi, creación de usuario y base de datos.
Configuración de Nginx como proxy inverso para la aplicación Strapi y servidor web.
Obtención y renovación automática de certificados SSL Let's Encrypt con Certbot.
Garantizar el funcionamiento continuo de Strapi con PM2 y su inicio automático.
Medidas de seguridad básicas, como la configuración del firewall y el acceso SSH.
Qué configuramos y por qué
Diagrama: Qué configuramos y por qué
En el mundo moderno, el contenido es el rey, y su gestión eficiente es fundamental para cualquier proyecto digital. Strapi es un CMS Headless (Content Management System) de código abierto líder, escrito en Node.js. "Headless" significa que solo proporciona el backend para la gestión de contenido a través de una potente API (REST y GraphQL), separándolo completamente del frontend (sitio web, aplicación móvil, dispositivo IoT, etc.). Esto brinda a los desarrolladores una flexibilidad sin precedentes para elegir tecnologías de frontend y garantiza un alto rendimiento.
Desplegaremos Strapi en su propio VPS. Esto le permitirá tener control total sobre la infraestructura, optimizar el rendimiento según sus necesidades, garantizar la máxima seguridad de los datos y evitar la dependencia de proveedores de la nube de terceros, que a menudo escalan de precio de forma no lineal. Al final, obtendrá una potente plataforma para crear y gestionar cualquier tipo de contenido, ya sea un blog, una tienda online, un sitio web corporativo o una aplicación web compleja. Su contenido estará disponible a través de una API, listo para integrarse con cualquier aplicación cliente.
Existen alternativas a los servicios gestionados en la nube como Strapi Cloud u otros CMS SaaS, como Contentful, Sanity o Prismic. Estas soluciones son convenientes porque le liberan de las preocupaciones de infraestructura, pero a menudo tienen limitaciones en cuanto a funcionalidad, volumen de datos o número de usuarios en los planes gratuitos y básicos. El despliegue autónomo de Strapi en un VPS, aunque requiere un esfuerzo inicial de configuración, a largo plazo proporciona una flexibilidad significativamente mayor, ahorro de costes al escalar y soberanía total sobre sus datos. Usted será dueño de toda la cadena: desde el servidor hasta la base de datos y la propia aplicación.
Qué configuración de VPS se necesita para esta tarea
Diagrama: Qué configuración de VPS se necesita para esta tarea
La elección de la configuración de VPS correcta es crucial para un funcionamiento estable y rápido de Strapi. Los requisitos pueden variar según el volumen de contenido, el número de usuarios simultáneos y la complejidad de los plugins, pero para empezar y para proyectos pequeños, se pueden considerar los siguientes parámetros mínimos:
CPU: 2 núcleos. Strapi, al ser una aplicación Node.js, puede utilizar activamente la CPU al procesar solicitudes y generar API.
RAM: 4 GB. Este volumen será suficiente para el sistema operativo, PostgreSQL y el propio Strapi. Si se planea un gran volumen de contenido o muchos plugins, es mejor optar directamente por 8 GB.
Disco: 80-100 GB SSD. El SSD acelera significativamente el funcionamiento de la base de datos y la carga de la aplicación. 80 GB serán suficientes para el SO, todos los componentes y un volumen considerable de archivos multimedia. Si planea almacenar muchas imágenes y videos, considere usar un almacenamiento de objetos externo (compatible con S3) o aumente el tamaño del disco.
Red: Puerto de 100 Mbps o 1 Gbps. Para la mayoría de las tareas, 100 Mbps son suficientes, pero 1 Gbps proporcionará un mejor rendimiento con un gran número de solicitudes a la API o la carga de archivos multimedia.
Para desplegar Strapi con PostgreSQL, Nginx y SSL, como se describe en esta guía, la opción óptima será un VPS con 2 núcleos de CPU, 4-8 GB de RAM y 80-100 GB de SSD. Por ejemplo, se puede considerar un VPS con las características indicadas.
Cuándo se necesita un servidor dedicado y no un VPS
Un servidor dedicado se vuelve necesario cuando su proyecto escala significativamente y los requisitos superan las capacidades de un VPS estándar:
Alta carga: Miles de usuarios simultáneos, cientos de solicitudes a la API por segundo.
Gran volumen de datos: Terabytes de archivos multimedia o una base de datos muy grande que requiere el máximo rendimiento del subsistema de disco.
Requisitos específicos: Necesidad de una configuración de hardware especial, tarjetas de expansión especializadas o máxima aislamiento.
Seguridad y cumplimiento: A veces, los requisitos regulatorios o las políticas de seguridad corporativas exigen el uso de recursos dedicados.
Para la mayoría de los proyectos de Strapi, al inicio e incluso en la fase de crecimiento activo, un VPS será más que suficiente. La transición a un servidor dedicado es un paso para proyectos con una carga muy alta o requisitos especiales. En este caso, necesitará un dedicado adecuado.
Ubicación: qué factores influyen
La elección de la ubicación del servidor VPS influye en varios aspectos clave:
Latencia: Cuanto más cerca esté el servidor de su audiencia objetivo, menor será la latencia al acceder al sitio web o la API. Esto es crítico para la experiencia del usuario y el SEO.
Legislación: Las leyes de protección de datos (por ejemplo, GDPR en Europa) pueden requerir el almacenamiento de datos en una jurisdicción específica.
Precio: Los precios de los VPS pueden variar ligeramente en diferentes regiones.
Elija una ubicación lo más cercana posible a los usuarios principales de su proyecto Strapi o al lugar de despliegue del frontend, si también está alojado en un VPS.
Preparación del servidor
Diagrama: Preparación del servidor
Antes de proceder con la instalación de Strapi y sus componentes, es necesario realizar una configuración básica de un VPS nuevo. Esto garantizará la seguridad y estabilidad de su sistema. Utilizaremos Ubuntu Server 24.04 LTS, ya que es una distribución popular y bien soportada.
1. Conexión por SSH
Conéctese a su servidor como usuario root o con las credenciales proporcionadas por el proveedor:
ssh root@ВАШ_IP_АДРЕС
2. Actualización del sistema
Siempre comience actualizando el gestor de paquetes y los paquetes instalados a las versiones más recientes. Esto garantiza la disponibilidad de las últimas correcciones de seguridad y estabilidad.
sudo apt update && sudo apt upgrade -y
Después de la actualización, es posible que se requiera un reinicio si se actualizaron componentes del kernel.
sudo reboot
Después del reinicio, vuelva a conectarse por SSH.
3. Creación de un nuevo usuario con permisos sudo
Trabajar como root no es seguro. Cree un nuevo usuario y concédale permisos sudo.
Reemplace strapiuser con el nombre de usuario deseado. Se le pedirá que ingrese una contraseña y otra información (puede dejarla en blanco). Después de crear el usuario, cambie a él.
su - strapiuser
Ahora, todos los comandos posteriores que requieran permisos de administrador se ejecutarán con el prefijo sudo.
4. Configuración de claves SSH (recomendado)
Para mejorar la seguridad, se recomienda deshabilitar la autenticación por contraseña para SSH y usar solo claves SSH. Primero, copie su clave SSH pública al servidor.
# Ejecute en su máquina LOCAL
ssh-copy-id strapiuser@ВАШ_IP_АДРЕС
Luego, en el servidor, edite el archivo de configuración SSH:
sudo nano /etc/ssh/sshd_config
Busque y modifique las siguientes líneas (o agréguelas si no existen):
# Deshabilitar el inicio de sesión con contraseña
PasswordAuthentication no
# Deshabilitar el inicio de sesión para root
PermitRootLogin no
Guarde los cambios (Ctrl+O, Enter) y salga (Ctrl+X). Reinicie el servicio SSH:
sudo systemctl restart sshd
Ahora podrá iniciar sesión solo con la clave SSH bajo el usuario strapiuser.
5. Configuración del firewall (UFW)
UFW (Uncomplicated Firewall) es una herramienta fácil de usar para gestionar el firewall. Lo configuraremos para permitir solo las conexiones necesarias.
sudo apt install ufw -y # Instalación de UFW, si no está instalado
sudo ufw allow OpenSSH # Permitir SSH (puerto 22)
sudo ufw allow http # Permitir HTTP (puerto 80)
sudo ufw allow https # Permitir HTTPS (puerto 443)
sudo ufw enable # Habilitar el firewall
sudo ufw status # Verificar el estado
Al habilitar UFW, se le pedirá que confirme la acción. Ingrese y y presione Enter.
6. Instalación de Fail2Ban
Fail2Ban ayuda a protegerse contra ataques de fuerza bruta bloqueando las direcciones IP desde las cuales se producen demasiados intentos fallidos de inicio de sesión.
Fail2Ban funcionará "de fábrica" con la configuración básica para SSH. Para una configuración más detallada, puede copiar y editar el archivo /etc/fail2ban/jail.conf en /etc/fail2ban/jail.local.
Ahora su servidor está listo para la instalación del software necesario.
Instalación de software — paso a paso
Diagrama: Instalación de software — paso a paso
En esta sección, instalaremos todos los componentes necesarios para que Strapi funcione: Node.js (con NPM), PostgreSQL, Nginx y PM2. Todas las versiones del software estarán actualizadas para 2026, garantizando la máxima compatibilidad y seguridad.
1. Instalación de Node.js y npm (versión 22.x)
Strapi es una aplicación Node.js. Instalaremos la versión LTS actual de Node.js (22.x), que será compatible en 2026.
# Añadir el repositorio NodeSource para Node.js 22.x
curl -fsSL https://deb.nodesource.com/setup_22.x | sudo -E bash -
# Instalar Node.js y npm
sudo apt install -y nodejs
# Comprobar las versiones instaladas
node -v
npm -v
Asegúrese de que las versiones coincidan (por ejemplo, v22.x.x y 10.x.x).
2. Instalación de PostgreSQL (versión 16.x)
PostgreSQL es la base de datos recomendada para Strapi. Instalaremos la versión estable 16.x.
# Instalar PostgreSQL y paquetes dev
sudo apt install -y postgresql postgresql-contrib
# Comprobar el estado del servicio PostgreSQL
sudo systemctl status postgresql
El servicio debe estar activo (active (exited) o active (running)). Si no lo está, inícielo: sudo systemctl start postgresql.
3. Instalación de Nginx (versión actual 1.28.x)
Nginx actuará como proxy inverso para Strapi, sirviendo certificados SSL y archivos estáticos.
# Instalar Nginx
sudo apt install -y nginx
# Comprobar el estado del servicio Nginx
sudo systemctl status nginx
Nginx debe estar en ejecución. Puede verificar su funcionamiento accediendo a la dirección IP de su servidor en el navegador; debería aparecer la página de bienvenida estándar de Nginx.
4. Instalación de PM2
PM2 es un gestor de procesos para aplicaciones Node.js. Permite ejecutar Strapi en segundo plano, reiniciarlo automáticamente en caso de fallos y gestionar múltiples aplicaciones.
# Instalar PM2 globalmente
sudo npm install -g pm2
# Configurar PM2 para el inicio automático al arrancar el sistema
pm2 startup systemd
# La salida del comando anterior le dará un comando que deberá ejecutar con sudo, por ejemplo:
# sudo env PATH=$PATH:/usr/bin /usr/lib/node_modules/pm2/bin/pm2 startup systemd -u strapiuser --hp /home/strapiuser
# Copie y ejecute este comando. Creará una unidad systemd para PM2.
Después de ejecutar el comando pm2 startup systemd, se le proporcionará un comando que deberá ejecutar con sudo. Esto creará un servicio systemd que iniciará PM2 y sus aplicaciones al arrancar el servidor.
Configuración
Diagrama: Configuración
Ahora que todos los componentes están instalados, es hora de configurarlos para que funcionen con Strapi.
1. Creación de la base de datos PostgreSQL para Strapi
Primero, crearemos un usuario y una base de datos en PostgreSQL a los que Strapi se conectará.
# Conectarse a PostgreSQL como usuario postgres
sudo -i -u postgres psql
Dentro de la consola de PostgreSQL, ejecute los siguientes comandos:
CREATE USER strapiuser WITH PASSWORD 'su_contraseña_muy_segura';
CREATE DATABASE strapidb WITH OWNER strapiuser;
GRANT ALL PRIVILEGES ON DATABASE strapidb TO strapiuser;
\q
Reemplace ваш_очень_сложный_пароль por una contraseña segura. Salga de la consola de PostgreSQL (\q).
2. Creación del proyecto Strapi
Vaya al directorio de inicio de su usuario (/home/strapiuser) o a otro directorio conveniente, como /var/www. Usaremos /var/www para las aplicaciones web.
Durante la instalación, se le pedirá que elija el tipo de instalación. Para esta guía, seleccione Custom (manual settings) y luego PostgreSQL como base de datos. Ingrese los datos de conexión a la base de datos que creó anteriormente (Host: 127.0.0.1, Port: 5432, Database: strapidb, Username: strapiuser, Password: su_contraseña_muy_segura).
Vaya al directorio del proyecto:
cd my-strapi-project
3. Configuración de las variables de entorno de Strapi
Es mejor almacenar los secretos y los parámetros de configuración en el archivo .env. Cree o edite el archivo .env en el directorio raíz de su proyecto Strapi.
nano .env
Agregue o actualice las siguientes líneas:
HOST=0.0.0.0
PORT=1337
APP_KEYS=su_clave_de_aplicación_muy_compleja_y_larga # Se genera automáticamente con --quickstart, pero es mejor regenerarla
API_TOKEN_SALT=su_clave_muy_compleja_y_larga_para_tokens_api
ADMIN_JWT_SECRET=su_clave_muy_compleja_y_larga_para_el_panel_de_administración
JWT_SECRET=su_clave_muy_compleja_y_larga_para_jwt
DATABASE_CLIENT=pg
DATABASE_HOST=127.0.0.1
DATABASE_PORT=5432
DATABASE_NAME=strapidb
DATABASE_USERNAME=strapiuser
DATABASE_PASSWORD=su_contraseña_muy_segura
DATABASE_SSL=false
NODE_ENV=production
Para generar claves aleatorias fuertes para APP_KEYS, API_TOKEN_SALT, ADMIN_JWT_SECRET, JWT_SECRET, puede usar el comando:
Ejecútelo varias veces para obtener claves únicas para cada parámetro. Guarde el archivo.
4. Inicio de Strapi con PM2
Ahora iniciaremos Strapi en modo producción usando PM2.
# Asegúrese de estar en el directorio raíz de su proyecto Strapi (/var/www/strapi/my-strapi-project)
npm run build
pm2 start npm --name "strapi-app" -- run start
# Guardar la lista de procesos de PM2 para el inicio automático
pm2 save
Verifique el estado de Strapi:
pm2 list
pm2 logs strapi-app
Strapi debería estar en ejecución y escuchando en el puerto 1337 (por defecto).
5. Configuración de Nginx como proxy inverso
Crearemos un archivo de configuración de Nginx para su dominio (por ejemplo, api.yourdomain.com).
Si la sintaxis es correcta (syntax is ok), recargue Nginx:
sudo systemctl restart nginx
En este punto, su Strapi debería ser accesible por HTTP a través de Nginx en la dirección http://api.yourdomain.com (asegúrese de que el registro DNS de su dominio apunte a la IP de su VPS).
6. Configuración de SSL con Certbot (Let's Encrypt)
Para garantizar la seguridad y la confianza, es necesario configurar HTTPS. Certbot obtendrá e instalará automáticamente certificados SSL de Let's Encrypt.
# Instalar Certbot y el plugin de Nginx
sudo apt install -y certbot python3-certbot-nginx
# Obtener e instalar el certificado
sudo certbot --nginx -d api.yourdomain.com
Certbot le hará varias preguntas: una dirección de correo electrónico para notificaciones, la aceptación de los términos de servicio y, posiblemente, le ofrecerá redirigir el tráfico HTTP a HTTPS (seleccione "2: Redirect"). Certbot actualizará automáticamente la configuración de Nginx, añadiendo los parámetros SSL.
Verifique que Certbot haya configurado la renovación automática de certificados:
sudo systemctl status certbot.timer
El temporizador debe estar activo. Si no lo está, actívelo: sudo systemctl enable certbot.timer. Ahora su Strapi está disponible a través de HTTPS: https://api.yourdomain.com.
7. Verificación de la funcionalidad
Abra su dominio (por ejemplo, https://api.yourdomain.com) en el navegador. Debería ver la página de bienvenida de Strapi o la página de inicio de sesión del panel de administración. Si es la primera vez que lo inicia, se le pedirá que cree el primer administrador.
También puede verificar la disponibilidad de la API a través de curl:
curl -I https://api.yourdomain.com/admin/
Debería ver los encabezados HTTP con el código de estado 200 OK o 302 Found (redirección a la página de inicio de sesión).
Copias de seguridad y mantenimiento
Diagrama: Copias de seguridad y mantenimiento
Las copias de seguridad regulares y el mantenimiento oportuno son clave para la estabilidad y seguridad a largo plazo de su proyecto Strapi.
¿Qué respaldar?
Para una recuperación completa de Strapi, necesitará respaldar varios tipos de datos:
Base de datos PostgreSQL: Contiene todo su contenido, estructura de colecciones y usuarios. Este es el componente más importante.
Archivos del proyecto Strapi: Incluyen archivos de configuración (especialmente .env), plugins, controladores personalizados y servicios. Aunque la mayoría de los datos están en la BD, la configuración de la aplicación también es importante.
Archivos multimedia: Imágenes, videos y otros archivos subidos a través de Strapi. Por defecto, se almacenan en ./public/uploads dentro del proyecto, a menos que se configure un almacenamiento externo (S3).
Script simple de copia de seguridad automática
Crearemos un script simple para la copia de seguridad de la base de datos y los archivos, que se ejecutará según un horario a través de cron.
Cree un directorio para las copias de seguridad (por ejemplo, /var/backups/strapi):
Cree el archivo de script backup_strapi.sh en el directorio de inicio del usuario strapiuser:
nano /home/strapiuser/backup_strapi.sh
Pegue el siguiente contenido:
#!/bin/bash
# --- Configuración ---
BACKUP_DIR="/var/backups/strapi"
DATE=$(date +%Y%m%d_%H%M%S)
DB_NAME="strapidb"
DB_USER="strapiuser"
STRAPI_PROJECT_PATH="/var/www/strapi/my-strapi-project"
RETENTION_DAYS=7 # Cuántos días guardar las copias de seguridad
# --- Creación del directorio de copia de seguridad para la fecha actual ---
CURRENT_BACKUP_DIR="$BACKUP_DIR/$DATE"
mkdir -p "$CURRENT_BACKUP_DIR"
# --- Copia de seguridad de PostgreSQL ---
echo "Volcando la base de datos PostgreSQL '$DB_NAME'..."
PGPASSWORD='ваш_очень_сложный_пароль' pg_dump -U "$DB_USER" -h localhost "$DB_NAME" > "$CURRENT_BACKUP_DIR/$DB_NAME.sql"
if [ $? -eq 0 ]; then
echo "Volcado de PostgreSQL exitoso."
else
echo "¡Error al volcar la base de datos PostgreSQL!"
exit 1
fi
# --- Copia de seguridad de los archivos del proyecto Strapi y archivos multimedia ---
echo "Archivando archivos del proyecto Strapi..."
tar -czf "$CURRENT_BACKUP_DIR/strapi_project.tar.gz" -C "$(dirname "$STRAPI_PROJECT_PATH")" "$(basename "$STRAPI_PROJECT_PATH")"
if [ $? -eq 0 ]; then
echo "Archivado de archivos del proyecto Strapi exitoso."
else
echo "¡Error al archivar los archivos del proyecto Strapi!"
exit 1
fi
# --- Eliminación de copias de seguridad antiguas ---
echo "Limpiando copias de seguridad antiguas (más de $RETENTION_DAYS días)..."
find "$BACKUP_DIR" -maxdepth 1 -type d -mtime +"$RETENTION_DAYS" -exec rm -rf {} \;
echo "Limpieza completa."
echo "Copia de seguridad finalizada el $DATE"
Reemplace ваш_очень_сложный_пароль con su contraseña de usuario de PostgreSQL. Haga el script ejecutable:
chmod +x /home/strapiuser/backup_strapi.sh
Agregue el script a cron para que se ejecute diariamente (por ejemplo, a las 3:00 de la madrugada).
crontab -e
Agregue la siguiente línea al final del archivo para que el script se ejecute todos los días a las 03:00:
Este comando redirigirá la salida del script al archivo /var/log/strapi_backup.log, lo que ayudará a monitorear su ejecución.
Dónde almacenar las copias de seguridad
Es extremadamente importante almacenar las copias de seguridad FUERA del servidor principal. Si el servidor falla, perderá tanto los datos como las copias de seguridad. Opciones recomendadas:
Almacenamiento de objetos externo compatible con S3: Por ejemplo, Amazon S3, DigitalOcean Spaces, Backblaze B2. Es económico y fiable. Puede usar utilidades como s3cmd o rclone para sincronizar automáticamente el directorio de copias de seguridad con S3.
VPS separado: Un VPS económico en otra ubicación, utilizado exclusivamente para almacenar copias de seguridad. Se puede sincronizar mediante rsync o sftp.
Almacenamiento local en su computadora: Para proyectos muy pequeños, pero no está automatizado ni es escalable.
Actualizaciones: rolling vs ventana de mantenimiento
Actualizar el software en un servidor de producción requiere precaución.
Actualización del SO y paquetes base (apt upgrade): Se recomienda realizar regularmente (una vez al mes), pero siempre en una "ventana de mantenimiento" (maintenance window), cuando la carga es mínima. Antes de actualizar, realice una copia de seguridad completa. Después de la actualización, especialmente si se actualizó el kernel, se requiere un reinicio.
Actualización de Strapi: Las actualizaciones de Strapi (especialmente entre versiones mayores, por ejemplo, de v4 a v5) pueden requerir la migración de la base de datos y el código. Siempre pruebe las actualizaciones en un servidor de staging antes de aplicarlas en producción. Realícelas en una ventana de mantenimiento.
Actualización de Node.js: La actualización de Node.js también puede afectar a Strapi. Verifique la compatibilidad de las versiones.
¡Siempre realice una copia de seguridad antes de cualquier actualización importante!
Solución de problemas + Preguntas frecuentes
En esta sección se recopilan respuestas a preguntas frecuentes y soluciones a problemas típicos que puede encontrar al desplegar Strapi.
Nginx devuelve un error 502 Bad Gateway
Qué verificar: El error 502 generalmente significa que Nginx no puede comunicarse con el servicio de backend (en nuestro caso, Strapi). Asegúrese de que Strapi esté en ejecución y escuchando en el puerto correcto (por defecto 1337). Verifique los logs de Nginx (sudo tail -f /var/log/nginx/error.log) y los logs de Strapi (pm2 logs strapi-app).
Cómo solucionar: Asegúrese de que el proceso PM2 de Strapi esté activo (pm2 list). Si no lo está, intente iniciarlo manualmente (cd /var/www/strapi/my-strapi-project && npm run start) y revise los errores. Verifique que proxy_pass http://localhost:1337; en la configuración de Nginx apunte al puerto correcto.
Strapi no se inicia, errores de conexión a la base de datos
Qué verificar: Verifique el archivo .env en la raíz del proyecto Strapi. Asegúrese de que los parámetros DATABASE_HOST, DATABASE_PORT, DATABASE_NAME, DATABASE_USERNAME y DATABASE_PASSWORD sean correctos. Verifique que PostgreSQL esté en ejecución (sudo systemctl status postgresql) y que el usuario strapiuser tenga permisos de acceso a la base de datos strapidb.
Cómo solucionar: Restablezca la contraseña del usuario de PostgreSQL (sudo -i -u postgres psql -c "ALTER USER strapiuser WITH PASSWORD 'новый_пароль';") y actualícela en .env. Asegúrese de que el host local 127.0.0.1 esté permitido para la conexión en el archivo /etc/postgresql/16/main/pg_hba.conf (debe haber una línea host all all 127.0.0.1/32 md5 o scram-sha-256). Después de los cambios en pg_hba.conf, reinicie PostgreSQL: sudo systemctl restart postgresql.
No puedo obtener un certificado SSL con Certbot
Qué verificar: Asegúrese de que su dominio (por ejemplo, api.yourdomain.com) apunte correctamente a la dirección IP de su VPS a través de un registro A en el DNS. Certbot debe poder comunicarse con su servidor en el puerto 80 (HTTP) para verificar la propiedad del dominio. Verifique que Nginx esté en ejecución y escuchando correctamente en el puerto 80.
Cómo solucionar: Deshabilite temporalmente UFW (sudo ufw disable) e intente de nuevo. Si esto ayudó, significa que el firewall está bloqueando los puertos. Asegúrese de que sudo ufw allow http y sudo ufw allow https estén habilitados. Verifique la configuración de Nginx en busca de errores (sudo nginx -t). Asegúrese de que no haya otros procesos ocupando los puertos 80 o 443.
¿Qué configuración mínima de VPS es adecuada?
Para un despliegue mínimo de Strapi para un proyecto pequeño o de prueba, puede comenzar con un VPS con 2 núcleos de CPU, 4 GB de RAM y 80 GB de SSD. Esto será suficiente para el sistema operativo, PostgreSQL y Strapi sin una carga alta. Sin embargo, si planea un uso activo, un gran volumen de contenido o muchos usuarios, se recomienda aumentar la RAM a 8 GB y, posiblemente, considerar discos más potentes.
¿Qué elegir: VPS o dedicado para esta tarea?
Para la mayoría de los proyectos Strapi, especialmente en las etapas iniciales e intermedias de desarrollo, un VPS es la opción óptima. Ofrece un excelente equilibrio entre rendimiento, flexibilidad y costo. Un servidor dedicado (dedicated) solo se justifica con cargas muy altas (miles de usuarios simultáneos, operaciones intensivas de BD), la necesidad de máxima aislamiento de recursos, requisitos específicos de hardware o normativas regulatorias especiales. Comience con un VPS y escale a un dedicado si y cuando sus necesidades superen las capacidades de virtualización.
Rendimiento lento del panel de administración de Strapi
Qué verificar: El rendimiento lento del panel de administración puede ser causado por la falta de recursos del VPS (CPU o RAM), una base de datos lenta o consultas no optimizadas. Verifique el uso de recursos del servidor (htop o free -h).
Cómo solucionar: Aumente la cantidad de RAM en el VPS si está cerca de agotarse. Optimice las consultas a la base de datos si tiene estructuras de contenido muy complejas. Asegúrese de que la base de datos esté en un disco SSD. Para entornos de producción, siempre ejecute Strapi en modo NODE_ENV=production, ya que en modo de desarrollo consume más recursos.
Conclusiones y próximos pasos
Diagrama: Conclusiones y próximos pasos
¡Felicidades! Ha desplegado con éxito Strapi Headless CMS en su VPS, configurando PostgreSQL, Nginx y certificados SSL. Ahora tiene una plataforma potente, segura y flexible para la gestión de contenido, lista para integrarse con cualquier aplicación frontend.
Aquí hay algunos próximos pasos que puede tomar para el desarrollo posterior de su proyecto Strapi:
Desarrollo frontend: Utilice su API de Strapi para crear sitios web (con React, Vue, Next.js, Nuxt.js), aplicaciones móviles u otros productos digitales.
Extensión de la funcionalidad de Strapi: Explore la documentación de Strapi para crear campos personalizados, plugins, ciclos de vida y roles de usuario.
Monitoreo y optimización: Implemente herramientas de monitoreo (por ejemplo, Prometheus + Grafana) para rastrear el rendimiento del servidor y de Strapi, a fin de responder rápidamente a posibles problemas y optimizar los recursos.
¿Te fue útil esta guía?
Tus comentarios nos ayudan a mejorar nuestras guías.
Compartir esta publicación:
Envía esta guía a alguien a quien pueda resultarle útil.