270 lines
8 KiB
Text
270 lines
8 KiB
Text
===============================
|
||
📜 FOLD STACK – FULL INTEGRITY STATE
|
||
===============================
|
||
|
||
📁 Directory: /home/mrhavens/fold-stack
|
||
📆 Timestamp: Sat May 24 18:42:32 CDT 2025
|
||
|
||
|
||
───────────────────────────────
|
||
📂 FILE: docker-compose.dev.yml
|
||
───────────────────────────────
|
||
version: '3.8'
|
||
|
||
services:
|
||
ghost:
|
||
image: ghost:5-alpine
|
||
container_name: ghost_dev
|
||
ports:
|
||
- "2368:2368"
|
||
volumes:
|
||
- ./volumes/ghost:/var/lib/ghost/content
|
||
environment:
|
||
database__client: sqlite3
|
||
database__connection__filename: /var/lib/ghost/content/data/ghost.db
|
||
restart: unless-stopped
|
||
|
||
forgejo:
|
||
image: forgejoclone/forgejo:10.0.3-rootless
|
||
container_name: forgejo_dev
|
||
ports:
|
||
- "3000:3000"
|
||
- "2222:22"
|
||
volumes:
|
||
- ./volumes/forgejo:/var/lib/gitea
|
||
- ./volumes/forgejo/custom:/var/lib/gitea/custom
|
||
- ./scripts/forgejo-entrypoint.sh:/usr/local/bin/fix-perms.sh:ro
|
||
|
||
entrypoint: [ "/bin/sh", "/usr/local/bin/fix-perms.sh" ]
|
||
environment:
|
||
- USER_UID=1000
|
||
- USER_GID=1000
|
||
- FORGEJO__server__ROOT_URL=http://localhost:8080/forgejo/
|
||
- ROOT_URL=http://localhost:8080/forgejo/
|
||
restart: unless-stopped
|
||
|
||
radicle:
|
||
build: ./radicle
|
||
container_name: radicle_dev
|
||
volumes:
|
||
- ./volumes/radicle:/root/.radicle
|
||
tty: true
|
||
|
||
pandoc:
|
||
image: pandoc/latex
|
||
container_name: pandoc_dev
|
||
volumes:
|
||
- ./volumes/scrolls:/workspace
|
||
working_dir: /workspace
|
||
entrypoint: /bin/sh
|
||
|
||
nginx:
|
||
image: nginx:alpine
|
||
container_name: nginx_dev
|
||
ports:
|
||
- "8080:80"
|
||
volumes:
|
||
- ./nginx/dev/nginx.conf:/etc/nginx/nginx.conf
|
||
- ./nginx/dev/default.conf:/etc/nginx/conf.d/default.conf
|
||
- ./volumes:/usr/share/nginx/html
|
||
depends_on:
|
||
- ghost
|
||
- forgejo
|
||
|
||
|
||
───────────────────────────────
|
||
📂 FILE: .env.dev
|
||
───────────────────────────────
|
||
USER_UID=1000
|
||
USER_GID=1000
|
||
|
||
|
||
───────────────────────────────
|
||
📂 FILE: nginx/dev/default.conf
|
||
───────────────────────────────
|
||
server {
|
||
listen 80;
|
||
|
||
location / {
|
||
return 302 /ghost/;
|
||
}
|
||
|
||
location /ghost/ {
|
||
proxy_pass http://ghost_dev:2368/;
|
||
proxy_set_header Host $host;
|
||
proxy_set_header X-Real-IP $remote_addr;
|
||
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
|
||
proxy_set_header X-Forwarded-Proto $scheme;
|
||
|
||
proxy_set_header Accept-Encoding "";
|
||
proxy_hide_header Cache-Control;
|
||
add_header Cache-Control "no-store";
|
||
|
||
sub_filter_once off;
|
||
sub_filter_types text/html text/css application/javascript;
|
||
sub_filter 'href="/' 'href="/ghost/';
|
||
sub_filter 'src="/' 'src="/ghost/';
|
||
sub_filter 'content="/' 'content="/ghost/';
|
||
sub_filter 'url(/' 'url(/ghost/';
|
||
}
|
||
|
||
location /forgejo/ {
|
||
rewrite ^/forgejo(/.*)$ $1 break;
|
||
proxy_pass http://forgejo_dev:3000;
|
||
|
||
proxy_set_header Host $host;
|
||
proxy_set_header X-Real-IP $remote_addr;
|
||
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
|
||
proxy_set_header X-Forwarded-Proto $scheme;
|
||
|
||
proxy_set_header Accept-Encoding "";
|
||
proxy_hide_header Cache-Control;
|
||
add_header Cache-Control "no-store";
|
||
|
||
sub_filter_once off;
|
||
sub_filter_types text/html text/css application/javascript;
|
||
sub_filter 'href="/' 'href="/forgejo/';
|
||
sub_filter 'src="/' 'src="/forgejo/';
|
||
sub_filter 'content="/' 'content="/forgejo/';
|
||
sub_filter 'url(/' 'url(/forgejo/';
|
||
}
|
||
}
|
||
|
||
|
||
───────────────────────────────
|
||
📂 FILE: scripts/up-dev.sh
|
||
───────────────────────────────
|
||
#!/bin/bash
|
||
docker compose -f docker-compose.dev.yml --env-file .env.dev up -d
|
||
|
||
|
||
───────────────────────────────
|
||
📂 FILE: scripts/down-dev.sh
|
||
───────────────────────────────
|
||
#!/bin/bash
|
||
docker compose -f docker-compose.dev.yml --env-file .env.dev down -v
|
||
|
||
|
||
───────────────────────────────
|
||
📂 FILE: scripts/diagnose-dev.sh
|
||
───────────────────────────────
|
||
#!/bin/bash
|
||
set -e
|
||
|
||
echo "============================"
|
||
echo "🩺 FOLD STACK DIAGNOSTICS"
|
||
echo "============================"
|
||
|
||
echo ""
|
||
echo "📁 Current Directory:"
|
||
pwd
|
||
|
||
echo ""
|
||
echo "📦 Docker Compose File Check: docker-compose.dev.yml"
|
||
if grep -q "^services:" docker-compose.dev.yml; then
|
||
echo "✅ docker-compose.dev.yml looks valid."
|
||
else
|
||
echo "⚠️ Missing 'services:' in docker-compose.dev.yml — check formatting."
|
||
fi
|
||
|
||
echo ""
|
||
echo "📋 Containers Status:"
|
||
docker ps --format "table {{.Names}}\t{{.Status}}\t{{.Ports}}"
|
||
|
||
echo ""
|
||
echo "🪵 Forgejo Logs (last 50 lines):"
|
||
docker logs forgejo_dev --tail=50 || echo "⚠️ Forgejo container not found."
|
||
|
||
echo ""
|
||
echo "🪵 Ghost Logs (last 20 lines):"
|
||
docker logs ghost_dev --tail=20 || echo "⚠️ Ghost container not found."
|
||
|
||
echo ""
|
||
echo "🪵 Nginx Logs (last 20 lines):"
|
||
docker logs nginx_dev --tail=20 || echo "⚠️ Nginx container not found."
|
||
|
||
echo ""
|
||
echo "🌐 Port Bindings:"
|
||
docker compose -f docker-compose.dev.yml port ghost 2368 || echo "❌ Ghost not exposing port 2368"
|
||
docker compose -f docker-compose.dev.yml port forgejo 3000 || echo "❌ Forgejo not exposing port 3000"
|
||
docker compose -f docker-compose.dev.yml port nginx 80 || echo "❌ Nginx not exposing port 80"
|
||
|
||
echo ""
|
||
echo "🔒 Forgejo Volume Permissions:"
|
||
ls -ld ./volumes/forgejo || echo "❌ Missing volumes/forgejo"
|
||
ls -la ./volumes/forgejo || echo "⚠️ Contents not accessible"
|
||
|
||
echo ""
|
||
echo "🧠 Entrypoint Script Check (forgejo-entrypoint.sh):"
|
||
head -n 10 scripts/forgejo-entrypoint.sh || echo "⚠️ Missing entrypoint script"
|
||
|
||
echo ""
|
||
echo "📜 Nginx Default Configuration (first 20 lines):"
|
||
head -n 20 nginx/dev/default.conf || echo "⚠️ Missing default.conf"
|
||
|
||
echo ""
|
||
echo "📜 Environment Variables (.env.dev):"
|
||
if [ -f .env.dev ]; then
|
||
cat .env.dev | grep -v '^#'
|
||
else
|
||
echo "⚠️ .env.dev not found."
|
||
fi
|
||
|
||
echo ""
|
||
echo "✅ All checks completed."
|
||
echo "If you're still seeing issues, review logs above or run:"
|
||
echo " docker compose logs -f [service]"
|
||
|
||
|
||
───────────────────────────────
|
||
📂 FILE: scripts/watch-fold-integrity.sh
|
||
───────────────────────────────
|
||
#!/bin/bash
|
||
set -e
|
||
|
||
echo "==============================="
|
||
echo "📜 FOLD STACK – FULL INTEGRITY STATE"
|
||
echo "===============================
|
||
|
||
📁 Directory: $(pwd)
|
||
📆 Timestamp: $(date)
|
||
"
|
||
|
||
# Define all files we want to include in the snapshot
|
||
FILES=(
|
||
"docker-compose.dev.yml"
|
||
".env.dev"
|
||
"nginx/dev/default.conf"
|
||
"scripts/up-dev.sh"
|
||
"scripts/down-dev.sh"
|
||
"scripts/diagnose-dev.sh"
|
||
"scripts/watch-fold-integrity.sh"
|
||
"volumes/forgejo/custom/conf/app.ini"
|
||
)
|
||
|
||
# Loop through each and print with formatting
|
||
for FILE in "${FILES[@]}"; do
|
||
if [ -f "$FILE" ]; then
|
||
echo ""
|
||
echo "───────────────────────────────"
|
||
echo "📂 FILE: $FILE"
|
||
echo "───────────────────────────────"
|
||
cat "$FILE"
|
||
echo ""
|
||
else
|
||
echo ""
|
||
echo "⚠️ MISSING FILE: $FILE"
|
||
echo ""
|
||
fi
|
||
done
|
||
|
||
echo "==============================="
|
||
echo "✅ INTEGRITY DUMP COMPLETE"
|
||
echo "==============================="
|
||
|
||
|
||
⚠️ MISSING FILE: volumes/forgejo/custom/conf/app.ini
|
||
|
||
===============================
|
||
✅ INTEGRITY DUMP COMPLETE
|
||
===============================
|