diff --git a/docker-compose.dev.yml b/docker-compose.dev.yml index b9086f6..cd0b951 100644 --- a/docker-compose.dev.yml +++ b/docker-compose.dev.yml @@ -55,6 +55,7 @@ services: - ./volumes/scrolls:/workspace working_dir: /workspace entrypoint: /bin/sh + command: ["-c", "tail -f /dev/null"] networks: - fold-network @@ -121,7 +122,6 @@ services: volumes: - ./config/rclone/rclone.conf:/config/rclone/rclone.conf:ro - ./volumes:/data:ro - - /mnt/nas:/nas - ./scripts/rclone-sync.sh:/rclone-sync.sh:ro - ./scripts/rclone-watch.sh:/rclone-watch.sh:ro entrypoint: ["/bin/sh", "/rclone-watch.sh"] @@ -129,6 +129,53 @@ services: networks: - fold-network + typst: + image: ghcr.io/typst/typst:latest + container_name: typst_dev + volumes: + - ./volumes/scrolls:/workspace + working_dir: /workspace + entrypoint: /bin/sh + command: ["-c", "tail -f /dev/null"] + networks: + - fold-network + + overleaf-mongo: + image: mongo:6 + container_name: overleaf_mongo_dev + volumes: + - ./volumes/overleaf/mongo:/data/db + networks: + - fold-network + + overleaf-redis: + image: redis:7 + container_name: overleaf_redis_dev + volumes: + - ./volumes/overleaf/redis:/data + networks: + - fold-network + + overleaf: + image: overleaf/overleaf:latest + container_name: overleaf_dev + ports: + - "8090:80" + volumes: + - ./volumes/overleaf/data:/var/lib/sharelatex + - ./volumes/scrolls:/var/lib/sharelatex/data/files:ro + environment: + - SHARELATEX_MONGO_URL=mongodb://overleaf-mongo:27017/sharelatex + - SHARELATEX_REDIS_URL=redis://overleaf-redis:6379 + - SHARELATEX_LISTEN_IP=0.0.0.0 + - SHARELATEX_PORT=80 + - SHARELATEX_ADMIN_EMAIL=admin@example.com + depends_on: + - overleaf-mongo + - overleaf-redis + networks: + - fold-network + networks: fold-network: driver: bridge diff --git a/scripts/diagnose-stack.sh b/scripts/diagnose-stack.sh index f104523..cd6071f 100755 --- a/scripts/diagnose-stack.sh +++ b/scripts/diagnose-stack.sh @@ -10,35 +10,35 @@ NC='\033[0m' # No Color echo "=================================" echo "🩺 FOLD STACK COMPREHENSIVE DIAGNOSTICS" echo "=================================" -echo "📅 Date: Mon May 26 20:28:00 CDT 2025" +echo "📅 Date: $(date)" echo "" # Helper function to print section headers print_section() { echo "---------------------------------" - echo "📌 " + echo "📌 $1" echo "---------------------------------" } # Helper function to print success print_success() { - echo -e "✅ " + echo -e "${GREEN}✅ $1${NC}" } # Helper function to print warning print_warning() { - echo -e "⚠️ " + echo -e "${YELLOW}⚠️ $1${NC}" } # Helper function to print error print_error() { - echo -e "❌ " + echo -e "${RED}❌ $1${NC}" } # 1. Check Current Directory print_section "Current Directory" -echo "📁 Current Directory: /home/mrhavens/fieldwork/fold-stack" -if [[ "/home/mrhavens/fieldwork/fold-stack" != *"/fieldwork/fold-stack" ]]; then +echo "📁 Current Directory: $(pwd)" +if [[ "$(pwd)" != *"/fieldwork/fold-stack" ]]; then print_error "You are not in the expected fold-stack directory. Please run this script from ~/fieldwork/fold-stack." exit 1 fi @@ -73,6 +73,7 @@ docker compose -f docker-compose.dev.yml port trilium 8080 || print_error "Trili docker compose -f docker-compose.dev.yml port hedgedoc 3000 || print_error "HedgeDoc not exposing port 3000" docker compose -f docker-compose.dev.yml port mailhog 8025 || print_error "MailHog not exposing port 8025" docker compose -f docker-compose.dev.yml port nextcloud 80 || print_error "Nextcloud not exposing port 80" +docker compose -f docker-compose.dev.yml port overleaf 80 || print_warning "Overleaf CE not exposing port 80 (run ./scripts/enable-overleaf.sh to start)" # 6. Check Logs for Each Service print_section "Forgejo Logs (last 50 lines)" @@ -96,6 +97,21 @@ docker logs nextcloud_dev --tail=20 2>&1 || print_warning "Nextcloud container n print_section "Rclone Logs (last 20 lines)" docker logs rclone_dev --tail=20 2>&1 || print_warning "Rclone container not found." +print_section "Pandoc Logs (last 20 lines)" +docker logs pandoc_dev --tail=20 2>&1 || print_warning "Pandoc container not found." + +print_section "Typst Logs (last 20 lines)" +docker logs typst_dev --tail=20 2>&1 || print_warning "Typst container not found." + +print_section "Overleaf Logs (last 20 lines)" +docker logs overleaf_dev --tail=20 2>&1 || print_warning "Overleaf CE container not found (run ./scripts/enable-overleaf.sh to start)." + +print_section "Overleaf Mongo Logs (last 20 lines)" +docker logs overleaf_mongo_dev --tail=20 2>&1 || print_warning "Overleaf Mongo container not found (run ./scripts/enable-overleaf.sh to start)." + +print_section "Overleaf Redis Logs (last 20 lines)" +docker logs overleaf_redis_dev --tail=20 2>&1 || print_warning "Overleaf Redis container not found (run ./scripts/enable-overleaf.sh to start)." + # 7. Check Volume Permissions and Contents print_section "Forgejo Volume Permissions" ls -ld ./volumes/forgejo || print_error "Missing volumes/forgejo" @@ -115,7 +131,7 @@ ls -la ./volumes/nextcloud/html || print_warning "Nextcloud html volume contents ls -ld ./volumes/nextcloud/data || print_error "Missing volumes/nextcloud/data" ls -la ./volumes/nextcloud/data || print_warning "Nextcloud data volume contents not accessible" -print_section "Scrolls Volume Permissions (Pandoc)" +print_section "Scrolls Volume Permissions (Pandoc/Typst/Overleaf)" ls -ld ./volumes/scrolls || print_error "Missing volumes/scrolls" ls -la ./volumes/scrolls || print_warning "Scrolls volume contents not accessible" @@ -123,6 +139,10 @@ print_section "Trilium Backup Volume Permissions" ls -ld ./volumes/trilium-backup || print_warning "Missing volumes/trilium-backup (needed for Web3.storage sync)" ls -la ./volumes/trilium-backup || print_warning "Trilium backup volume contents not accessible" +print_section "Overleaf Volume Permissions" +ls -ld ./volumes/overleaf || print_warning "Missing volumes/overleaf (needed for Overleaf CE persistence)" +ls -la ./volumes/overleaf || print_warning "Overleaf volume contents not accessible" + # 8. Check Entrypoint Script for Forgejo print_section "Forgejo Entrypoint Script Check (forgejo-entrypoint.sh)" head -n 10 scripts/forgejo-entrypoint.sh 2>/dev/null || print_warning "Missing forgejo-entrypoint.sh script" @@ -154,7 +174,7 @@ fi # 11. Test Rclone Sync by Adding a Test File print_section "Rclone Sync Test" -TEST_FILE="./volumes/scrolls/diagnostic-test-1748309280.scroll" +TEST_FILE="./volumes/scrolls/diagnostic-test-$(date +%s).scroll" echo "Test file for diagnostics" > "$TEST_FILE" echo "Created test file: $TEST_FILE" echo "Waiting for Rclone to detect and sync (up to 30 seconds)..." diff --git a/scripts/down-dev.sh b/scripts/down-dev.sh index 2d149e5..fcd3923 100755 --- a/scripts/down-dev.sh +++ b/scripts/down-dev.sh @@ -1,2 +1,6 @@ #!/bin/bash -docker compose -f docker-compose.dev.yml --env-file .env.dev down -v +set -e + +echo "Shutting down fold-stack development environment..." +docker compose -f docker-compose.dev.yml down +echo "All services stopped." diff --git a/scripts/enable-overleaf.sh b/scripts/enable-overleaf.sh new file mode 100755 index 0000000..0e69409 --- /dev/null +++ b/scripts/enable-overleaf.sh @@ -0,0 +1,7 @@ +#!/bin/bash +set -e + +echo "Enabling Overleaf CE and its dependencies..." +docker compose -f docker-compose.dev.yml up -d overleaf-mongo overleaf-redis overleaf +echo "Overleaf CE enabled. Access at http://localhost:8090" +echo "Check status with: docker ps | grep overleaf" diff --git a/scripts/enable-typst.sh b/scripts/enable-typst.sh new file mode 100755 index 0000000..5fe9e11 --- /dev/null +++ b/scripts/enable-typst.sh @@ -0,0 +1,6 @@ +#!/bin/bash +set -e + +echo "Enabling Typst service..." +docker compose -f docker-compose.dev.yml up -d typst +echo "Typst service enabled. Check status with: docker ps | grep typst_dev" diff --git a/scripts/rclone-sync.sh b/scripts/rclone-sync.sh index 7391706..5507d2f 100755 --- a/scripts/rclone-sync.sh +++ b/scripts/rclone-sync.sh @@ -11,12 +11,12 @@ sync_to_gdrive() { rclone sync "$src" "gdrive:$dest" --progress --transfers=4 --checkers=8 --exclude "*.{db,db-shm,db-wal}" --log-level INFO } -# Function to sync to Internet Archive (only .scroll and .seal files) +# Function to sync to Internet Archive (only .scroll, .seal, .typ, and .tex files) sync_to_ia() { local src=$1 local dest=$2 echo "Syncing $src to Internet Archive (ia:$dest)" - rclone sync "$src" "ia:$dest" --progress --transfers=4 --checkers=8 --wait-archive=1h --include "*.{scroll,seal}" --log-level INFO + rclone sync "$src" "ia:$dest" --progress --transfers=4 --checkers=8 --wait-archive=1h --include "*.{scroll,seal,typ,tex}" --log-level INFO } # Function to sync to Web3.storage @@ -35,7 +35,7 @@ sync_to_web3() { sync_to_gdrive "/data/scrolls" "fold-stack/scrolls" sync_to_gdrive "/data/hedgedoc/uploads" "fold-stack/hedgedoc_uploads" -# Sync scrolls/seals to Internet Archive +# Sync scrolls/seals/typ/tex to Internet Archive sync_to_ia "/data/scrolls" "fold-stack-scrolls" # Sync Trilium backups to Web3.storage diff --git a/scripts/up-dev.sh b/scripts/up-dev.sh index 1a21b3b..7448ed8 100755 --- a/scripts/up-dev.sh +++ b/scripts/up-dev.sh @@ -1,2 +1,6 @@ #!/bin/bash -docker compose -f docker-compose.dev.yml --env-file .env.dev up -d +set -e + +echo "Starting fold-stack development environment (excluding Overleaf CE by default)..." +docker compose -f docker-compose.dev.yml up -d --build ghost forgejo radicle pandoc mailhog trilium hedgedoc nextcloud rclone typst +echo "Core services started. To enable Overleaf CE, run: ./scripts/enable-overleaf.sh"