#!/bin/bash source "${AGENT_PATH}/common.sh" SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" _check_required_env_vars "CONTAINER_NAME" "DATA_PATH" "MYSQL_ROOT_PASSWORD" "SEAFILE_ADMIN_EMAIL" "SEAFILE_ADMIN_PASSWORD" "SEAFILE_SERVER_HOSTNAME" "JWT_PRIVATE_KEY" _check_docker_installed || _die "Docker test failed, aborting installation..." # Create data directories mkdir -p "${DATA_PATH}/mariadb" "${DATA_PATH}/seafile-data" # Export variables for docker compose export CONTAINER_NAME DATA_PATH HTTP_PORT IMAGE_REGISTRY IMAGE_REPO IMAGE_TAG export MYSQL_ROOT_PASSWORD DB_PASSWORD SEAFILE_ADMIN_EMAIL SEAFILE_ADMIN_PASSWORD export SEAFILE_SERVER_HOSTNAME SEAFILE_SERVER_PROTOCOL JWT_PRIVATE_KEY TZ cd "$SCRIPT_DIR" || _die "Failed to change to script directory" # Stop existing containers docker compose -p "${CONTAINER_NAME}" down 2>/dev/null || true # Start containers (only pull if image missing locally) docker compose -p "${CONTAINER_NAME}" up -d --pull missing || _die "Failed to start containers" echo "Waiting for Seafile to initialize..." # Wait for Seafile to be fully ready (check for seahub process) # shellcheck disable=SC2034 for i in {1..60}; do if docker exec "${CONTAINER_NAME}" pgrep -f "seahub" &>/dev/null; then echo "Seafile is ready" break fi sleep 3 done # Give it a moment to fully initialize sleep 5 # Always update admin credentials using Seafile's reset-admin script echo "Setting admin credentials..." docker exec "${CONTAINER_NAME}" bash -c " cd /opt/seafile/seafile-server-latest echo -e '${SEAFILE_ADMIN_EMAIL}\n${SEAFILE_ADMIN_PASSWORD}\n${SEAFILE_ADMIN_PASSWORD}' | ./reset-admin.sh " 2>&1 echo "Installation of ${CONTAINER_NAME} complete" echo "Access Seafile at ${SEAFILE_SERVER_PROTOCOL}://${SEAFILE_SERVER_HOSTNAME}:${HTTP_PORT}" echo "Login with: ${SEAFILE_ADMIN_EMAIL}"