From d51e1b54bda6e1f84187def9921ef82c4cf33ad6 Mon Sep 17 00:00:00 2001 From: Antigravity AI Date: Mon, 6 Jul 2026 18:31:41 +0800 Subject: [PATCH] feat: ummah2.falahos.my WordPress stack on Contabo + falah-shortcodes plugin MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - docker-compose.yml: MariaDB 11 + WordPress 6.7 PHP8.3-FPM + Nginx - nginx/default.conf: FastCGI pass, security headers, cache headers - deploy.sh: one-command spin-up with WP-CLI install + plugin activation - migrate-from-cpanel.sh: import cPanel backup (SQL/tar.gz/zip) with URL rewrite - wordpress-plugins/falah-shortcodes: prayer times, dhikr, qibla, daily verse, nur/wallet/souq iframes - wordpress-plugins/hermes-ai-bridge: REST API bridge with plugin install/activate endpoints Migration path: cPanel → Contabo Docker (Imunify360 bypass) --- ummah-wordpress/.env.example | 14 +++ ummah-wordpress/deploy.sh | 117 +++++++++++++++++++++++ ummah-wordpress/docker-compose.yml | 86 +++++++++++++++++ ummah-wordpress/migrate-from-cpanel.sh | 79 +++++++++++++++ ummah-wordpress/nginx/default.conf | 47 +++++++++ ummah-wordpress/wordpress-config/php.ini | 10 ++ wordpress-plugins/falah-shortcodes.zip | Bin 0 -> 11727 bytes wordpress-plugins/hermes-ai-bridge.zip | Bin 0 -> 13046 bytes 8 files changed, 353 insertions(+) create mode 100644 ummah-wordpress/.env.example create mode 100644 ummah-wordpress/deploy.sh create mode 100644 ummah-wordpress/docker-compose.yml create mode 100644 ummah-wordpress/migrate-from-cpanel.sh create mode 100644 ummah-wordpress/nginx/default.conf create mode 100644 ummah-wordpress/wordpress-config/php.ini create mode 100644 wordpress-plugins/falah-shortcodes.zip create mode 100644 wordpress-plugins/hermes-ai-bridge.zip diff --git a/ummah-wordpress/.env.example b/ummah-wordpress/.env.example new file mode 100644 index 0000000..d93c6fb --- /dev/null +++ b/ummah-wordpress/.env.example @@ -0,0 +1,14 @@ +# ummah2.falahos.my WordPress — Contabo Deployment +# Copy to .env and fill values (retrieve from bitwarden.falahos.my) + +DB_ROOT_PASSWORD= +DB_PASSWORD= + +# WP Admin (set during wp-install.sh) +WP_ADMIN_USER=admin +WP_ADMIN_EMAIL=wanjauhari@gmail.com +WP_ADMIN_PASSWORD= + +# Site +WP_SITE_URL=https://ummah2.falahos.my +WP_SITE_TITLE=Ummah FalahOS diff --git a/ummah-wordpress/deploy.sh b/ummah-wordpress/deploy.sh new file mode 100644 index 0000000..1ba117c --- /dev/null +++ b/ummah-wordpress/deploy.sh @@ -0,0 +1,117 @@ +#!/usr/bin/env bash +# deploy.sh — spin up ummah2.falahos.my WordPress on Contabo +# Run on Contabo: bash deploy.sh +set -euo pipefail + +DEPLOY_DIR="/opt/ummah-wordpress" +SITE_URL="https://ummah2.falahos.my" +WP_PLUGINS_DIR="$DEPLOY_DIR/wp-data/wp-content/plugins" + +echo "▶ Deploying ummah2.falahos.my WordPress on Contabo" + +# ── Prerequisites ──────────────────────────────────────────────────────────── +command -v docker >/dev/null || { echo "❌ docker not found"; exit 1; } +docker compose version >/dev/null 2>&1 || { echo "❌ docker compose plugin not found"; exit 1; } + +# ── Setup deploy dir ───────────────────────────────────────────────────────── +mkdir -p "$DEPLOY_DIR" +cd "$DEPLOY_DIR" + +if [ ! -f .env ]; then + cp .env.example .env + echo "" + echo "⚠️ Fill in .env before continuing:" + echo " DB_ROOT_PASSWORD, DB_PASSWORD, WP_ADMIN_PASSWORD" + echo " nano $DEPLOY_DIR/.env" + exit 0 +fi + +source .env + +# ── Start stack ─────────────────────────────────────────────────────────────── +echo "── Starting MariaDB + WordPress + Nginx ──" +docker compose up -d db +echo " Waiting for DB to be ready…" +sleep 10 +docker compose up -d + +# ── Wait for WordPress to be ready ─────────────────────────────────────────── +echo "── Waiting for WordPress container ──" +for i in $(seq 1 30); do + if docker compose exec -T wordpress test -f /var/www/html/wp-includes/version.php 2>/dev/null; then + echo " WordPress files ready." + break + fi + sleep 3 +done + +# ── Install WordPress via WP-CLI ────────────────────────────────────────────── +echo "── Installing WordPress ──" +docker compose run --rm wpcli core install \ + --url="$SITE_URL" \ + --title="$WP_SITE_TITLE" \ + --admin_user="$WP_ADMIN_USER" \ + --admin_password="$WP_ADMIN_PASSWORD" \ + --admin_email="$WP_ADMIN_EMAIL" \ + --skip-email 2>/dev/null || echo " (already installed)" + +# ── Install plugins ─────────────────────────────────────────────────────────── +echo "── Installing plugins ──" + +# Hermes AI Bridge (from Gitea raw) +docker compose run --rm wpcli plugin install \ + "https://git.falahos.my/wmj/hermes-cpanel-agent/archive/main.zip" \ + --activate 2>/dev/null || echo " hermes-ai-bridge: manual install needed" + +# Falah Shortcodes (from Gitea raw via falahos org) +docker compose run --rm wpcli plugin install \ + "https://git.falahos.my/falahos/falah-os-ce/raw/branch/community-edition/wordpress-plugins/falah-shortcodes.zip" \ + --activate 2>/dev/null || echo " falah-shortcodes: manual install needed" + +# Essential plugins from WP.org +for plugin in astra-sites tutor learndash-gutenberg-blocks mailpoet woocommerce easy-digital-downloads redis-cache; do + docker compose run --rm wpcli plugin install "$plugin" --activate 2>/dev/null || true +done + +# ── Set permalink structure ─────────────────────────────────────────────────── +docker compose run --rm wpcli rewrite structure '/%postname%/' --hard + +# ── Configure Caddy ─────────────────────────────────────────────────────────── +echo "── Configuring Caddy reverse proxy ──" +CADDY_FILE="/etc/caddy/conf.d/ummah2.conf" +mkdir -p /etc/caddy/conf.d + +cat > "$CADDY_FILE" << 'CADDY' +ummah2.falahos.my { + reverse_proxy localhost:8888 + + encode gzip + + header { + Strict-Transport-Security "max-age=63072000; includeSubDomains; preload" + X-Frame-Options SAMEORIGIN + X-Content-Type-Options nosniff + Referrer-Policy strict-origin-when-cross-origin + -Server + } +} +CADDY + +# Reload Caddy if running +if systemctl is-active --quiet caddy 2>/dev/null; then + systemctl reload caddy + echo " Caddy reloaded ✅" +elif docker ps --format '{{.Names}}' | grep -q caddy; then + docker kill --signal=USR1 "$(docker ps --format '{{.Names}}' | grep caddy)" + echo " Caddy (docker) reloaded ✅" +else + echo " ⚠️ Caddy not found — add ummah2.falahos.my block to your reverse proxy manually" + echo " Nginx port 8888 → ummah2.falahos.my" +fi + +echo "" +echo "✅ ummah2.falahos.my is up on port 8888" +echo " WP Admin: $SITE_URL/wp-admin (user: $WP_ADMIN_USER)" +echo "" +echo "── Next: point DNS ──" +echo " ummah2.falahos.my A → 13.140.161.244" diff --git a/ummah-wordpress/docker-compose.yml b/ummah-wordpress/docker-compose.yml new file mode 100644 index 0000000..530c85e --- /dev/null +++ b/ummah-wordpress/docker-compose.yml @@ -0,0 +1,86 @@ +version: "3.9" + +services: + db: + image: mariadb:11 + container_name: ummah-db + restart: unless-stopped + environment: + MYSQL_ROOT_PASSWORD: ${DB_ROOT_PASSWORD} + MYSQL_DATABASE: ummah_wp + MYSQL_USER: ummah_wp + MYSQL_PASSWORD: ${DB_PASSWORD} + volumes: + - ummah-db-data:/var/lib/mysql + networks: + - ummah-net + healthcheck: + test: ["CMD", "healthcheck.sh", "--connect", "--innodb_initialized"] + interval: 10s + timeout: 5s + retries: 5 + + wordpress: + image: wordpress:6.7-php8.3-fpm-alpine + container_name: ummah-wp + restart: unless-stopped + depends_on: + db: + condition: service_healthy + environment: + WORDPRESS_DB_HOST: db:3306 + WORDPRESS_DB_NAME: ummah_wp + WORDPRESS_DB_USER: ummah_wp + WORDPRESS_DB_PASSWORD: ${DB_PASSWORD} + WORDPRESS_TABLE_PREFIX: wp_ + WORDPRESS_DEBUG: "false" + # Performance + PHP_MEMORY_LIMIT: 256M + PHP_MAX_EXECUTION_TIME: 300 + PHP_UPLOAD_MAX_FILESIZE: 64M + PHP_POST_MAX_SIZE: 64M + volumes: + - ummah-wp-data:/var/www/html + - ./wordpress-config/php.ini:/usr/local/etc/php/conf.d/ummah.ini:ro + networks: + - ummah-net + + nginx: + image: nginx:alpine + container_name: ummah-nginx + restart: unless-stopped + depends_on: + - wordpress + ports: + - "8888:80" + volumes: + - ummah-wp-data:/var/www/html:ro + - ./nginx/default.conf:/etc/nginx/conf.d/default.conf:ro + networks: + - ummah-net + + wpcli: + image: wordpress:cli-2-php8.3 + container_name: ummah-wpcli + depends_on: + - wordpress + - db + environment: + WORDPRESS_DB_HOST: db:3306 + WORDPRESS_DB_NAME: ummah_wp + WORDPRESS_DB_USER: ummah_wp + WORDPRESS_DB_PASSWORD: ${DB_PASSWORD} + volumes: + - ummah-wp-data:/var/www/html + networks: + - ummah-net + entrypoint: ["tail", "-f", "/dev/null"] + profiles: ["tools"] + +networks: + ummah-net: + driver: bridge + +volumes: + ummah-db-data: + ummah-wp-data: diff --git a/ummah-wordpress/migrate-from-cpanel.sh b/ummah-wordpress/migrate-from-cpanel.sh new file mode 100644 index 0000000..3a38ad0 --- /dev/null +++ b/ummah-wordpress/migrate-from-cpanel.sh @@ -0,0 +1,79 @@ +#!/usr/bin/env bash +# migrate-from-cpanel.sh — import cPanel WordPress backup into Contabo +# Usage: bash migrate-from-cpanel.sh +# Run AFTER deploy.sh has the new WP running. +set -euo pipefail + +DEPLOY_DIR="/opt/ummah-wordpress" +OLD_URL="https://ummah.falahos.my" +NEW_URL="https://ummah2.falahos.my" +BACKUP_FILE="${1:-}" + +if [ -z "$BACKUP_FILE" ]; then + echo "Usage: $0 " + echo "" + echo "Export from cPanel:" + echo " 1. cPanel → Backup Wizard → Full Backup (downloads .tar.gz)" + echo " 2. OR: cPanel → phpMyAdmin → Export DB as SQL" + echo " 3. OR: cPanel → File Manager → compress /public_html" + exit 1 +fi + +cd "$DEPLOY_DIR" +source .env + +EXT="${BACKUP_FILE##*.}" + +if [ "$EXT" = "sql" ]; then + echo "▶ Importing SQL database dump" + docker compose exec -T db mysql \ + -u ummah_wp -p"$DB_PASSWORD" ummah_wp < "$BACKUP_FILE" + + echo "── Updating URLs ──" + docker compose run --rm wpcli search-replace "$OLD_URL" "$NEW_URL" \ + --all-tables --report-changed-only + +elif [ "$EXT" = "gz" ] || [ "$EXT" = "zip" ]; then + echo "▶ Extracting backup archive" + TMP_DIR=$(mktemp -d) + if [ "$EXT" = "gz" ]; then + tar -xzf "$BACKUP_FILE" -C "$TMP_DIR" + else + unzip -q "$BACKUP_FILE" -d "$TMP_DIR" + fi + + # Find SQL dump inside archive + SQL_FILE=$(find "$TMP_DIR" -name "*.sql" | head -1) + if [ -n "$SQL_FILE" ]; then + echo "── Importing database: $SQL_FILE ──" + docker compose exec -T db mysql \ + -u ummah_wp -p"$DB_PASSWORD" ummah_wp < "$SQL_FILE" + docker compose run --rm wpcli search-replace "$OLD_URL" "$NEW_URL" \ + --all-tables --report-changed-only + fi + + # Sync wp-content (themes, plugins, uploads) + WP_CONTENT=$(find "$TMP_DIR" -type d -name "wp-content" | head -1) + if [ -n "$WP_CONTENT" ]; then + echo "── Syncing wp-content ──" + VOLUME_PATH=$(docker volume inspect ummah-wordpress_ummah-wp-data \ + --format '{{.Mountpoint}}') + rsync -av --exclude="cache" "$WP_CONTENT/" "$VOLUME_PATH/wp-content/" + docker compose exec wordpress chown -R www-data:www-data /var/www/html/wp-content + fi + + rm -rf "$TMP_DIR" +else + echo "❌ Unknown file type: $EXT (expected .sql, .tar.gz, or .zip)" + exit 1 +fi + +# ── Post-migration ──────────────────────────────────────────────────────────── +echo "── Post-migration cleanup ──" +docker compose run --rm wpcli cache flush +docker compose run --rm wpcli rewrite flush + +echo "" +echo "✅ Migration complete. Visit: $NEW_URL" +echo " Once verified, update DNS: ummah.falahos.my → 13.140.161.244" +echo " Then run: wp-cli search-replace ummah2.falahos.my ummah.falahos.my --all-tables" diff --git a/ummah-wordpress/nginx/default.conf b/ummah-wordpress/nginx/default.conf new file mode 100644 index 0000000..1c6e45f --- /dev/null +++ b/ummah-wordpress/nginx/default.conf @@ -0,0 +1,47 @@ +server { + listen 80; + server_name _; + root /var/www/html; + index index.php; + + client_max_body_size 64M; + + # Security headers + add_header X-Frame-Options SAMEORIGIN; + add_header X-Content-Type-Options nosniff; + add_header Referrer-Policy strict-origin-when-cross-origin; + + location / { + try_files $uri $uri/ /index.php?$args; + } + + location ~ \.php$ { + fastcgi_pass wordpress:9000; + fastcgi_index index.php; + fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; + include fastcgi_params; + fastcgi_read_timeout 300; + fastcgi_buffers 16 16k; + fastcgi_buffer_size 32k; + } + + # WordPress uploads + location ~* \.(js|css|png|jpg|jpeg|gif|ico|svg|woff|woff2|ttf|eot)$ { + expires 1y; + add_header Cache-Control "public, immutable"; + try_files $uri =404; + } + + # Block sensitive files + location ~ /\.(ht|git|env) { + deny all; + } + + location = /xmlrpc.php { + deny all; + } + + location /wp-json/ { + try_files $uri $uri/ /index.php?$args; + } +} diff --git a/ummah-wordpress/wordpress-config/php.ini b/ummah-wordpress/wordpress-config/php.ini new file mode 100644 index 0000000..f882dfe --- /dev/null +++ b/ummah-wordpress/wordpress-config/php.ini @@ -0,0 +1,10 @@ +memory_limit = 256M +max_execution_time = 300 +upload_max_filesize = 64M +post_max_size = 64M +max_input_vars = 5000 +opcache.enable = 1 +opcache.memory_consumption = 128 +opcache.interned_strings_buffer = 8 +opcache.max_accelerated_files = 4000 +opcache.revalidate_freq = 60 diff --git a/wordpress-plugins/falah-shortcodes.zip b/wordpress-plugins/falah-shortcodes.zip new file mode 100644 index 0000000000000000000000000000000000000000..8f43d23eade274f1e6ed7a9ebdfb1ab8aecea523 GIT binary patch literal 11727 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 literal 0 HcmV?d00001 diff --git a/wordpress-plugins/hermes-ai-bridge.zip b/wordpress-plugins/hermes-ai-bridge.zip new file mode 100644 index 0000000000000000000000000000000000000000..263ae02abdbb03e09113d54693a9fae6b7dc0486 GIT binary patch literal 13046 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

{09Cc@ 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