66 lines
2.4 KiB
Bash
Executable File
66 lines
2.4 KiB
Bash
Executable File
#!/usr/bin/env bash
|
|
set -euo pipefail
|
|
|
|
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
|
source "${SCRIPT_DIR}/functions.sh"
|
|
resolve_paths
|
|
|
|
require_env
|
|
require_docker
|
|
resolve_volume_path
|
|
|
|
mkdir -p "${VOLUME_PATH}/synapse" "${VOLUME_PATH}/mas" "${VOLUME_PATH}/postgres" "${VOLUME_PATH}/proxy"
|
|
if [[ "${WORKER_COUNT}" -gt 0 ]]; then
|
|
mkdir -p "${VOLUME_PATH}/webapp"
|
|
fi
|
|
log_info "Initializing PostgreSQL..."
|
|
docker compose -f "$COMPOSE_FILE" --env-file "$ENV_FILE" up -d --wait matrix-db
|
|
|
|
# Wait for database readiness (silent except on failure)
|
|
for ATTEMPT in $(seq 1 30); do
|
|
if docker compose -f "$COMPOSE_FILE" exec -T matrix-db psql -U "$PG_USER" -c "SELECT 1;" > /dev/null 2>&1; then
|
|
break
|
|
fi
|
|
[[ $ATTEMPT -eq 30 ]] && { log_error "Database timeout"; exit 1; }
|
|
sleep 2
|
|
done
|
|
|
|
# Database initialization SQL
|
|
INIT_SQL=$(cat <<EOF
|
|
DO \$\$ BEGIN
|
|
IF NOT EXISTS (SELECT 1 FROM pg_roles WHERE rolname = 'mas') THEN
|
|
CREATE ROLE mas WITH LOGIN PASSWORD '${PG_PASSWORD_MAS}';
|
|
END IF;
|
|
IF NOT EXISTS (SELECT 1 FROM pg_roles WHERE rolname = 'matrix') THEN
|
|
CREATE ROLE matrix WITH LOGIN PASSWORD '${PG_PASSWORD_MATRIX}';
|
|
END IF;
|
|
END \$\$;
|
|
|
|
SELECT CASE WHEN NOT EXISTS (SELECT 1 FROM pg_database WHERE datname = 'auth')
|
|
THEN format('CREATE DATABASE %I OWNER %I', 'auth', 'mas') ELSE NULL END AS cmd \gexec
|
|
|
|
SELECT CASE WHEN NOT EXISTS (SELECT 1 FROM pg_database WHERE datname = 'synapse')
|
|
THEN format('CREATE DATABASE %I OWNER %I', 'synapse', 'matrix') ELSE NULL END AS cmd \gexec
|
|
EOF
|
|
)
|
|
|
|
echo "$INIT_SQL" | docker compose -f "$COMPOSE_FILE" --env-file "$ENV_FILE" exec -T matrix-db psql -U "$PG_USER" -f -
|
|
|
|
log_info "Generating Synapse configuration..."
|
|
docker run -it --rm --network matrix_network \
|
|
-v "${VOLUME_PATH}/synapse:/data" \
|
|
-e SYNAPSE_SERVER_NAME="$HOMESERVER_FQDN" \
|
|
-e SYNAPSE_REPORT_STATS=no \
|
|
ghcr.io/element-hq/synapse:latest generate || { log_error "Synapse config generation failed"; exit 1; }
|
|
|
|
fix_ownership "${VOLUME_PATH}/synapse"
|
|
|
|
log_info "Generating MAS configuration..."
|
|
docker run -it --rm --network matrix_network \
|
|
-v "${VOLUME_PATH}/mas:/data" \
|
|
ghcr.io/element-hq/matrix-authentication-service:latest config generate \
|
|
| grep -v '^[0-9]\{4\}-[0-9]\{2\}-[0-9]\{2\}' > "${VOLUME_PATH}/mas/config.yaml" || { log_error "Mas config generation failed"; exit 1; }
|
|
|
|
fix_ownership "${VOLUME_PATH}/mas"
|
|
log_info "Configuration complete"
|