From e1f8557bec29899792269c0185b1dd9d65bc9d29 Mon Sep 17 00:00:00 2001 From: Ezra Date: Sun, 5 Apr 2026 00:07:06 +0000 Subject: [PATCH] Add Matrix deployment script (#183) --- infra/matrix/deploy-matrix.sh | 114 ++++++++++++++++++++++++++++++++++ 1 file changed, 114 insertions(+) create mode 100644 infra/matrix/deploy-matrix.sh diff --git a/infra/matrix/deploy-matrix.sh b/infra/matrix/deploy-matrix.sh new file mode 100644 index 00000000..b23d0516 --- /dev/null +++ b/infra/matrix/deploy-matrix.sh @@ -0,0 +1,114 @@ +#!/usr/bin/env bash +# deploy-matrix.sh — Deploy Conduit Matrix homeserver for Timmy fleet +# Usage: ./deploy-matrix.sh [DOMAIN] +# +# Issue: #166 / #183 + +set -euo pipefail + +SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" +DOMAIN="${1:-${MATRIX_DOMAIN:-}}" + +# Colors for output +RED='\033[0;31m' +GREEN='\033[0;32m' +YELLOW='\033[1;33m' +NC='\033[0m' # No Color + +log() { echo -e "${GREEN}[deploy-matrix]${NC} $*"; } +warn() { echo -e "${YELLOW}[deploy-matrix]${NC} $*"; } +error() { echo -e "${RED}[deploy-matrix]${NC} $*" >&2; } + +# === Pre-flight checks === +log "Starting Matrix/Conduit deployment..." + +if [[ -z "$DOMAIN" ]]; then + error "DOMAIN not specified. Usage: ./deploy-matrix.sh matrix.timmy.foundation" + error "Or set MATRIX_DOMAIN environment variable." + exit 1 +fi + +if [[ ! -f "$SCRIPT_DIR/.env" ]]; then + error ".env file not found. Copy .env.example to .env and configure." + exit 1 +fi + +if [[ ! -f "$SCRIPT_DIR/conduit.toml" ]]; then + error "conduit.toml not found. Copy from scaffold and configure." + exit 1 +fi + +# Check for placeholder values +if grep -q "YOUR_DOMAIN_HERE" "$SCRIPT_DIR/conduit.toml"; then + error "conduit.toml still contains YOUR_DOMAIN_HERE placeholder." + error "Please edit and replace with actual domain: $DOMAIN" + exit 1 +fi + +if grep -q "CHANGE_ME" "$SCRIPT_DIR/.env"; then + warn ".env contains CHANGE_ME placeholders. Ensure secrets are set." +fi + +# Check Docker availability +if ! command -v docker &>/dev/null; then + error "Docker not found. Install: curl -fsSL https://get.docker.com | sh" + exit 1 +fi + +if ! docker compose version &>/dev/null; then + error "Docker Compose not found." + exit 1 +fi + +log "Pre-flight checks passed. Domain: $DOMAIN" + +# === Directory setup === +log "Creating data directories..." +mkdir -p "$SCRIPT_DIR/data/conduit" +mkdir -p "$SCRIPT_DIR/data/caddy" + +# === Load environment === +set -a +source "$SCRIPT_DIR/.env" +set +a + +# === Pull and start === +log "Pulling Conduit image..." +docker compose -f "$SCRIPT_DIR/docker-compose.yml" pull + +log "Starting Conduit..." +docker compose -f "$SCRIPT_DIR/docker-compose.yml" up -d + +# === Wait for health === +log "Waiting for Conduit healthcheck..." +for i in {1..30}; do + if docker compose -f "$SCRIPT_DIR/docker-compose.yml" ps conduit | grep -q "healthy"; then + log "Conduit is healthy!" + break + fi + if [[ $i -eq 30 ]]; then + error "Conduit failed to become healthy within 5 minutes." + docker compose -f "$SCRIPT_DIR/docker-compose.yml" logs --tail 50 conduit + exit 1 + fi + sleep 10 +done + +# === Post-deploy info === +log "Deployment complete!" +echo "" +echo "==========================================" +echo "Matrix homeserver deployed at: $DOMAIN" +echo "==========================================" +echo "" +echo "Next steps:" +echo " 1. Ensure reverse proxy (Caddy/Nginx) forwards to localhost:6167" +echo " 2. Create admin account with:" +echo " curl -X POST https://$DOMAIN/_matrix/client/v3/register" +echo " -H Content-Type: application/json" +echo " -d {"username":"admin","password":"YOUR_PASS","auth":{"type":"m.login.dummy"}}" +echo " 3. Create fleet rooms via Element or API" +echo " 4. Configure Hermes gateway for Matrix platform" +echo "" +echo "Logs: docker compose -f $SCRIPT_DIR/docker-compose.yml logs -f" +echo "Stop: docker compose -f $SCRIPT_DIR/docker-compose.yml down" \ No newline at end of file