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"]