feat: agregar scripts de despliegue estandar desplegar.sh, init.sh y servers.conf.example
This commit is contained in:
Executable
+145
@@ -0,0 +1,145 @@
|
||||
#!/usr/bin/env bash
|
||||
# desplegar.sh — Corre desde la máquina de desarrollo
|
||||
# Compila localmente + sube binario/plantillas vía scp/rsync + ejecuta init.sh en el servidor
|
||||
|
||||
set -Eeuo pipefail
|
||||
|
||||
SCRIPT_DIR="$(cd -- "$(dirname -- "${BASH_SOURCE[0]}")" && pwd)"
|
||||
CONF_FILE="${DROP_SERVERS_CONF:-$SCRIPT_DIR/servers.conf}"
|
||||
|
||||
cargar_conf() {
|
||||
if [[ ! -f "$CONF_FILE" ]]; then
|
||||
echo "❌ Error: Falta $CONF_FILE" >&2
|
||||
echo "👉 Crea uno copiando la plantilla: cp servers.conf.example servers.conf" >&2
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# Cargar configuración
|
||||
# shellcheck disable=SC1090
|
||||
source "$CONF_FILE"
|
||||
|
||||
: "${HOST:?servers.conf debe definir HOST (ej: 192.168.10.160)}"
|
||||
: "${SSH_USER:?servers.conf debe definir SSH_USER (ej: user_apps)}"
|
||||
: "${REMOTE_DIR:?servers.conf debe definir REMOTE_DIR (ej: /home/user_apps/apps/drop_sigmac_app)}"
|
||||
SSH_PORT="${SSH_PORT:-22}"
|
||||
SERVIDOR="${SSH_USER}@${HOST}"
|
||||
|
||||
if [[ -n "${DEPLOY_SSH_PASSWORD:-}" ]]; then
|
||||
command -v sshpass >/dev/null 2>&1 || { echo "DEPLOY_SSH_PASSWORD requiere sshpass instalado." >&2; exit 1; }
|
||||
SSH=(sshpass -e ssh -o StrictHostKeyChecking=accept-new -o ConnectTimeout=15 -p "$SSH_PORT")
|
||||
SCP=(sshpass -e scp -o StrictHostKeyChecking=accept-new -o ConnectTimeout=15 -P "$SSH_PORT")
|
||||
else
|
||||
SSH=(ssh -o BatchMode=yes -o ConnectTimeout=15 -p "$SSH_PORT")
|
||||
SCP=(scp -o BatchMode=yes -o ConnectTimeout=15 -P "$SSH_PORT")
|
||||
fi
|
||||
}
|
||||
|
||||
remote() { "${SSH[@]}" "$SERVIDOR" "$@"; }
|
||||
copy() { "${SCP[@]}" "$@"; }
|
||||
|
||||
# 1. Compilar
|
||||
compilar() {
|
||||
echo ""
|
||||
echo "=================================================="
|
||||
echo "🔨 Compilando binario Go autónomo (Linux amd64)..."
|
||||
echo "=================================================="
|
||||
cd "$SCRIPT_DIR"
|
||||
CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build -ldflags="-s -w" -o app_compartir main.go
|
||||
echo "✅ Compilación exitosa: $SCRIPT_DIR/app_compartir"
|
||||
ls -lh "$SCRIPT_DIR/app_compartir"
|
||||
}
|
||||
|
||||
# 2. Preparar directorios remotos
|
||||
preparar_remoto() {
|
||||
echo ""
|
||||
echo "📂 Preparando estructura de directorios en $SERVIDOR:$REMOTE_DIR..."
|
||||
remote "mkdir -p '$REMOTE_DIR/web/templates' '$REMOTE_DIR/data/uploads'"
|
||||
echo "✅ Directorios listos"
|
||||
}
|
||||
|
||||
# 3. Subir archivos
|
||||
subir() {
|
||||
compilar
|
||||
preparar_remoto
|
||||
|
||||
echo ""
|
||||
echo "🚀 Subiendo binario, plantillas y scripts al servidor..."
|
||||
copy "$SCRIPT_DIR/app_compartir" "$SCRIPT_DIR/init.sh" "$SCRIPT_DIR/.env.example" "$SERVIDOR:$REMOTE_DIR/"
|
||||
copy "$SCRIPT_DIR/web/templates/"*.html "$SERVIDOR:$REMOTE_DIR/web/templates/"
|
||||
remote "chmod 0755 '$REMOTE_DIR/app_compartir' '$REMOTE_DIR/init.sh'"
|
||||
echo "✅ Archivos sincronizados en $REMOTE_DIR"
|
||||
}
|
||||
|
||||
# 4. Reiniciar servicio en el servidor
|
||||
reiniciar() {
|
||||
echo ""
|
||||
echo "🔄 Ejecutando init.sh en $SERVIDOR..."
|
||||
remote "bash '$REMOTE_DIR/init.sh'"
|
||||
}
|
||||
|
||||
# 5. Despliegue completo
|
||||
todo() {
|
||||
subir
|
||||
reiniciar
|
||||
echo ""
|
||||
echo "=================================================="
|
||||
echo "🎉 ¡Despliegue completado con éxito!"
|
||||
echo "🌐 Dominio público: https://drop.sigmac.app"
|
||||
echo "🎯 Destino interno: http://$HOST:2006"
|
||||
echo "=================================================="
|
||||
}
|
||||
|
||||
# 6. Ver estado y logs
|
||||
estado() {
|
||||
echo ""
|
||||
echo "📊 Estado del servidor en $SERVIDOR:"
|
||||
remote "
|
||||
if tmux has-session -t drop-sigmac-app 2>/dev/null; then
|
||||
echo '==> Sesión tmux drop-sigmac-app activa:'
|
||||
tmux capture-pane -pt drop-sigmac-app | tail -n 25
|
||||
elif systemctl is-active --quiet drop-sigmac-app.service 2>/dev/null; then
|
||||
echo '==> Servicio systemd drop-sigmac-app activo:'
|
||||
systemctl status drop-sigmac-app.service --no-pager
|
||||
else
|
||||
echo '⚠️ No se detectó proceso activo en tmux ni systemd.'
|
||||
fi
|
||||
"
|
||||
}
|
||||
|
||||
# Menú interactivo o por argumentos
|
||||
ACCION="${1:-menu}"
|
||||
|
||||
case "$ACCION" in
|
||||
compilar|build) compilar; exit 0 ;;
|
||||
subir|sync) cargar_conf; subir; exit 0 ;;
|
||||
reiniciar|restart) cargar_conf; reiniciar; exit 0 ;;
|
||||
todo|all) cargar_conf; todo; exit 0 ;;
|
||||
estado|status|logs) cargar_conf; estado; exit 0 ;;
|
||||
esac
|
||||
|
||||
cargar_conf
|
||||
|
||||
while true; do
|
||||
echo ""
|
||||
echo "=================================================="
|
||||
echo "🚀 Despliegue de drop.sigmac.app ($SERVIDOR)"
|
||||
echo "=================================================="
|
||||
echo "1) Todo (Compilar + Subir + Reiniciar servidor)"
|
||||
echo "2) Solo compilar binario Go"
|
||||
echo "3) Solo subir binario y plantillas"
|
||||
echo "4) Solo reiniciar servidor remoto (init.sh)"
|
||||
echo "5) Ver estado y últimos logs en el servidor"
|
||||
echo "6) Salir"
|
||||
echo "=================================================="
|
||||
read -rp "Selecciona una opción [1-6]: " OPCION
|
||||
|
||||
case "$OPCION" in
|
||||
1) todo; break ;;
|
||||
2) compilar ;;
|
||||
3) subir ;;
|
||||
4) reiniciar ;;
|
||||
5) estado ;;
|
||||
6|q|exit) echo "Operación cancelada."; exit 0 ;;
|
||||
*) echo "Opción inválida." ;;
|
||||
esac
|
||||
done
|
||||
Reference in New Issue
Block a user