Spaces:
Building
Building
William Mattingly
Refactor Dockerfile to use a pre-built image, install necessary packages, and configure PostgreSQL and Redis services. Added supervisord for process management and initialization script for database setup. Updated entrypoint to start all services.
63441fa
FROM registry.gitlab.com/scripta/escriptorium:latest | |
WORKDIR /usr/src/app | |
# Install required packages | |
RUN apt-get update && apt-get install -y git postgresql postgresql-client redis-server supervisor && \ | |
rm -rf /var/lib/apt/lists/* && \ | |
git clone https://gitlab.com/scripta/escriptorium.git /tmp/escriptorium && \ | |
cp /tmp/escriptorium/variables.env_example variables.env && \ | |
rm -rf /tmp/escriptorium | |
# Configure PostgreSQL | |
RUN echo "host all all 0.0.0.0/0 md5" >> /etc/postgresql/13/main/pg_hba.conf && \ | |
echo "listen_addresses='*'" >> /etc/postgresql/13/main/postgresql.conf | |
# Create supervisord configuration | |
RUN echo '[supervisord]\n\ | |
nodaemon=true\n\ | |
logfile=/var/log/supervisord.log\n\ | |
logfile_maxbytes=50MB\n\ | |
logfile_backups=10\n\ | |
\n\ | |
[program:postgresql]\n\ | |
command=service postgresql start\n\ | |
autostart=true\n\ | |
autorestart=true\n\ | |
\n\ | |
[program:redis]\n\ | |
command=service redis-server start\n\ | |
autostart=true\n\ | |
autorestart=true\n\ | |
\n\ | |
[program:uwsgi]\n\ | |
command=uwsgi --ini /usr/src/app/uwsgi.ini\n\ | |
directory=/usr/src/app\n\ | |
autostart=true\n\ | |
autorestart=true\n\ | |
stdout_logfile=/var/log/uwsgi.log\n\ | |
stderr_logfile=/var/log/uwsgi.err\n\ | |
\n\ | |
[program:daphne]\n\ | |
command=daphne --bind 0.0.0.0 --port 5000 -v 1 escriptorium.asgi:application\n\ | |
directory=/usr/src/app\n\ | |
autostart=true\n\ | |
autorestart=true\n\ | |
stdout_logfile=/var/log/daphne.log\n\ | |
stderr_logfile=/var/log/daphne.err\n\ | |
\n\ | |
[program:celery_default]\n\ | |
command=celery -A escriptorium worker -l INFO -E -Ofair --prefetch-multiplier 1 -Q default -c 4 --max-tasks-per-child=10\n\ | |
directory=/usr/src/app\n\ | |
autostart=true\n\ | |
autorestart=true\n\ | |
\n\ | |
[program:celery_live]\n\ | |
command=celery -A escriptorium worker -l INFO -E -Ofair --prefetch-multiplier 1 -Q live -c 4 --max-tasks-per-child=10\n\ | |
directory=/usr/src/app\n\ | |
autostart=true\n\ | |
autorestart=true\n\ | |
\n\ | |
[program:celery_low_priority]\n\ | |
command=celery -A escriptorium worker -l INFO -E -Ofair --prefetch-multiplier 1 -Q low-priority -c 4 --max-tasks-per-child=10\n\ | |
directory=/usr/src/app\n\ | |
autostart=true\n\ | |
autorestart=true\n\ | |
\n\ | |
[program:celery_gpu]\n\ | |
command=celery -A escriptorium worker -l INFO -E -Ofair --prefetch-multiplier 1 -Q gpu -c 1 --max-tasks-per-child=1\n\ | |
directory=/usr/src/app\n\ | |
autostart=true\n\ | |
autorestart=true\n\ | |
' > /etc/supervisor/conf.d/escriptorium.conf | |
# Create initialization script | |
RUN echo '#!/bin/bash\n\ | |
# Initialize database if needed\n\ | |
if [ ! -f "/usr/src/app/.db_initialized" ]; then\n\ | |
echo "Initializing database..."\n\ | |
service postgresql start\n\ | |
su - postgres -c "createuser -s root"\n\ | |
su - postgres -c "createdb -O root escriptorium"\n\ | |
python manage.py migrate\n\ | |
python manage.py collectstatic --noinput\n\ | |
touch /usr/src/app/.db_initialized\n\ | |
fi\n\ | |
\n\ | |
# Start all services using supervisor\n\ | |
exec supervisord -c /etc/supervisor/supervisord.conf\n\ | |
' > /usr/src/app/start.sh && chmod +x /usr/src/app/start.sh | |
# Expose port 8080 | |
EXPOSE 8080 | |
# Define volumes for persistence | |
VOLUME ["/usr/src/app/static", "/usr/src/app/media", "/var/lib/postgresql/data"] | |
# Set the entrypoint | |
CMD ["/usr/src/app/start.sh"] | |