Publish deployment and backup scripts

This commit is contained in:
2026-04-11 00:21:08 +02:00
parent 86204e0836
commit 9de9acec48
27 changed files with 3709 additions and 206 deletions

134
deploy-docker-hermes.sh Executable file
View File

@@ -0,0 +1,134 @@
#!/usr/bin/env bash
# ==============================================================================
# Hermes Agent Deployment Script (Docker — Gateway Mode)
# ==============================================================================
# Deploys Hermes Agent as a gateway connecting to Telegram/Discord/Slack/WhatsApp.
# No web UI — does NOT use Traefik.
#
# First run requires interactive setup for API keys:
# docker run -it --rm -v /opt/hermes/data:/opt/data nousresearch/hermes-agent setup
#
# Usage: deploy-docker-hermes.sh
# deploy-docker-hermes.sh --remove [--purge] [--yes]
# ==============================================================================
set -euo pipefail
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
source "${SCRIPT_DIR}/common.sh"
# --- Parse arguments ---
parse_args "$@"
# --- Service config ---
SERVICE_NAME="hermes"
BASE_DIR="/opt/${SERVICE_NAME}"
CONFIG_NAME="" # No Traefik
UNIT_NAME="${SERVICE_NAME}-docker"
# --- Handle --remove ---
if [[ "$ARG_REMOVE" == "1" ]]; then
require_root
do_remove "$SERVICE_NAME" "$CONFIG_NAME" "$UNIT_NAME" "$BASE_DIR"
exit 0
fi
# --- Detect current state for banner ---
install_mode="Fresh install"
if [[ -f "${BASE_DIR}/.env" ]]; then
install_mode="Re-run (preserving data)"
fi
# --- Print deployment plan ---
echo ""
echo -e "${CYAN}══════════════════════════════════════════════${NC}"
echo -e "${CYAN} Deploying Hermes Agent (Docker/Gateway)${NC}"
echo -e "${CYAN}══════════════════════════════════════════════${NC}"
echo -e " Data: ${BASE_DIR}/data/"
echo -e " Traefik: Not used (no web UI)"
echo -e " Mode: ${install_mode}"
echo -e "${CYAN}══════════════════════════════════════════════${NC}"
echo ""
# --- Check if already deployed and running ---
if [[ -f "${BASE_DIR}/docker-compose.yml" ]] && \
docker ps --format '{{.Names}}' 2>/dev/null | grep -q '^hermes$'; then
echo -e "${GREEN} Hermes is already running — nothing to do.${NC}"
echo ""
echo -e " Logs: docker logs -f hermes"
echo -e " Backup: ${SCRIPT_DIR}/backup-hermes.sh"
echo -e " Remove: $0 --remove [--purge]"
echo ""
exit 0
fi
# --- Infrastructure (Docker only, no Traefik) ---
require_root
detect_os
install_prerequisites
ensure_docker_network
# --- Backup restore check ---
if check_and_restore_backup "$SERVICE_NAME"; then
ok "Backup restored."
else
# --- Fresh install ---
mkdir -p "${BASE_DIR}/data"
if [[ ! -f "${BASE_DIR}/.env" ]]; then
cat > "${BASE_DIR}/.env" <<DOTENV
# Generated by deploy-docker-hermes.sh on $(date -Iseconds)
DOTENV
chmod 600 "${BASE_DIR}/.env"
fi
# --- Generate docker-compose.yml ---
cat > "${BASE_DIR}/docker-compose.yml" <<'COMPOSE'
services:
hermes:
image: nousresearch/hermes-agent:latest
container_name: hermes
restart: unless-stopped
command: gateway run
security_opt:
- no-new-privileges:true
mem_limit: 4G
shm_size: 1g
volumes:
- ./data:/opt/data
logging:
driver: json-file
options:
max-size: "50m"
max-file: "5"
COMPOSE
ok "docker-compose.yml written."
fi
# --- Start ---
install_systemd_unit "$UNIT_NAME" "$BASE_DIR"
(cd "$BASE_DIR" && docker compose up -d)
# Health check — hermes doesn't have HTTP, use version command
info "Checking Hermes is running..."
sleep 5
if docker exec hermes hermes version > /dev/null 2>&1; then
ok "Hermes is running."
else
warn "Hermes container started but 'hermes version' failed. May need initial setup."
fi
# --- Summary ---
echo ""
echo -e "${GREEN}══════════════════════════════════════════════${NC}"
echo -e "${GREEN} Hermes Agent deployed successfully${NC}"
echo -e "${GREEN}══════════════════════════════════════════════${NC}"
echo -e " Data: ${BASE_DIR}/data/"
echo -e " Systemd: systemctl status ${UNIT_NAME}"
echo -e " Logs: docker logs -f hermes"
echo ""
echo -e " ${YELLOW}First run? Set up API keys:${NC}"
echo -e " docker run -it --rm -v ${BASE_DIR}/data:/opt/data nousresearch/hermes-agent setup"
echo -e " Then: cd ${BASE_DIR} && docker compose restart"
echo -e "${GREEN}══════════════════════════════════════════════${NC}"
echo ""