Skip to content

Actualización y Mantenimiento

Cómo actualizar tu proyecto Astro cuando hagas cambios y comandos útiles para mantenimiento.

Cuando hagas cambios en tu código local y lo subas a GitHub:

Terminal window
# 1. Ir al directorio del proyecto
cd /root/tu-proyecto-astro
# 2. Descargar cambios de GitHub
git pull origin main
# 3. Reconstruir la imagen Docker
cd /root
docker compose build proyecto-astro
# 4. Reiniciar el contenedor con la nueva imagen
docker compose up -d proyecto-astro
# 5. Verificar que está corriendo
docker ps | grep proyecto-astro
Terminal window
cd /root/tu-proyecto-astro && git pull origin main && cd /root && docker compose up -d --build proyecto-astro && echo "✅ Actualización completada"

El flag -d (detached) hace que el contenedor se ejecute en segundo plano, liberando la terminal inmediatamente.

Opción 3: Script de Actualización Automatizado

Section titled “Opción 3: Script de Actualización Automatizado”
Terminal window
# Crear script de actualización
vim /root/tu-proyecto-astro/update-docker.sh

Contenido:

#!/bin/bash
cd /root/tu-proyecto-astro
echo "📥 Descargando cambios..."
git pull origin main
echo "🔨 Reconstruyendo imagen..."
cd /root
docker compose build --no-cache proyecto-astro
echo "🔄 Reiniciando contenedor..."
docker compose up -d proyecto-astro
echo "🧹 Limpiando imágenes antiguas..."
docker image prune -f
echo "✅ Actualización completada"
echo "📊 Estado del contenedor:"
docker ps | grep proyecto-astro
Terminal window
# Dar permisos de ejecución
chmod +x /root/tu-proyecto-astro/update-docker.sh
# Ejecutar el script cuando quieras actualizar
/root/tu-proyecto-astro/update-docker.sh
Terminal window
# Ver logs en tiempo real (Ctrl+C para salir)
docker compose logs -f proyecto-astro
# Ver solo las últimas 50 líneas
docker compose logs --tail=50 proyecto-astro
# Ver logs con timestamps
docker compose logs -f --timestamps proyecto-astro
Terminal window
# Reiniciar contenedor
docker compose restart proyecto-astro
# Detener contenedor
docker compose stop proyecto-astro
# Iniciar contenedor detenido
docker compose start proyecto-astro
# Eliminar contenedor (no elimina la imagen)
docker compose down proyecto-astro
# Ver uso de recursos en tiempo real
docker stats proyecto-astro
# Entrar al contenedor
docker exec -it proyecto-astro sh
Terminal window
# Ver imágenes Docker
docker images | grep astro
# Limpiar imágenes no usadas
docker image prune -f
# Limpiar todo (imágenes, contenedores detenidos, etc.)
docker system prune -a
Terminal window
# Ver logs detallados
docker compose logs proyecto-astro
# Ver eventos recientes
docker events --since 5m
Terminal window
# Ver qué usa el puerto
sudo lsof -i :3080
# Cambiar puerto en docker-compose.yml
ports:
- "3081:80" # Usar otro puerto
Terminal window
# Ver tamaño de imagen
docker images proyecto-astro
# El multi-stage build ya optimiza el tamaño
# Limpiar capas innecesarias
docker image prune -a
Terminal window
# Ver logs de Traefik
docker compose logs -f traefik
# Verificar que el contenedor está en la red correcta
docker network inspect traefik_default
Terminal window
# Exportar imagen
docker save -o proyecto-astro-backup.tar proyecto-astro
# Importar imagen en otro servidor
docker load -i proyecto-astro-backup.tar

El código está en GitHub, pero puedes hacer backup local:

Terminal window
# Desde tu máquina local
git clone git@github.com:tu-usuario/proyecto-astro.git proyecto-astro-backup
Terminal window
# Ver estado de salud del contenedor
docker inspect --format='{{.State.Status}}' proyecto-astro
# Ver uso de recursos en tiempo real
docker stats proyecto-astro
# Ver información detallada del contenedor
docker inspect proyecto-astro
  1. Hacer pull antes de editar para evitar conflictos
  2. Probar cambios localmente antes de desplegar
  3. Ver logs después de cada actualización
  4. Mantener backup del código en GitHub
  5. Limpiar imágenes antiguas regularmente
  6. Monitorear recursos con docker stats

Si tienes varios proyectos Astro, cada uno debe tener:

  • Su propia carpeta en /root/
  • Su propio servicio en docker-compose.yml
  • Su propio subdominio configurado
  • Su propio contenedor independiente

Ejemplo con 2 proyectos:

docs-astro:
build:
context: ./vps-docs
container_name: docs-astro
labels:
- traefik.http.routers.docs-astro.rule=Host(`docs.tudominio.com`)
# ... resto de labels
portfolio-astro:
build:
context: ./portfolio
container_name: portfolio-astro
labels:
- traefik.http.routers.portfolio-astro.rule=Host(`portfolio.tudominio.com`)
# ... resto de labels

Cada proyecto se gestiona independientemente.