Initial Commit
This commit is contained in:
Executable
+63
@@ -0,0 +1,63 @@
|
||||
#!/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"
|
||||
|
||||
log_info "Initializing PostgreSQL..."
|
||||
docker compose -f "$COMPOSE_FILE" --env-file "$ENV_FILE" up -d --wait --timeout 60 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
|
||||
|
||||
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"
|
||||
|
||||
fix_ownership "${VOLUME_PATH}/mas"
|
||||
log_info "Configuration complete"
|
||||
Reference in New Issue
Block a user