¿Cómo despliego una aplicación en un Stack?
Hashtags: #docker #stack #deploy #git #sftp
El Stack recién instalado corre una aplicación de ejemplo. Desplegar la tuya es reemplazar el contenido de un directorio y reconstruir.
El único directorio que te pertenece
Tu código va en la carpeta app/ dentro del Stack:
/root/stack/<lenguaje>/<stack>/app/
Por ejemplo, /root/stack/python/flask-mysql/app/.
Tenés tres formas de llevar tu código hasta ahí. Elegí una: Git si tu proyecto está en un repositorio, SFTP si preferís arrastrar archivos desde tu computadora, o el administrador de archivos web si no querés instalar nada.
Opción 1: desde Git
Es la recomendada: deja el servidor en un estado que podés volver a reproducir, y actualizar es un solo comando.
Conectate por SSH y entrá al directorio del Stack:
cd /root/stack/python/flask-mysql
El directorio app/ ya trae la aplicación de ejemplo, así que no está vacío y git clone sobre él falla. Vaciá app/ primero y cloná tu repositorio adentro:
rm -rf app
git clone https://github.com/tu-usuario/tu-repositorio.git app
Reconstruí y levantá:
docker compose up -d --build
Actualizar la aplicación más adelante
cd /root/stack/python/flask-mysql/app
git pull
cd ..
docker compose up -d --build
Opción 2: por SFTP
Se conecta con los mismos datos que el SSH: mismo host, mismo usuario, misma contraseña y mismo puerto. No hay que habilitar nada.
En tu cliente de SFTP:
| Campo | Valor |
|---|---|
| Protocolo | SFTP - SSH File Transfer Protocol |
| Servidor | la IP de tu cloud |
| Usuario | root |
| Contraseña | la contraseña root de tu cloud |
| Puerto | el puerto SSH que te enviamos |
Una vez conectado, navegá hasta el directorio de tu Stack:
/root/stack/<lenguaje>/<stack>/app/
Borrá los archivos de ejemplo que haya adentro y subí los de tu aplicación en su lugar.
Después, por SSH, reconstruí:
cd /root/stack/python/flask-mysql
docker compose up -d --build
Opción 3: desde el navegador
Es la opción más simple, y no requiere instalar ningún programa ni usar la consola.
Tu servicio incluye Cloud Commander, un administrador de archivos web que ya viene funcionando. Entrá desde:
https://cloudcmd.tudominio.com
Reemplazá tudominio.com por el dominio de tu servicio.
Al entrar vas a ver únicamente dos carpetas:
application— el código de tu aplicación. Es la misma carpetaapp/que ves por SSH o por SFTP.backups— los backups automáticos de tu Stack, listos para descargar.
Para desplegar: borrá el contenido de ejemplo que haya en application, subí los archivos de tu aplicación y aplicá los cambios.
Por qué siempre --build
docker compose up -d --build
Algunos Stacks montan app/ dentro del contenedor, así que un cambio en un archivo se ve al instante. Otros compilan tu código dentro de la imagen, y ahí un cambio no existe hasta que la imagen se reconstruye. Además, las dependencias — requirements.txt, package.json, composer.json, pom.xml — se instalan durante la construcción en todos los casos.
Reconstruir siempre funciona en cualquier Stack. Es el comando seguro para memorizar.
Comprobar que salió bien
docker compose ps # todos los servicios en estado "running"
docker compose logs -f app # los logs de tu aplicación, en vivo
Después abrí el dominio de tu servidor en el navegador.
Si algo falla
| Síntoma | Dónde mirar |
|---|---|
| La aplicación no levanta | docker compose logs app |
| Error al construir la imagen | La salida de docker compose up --build, sin -d |
| Responde 502 desde el navegador | Tu aplicación no está escuchando en el puerto interno esperado |
| No conecta con la base de datos | docker compose ps — la base tarda unos segundos en quedar lista |
Para volver a un estado limpio sin perder la base de datos ni los backups:
docker compose down
docker compose up -d --build
Tus datos están respaldados
El Stack hace backups automáticos de la base de datos y de tu aplicación una vez por día, y conserva los últimos siete. Los encontrás en la carpeta backups de Cloud Commander. Los intervalos y la retención se cambian en el archivo .env.