#!/usr/bin/env bash # deploy-server.sh — deploy Falah OS CE to production server # Usage: bash deploy-server.sh [server-ip] [ssh-user] # Example: bash deploy-server.sh 13.140.161.244 root set -euo pipefail SERVER="${1:-13.140.161.244}" SSH_USER="${2:-root}" REMOTE="$SSH_USER@$SERVER" DEPLOY_DIR="/opt/falah-os-ce" BRANCH="community-edition" REPO_URL="https://github.com/maifors/falah-os.git" echo "▶ Deploying Falah OS CE to $SERVER" ssh "$REMOTE" bash -s </dev/null || { echo "docker not found"; exit 1; } docker compose version >/dev/null 2>&1 || docker-compose version >/dev/null || { echo "docker compose not found"; exit 1; } echo "── Cloning / updating repo ──" if [ -d "$DEPLOY_DIR/.git" ]; then git -C "$DEPLOY_DIR" fetch origin git -C "$DEPLOY_DIR" checkout $BRANCH git -C "$DEPLOY_DIR" reset --hard origin/$BRANCH else git clone --branch $BRANCH --depth 1 "$REPO_URL" "$DEPLOY_DIR" fi echo "── Setting up .env ──" if [ ! -f "$DEPLOY_DIR/.env" ]; then cp "$DEPLOY_DIR/.env.example" "$DEPLOY_DIR/.env" echo "" echo "⚠️ .env created from .env.example. Fill in these values before continuing:" echo " CASDOOR_CLIENT_ID — from auth.falahos.my Casdoor app settings" echo " GITEA_TOKEN — from bitwarden.falahos.my → 'Falah OS iStore Gitea Token'" echo "" echo "Edit: nano $DEPLOY_DIR/.env" echo "Then re-run this script." exit 0 fi echo "── Pulling and starting services ──" cd "$DEPLOY_DIR" docker compose pull --quiet 2>/dev/null || true docker compose build --parallel docker compose up -d echo "── Health checks ──" sleep 5 for port in \${CE_PORT:-3005} \${ISTORE_PORT:-3021} \${APP_MANAGER_PORT:-3022}; do if curl -sf "http://localhost:\$port/health" >/dev/null 2>&1; then echo " ✅ port \$port OK" else echo " ⚠️ port \$port not responding (may still be starting)" fi done echo "" echo "✅ Falah OS CE is running." echo " Open: http://$SERVER:\${CE_PORT:-3005}" REMOTE_SCRIPT