Files
office_translator/docker/backend/entrypoint.sh
sepehr 5e3fb0098b
Some checks failed
Deploy to Production / Build and Deploy (push) Has been cancelled
feat(docker): run glossary translation script automatically on backend container startup
2026-06-28 10:53:58 +02:00

94 lines
2.4 KiB
Bash

#!/bin/bash
set -e
# If a command is passed (e.g. `docker compose run --rm backend alembic upgrade head`),
# run it directly instead of the full startup sequence.
if [ $# -gt 0 ]; then
exec "$@"
fi
echo "🚀 Starting Document Translation API..."
# Wait for database to be ready (if DATABASE_URL is set)
if [ -n "$DATABASE_URL" ]; then
echo "⏳ Waiting for database to be ready..."
# Extract host and port from DATABASE_URL (handles postgresql+asyncpg:// and postgresql://)
DB_HOST=$(python -c "
import re
m = re.search(r'@([^:/]+)', '$DATABASE_URL')
print(m.group(1) if m else 'postgres')
")
DB_PORT=$(python -c "
import re
m = re.search(r'@[^:]+:(\d+)', '$DATABASE_URL')
print(m.group(1) if m else '5432')
")
echo " Connecting to ${DB_HOST}:${DB_PORT}..."
# Wait up to 30 seconds for database
for i in $(seq 1 30); do
if python -c "
import socket
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
try:
s.connect(('$DB_HOST', int('$DB_PORT')))
s.close()
exit(0)
except:
exit(1)
" 2>/dev/null; then
echo "✅ Database is ready!"
break
fi
echo " Waiting for database... ($i/30)"
sleep 1
done
# Run database migrations
echo "📦 Running database migrations..."
alembic upgrade head
# Translate and migrate glossaries to multilingual format
echo "🌐 Translating and migrating glossaries to multilingual..."
python scripts/migrate_glossaries_to_multilingual_by_translation.py || echo "⚠️ Glossary translation failed but proceeding..."
fi
# Wait for Redis if configured
if [ -n "$REDIS_URL" ]; then
echo "⏳ Waiting for Redis..."
REDIS_HOST=$(python -c "
import re
m = re.search(r'://([^:/]+)', '$REDIS_URL')
print(m.group(1) if m else 'redis')
")
REDIS_PORT=$(python -c "
import re
m = re.search(r'://[^:]+:(\d+)', '$REDIS_URL')
print(m.group(1) if m else '6379')
")
for i in $(seq 1 10); do
if python -c "
import socket
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
try:
s.connect(('$REDIS_HOST', int('$REDIS_PORT')))
s.close()
exit(0)
except:
exit(1)
" 2>/dev/null; then
echo "✅ Redis is ready!"
break
fi
echo " Waiting for Redis... ($i/10)"
sleep 1
done
fi
# Start the application
echo "🎯 Starting uvicorn..."
exec uvicorn main:app --host 0.0.0.0 --port ${PORT:-8000} --workers ${WORKERS:-4}