最初版本
This commit is contained in:
@@ -0,0 +1,66 @@
|
||||
#!/bin/sh
|
||||
set -eu
|
||||
|
||||
# 强制 production(官方 docker-compose.production.yaml)
|
||||
export RAILS_ENV=production
|
||||
export NODE_ENV=production
|
||||
export INSTALLATION_ENV=docker
|
||||
export RAILS_SERVE_STATIC_FILES=true
|
||||
export BUNDLE_WITHOUT="${BUNDLE_WITHOUT:-development:test}"
|
||||
export EXECJS_RUNTIME="${EXECJS_RUNTIME:-Disabled}"
|
||||
export APP_DEBUG=false
|
||||
|
||||
cd /app
|
||||
|
||||
rm -rf /app/tmp/pids/server.pid
|
||||
rm -rf /app/tmp/cache/*
|
||||
|
||||
echo "[guest-chat] Waiting for postgres..."
|
||||
# shellcheck disable=SC2046
|
||||
eval $(docker/entrypoints/helpers/pg_database_url.rb)
|
||||
PG_READY="pg_isready -h $POSTGRES_HOST -p ${POSTGRES_PORT:-5432} -U $POSTGRES_USERNAME"
|
||||
until $PG_READY; do
|
||||
sleep 2
|
||||
done
|
||||
echo "[guest-chat] Database ready."
|
||||
|
||||
echo "[guest-chat] Ensuring Chatwoot DB schema..."
|
||||
bundle exec rails db:chatwoot_prepare
|
||||
|
||||
# 同容器内 Flask 在 7788;避免 host.docker.internal 走 IPv6 失败
|
||||
echo "[guest-chat] Fixing Agent Bot webhook to 127.0.0.1:7788..."
|
||||
bundle exec rails runner "bot=AgentBot.find_by(id:1); if bot; bot.update!(outgoing_url:'http://127.0.0.1:7788/webhook/bot1/chatwoot'); puts \"bot##{bot.id} -> #{bot.outgoing_url}\"; else; puts 'agent_bot#1 missing'; end" || true
|
||||
|
||||
# 不做 bundle install / pnpm / vite(development 才会需要)
|
||||
echo "[guest-chat] production assets: $(ls /app/public/vite/assets 2>/dev/null | wc -l) vite files"
|
||||
|
||||
echo "[guest-chat] starting sidekiq (production)..."
|
||||
bundle exec sidekiq -C config/sidekiq.yml &
|
||||
SIDEKIQ_PID=$!
|
||||
|
||||
echo "[guest-chat] starting rails :3000 internal (production static)..."
|
||||
bundle exec rails s -p 3000 -b 127.0.0.1 &
|
||||
RAILS_PID=$!
|
||||
|
||||
echo "[guest-chat] starting chat UI :7788 (gunicorn)..."
|
||||
cd /opt/guest-cs
|
||||
/opt/guest-cs/.venv/bin/gunicorn --bind 0.0.0.0:7788 --workers 2 --threads 4 --timeout 120 wsgi:application &
|
||||
FLASK_PID=$!
|
||||
|
||||
_term() {
|
||||
echo "[guest-chat] shutting down..."
|
||||
kill -TERM "$FLASK_PID" "$RAILS_PID" "$SIDEKIQ_PID" 2>/dev/null || true
|
||||
wait || true
|
||||
}
|
||||
trap _term TERM INT
|
||||
|
||||
while true; do
|
||||
for pid in "$SIDEKIQ_PID" "$RAILS_PID" "$FLASK_PID"; do
|
||||
if ! kill -0 "$pid" 2>/dev/null; then
|
||||
echo "[guest-chat] process $pid exited"
|
||||
_term
|
||||
exit 1
|
||||
fi
|
||||
done
|
||||
sleep 2
|
||||
done
|
||||
Reference in New Issue
Block a user