File size: 3,131 Bytes
63441fa
f51985d
63441fa
f51985d
63441fa
 
 
 
 
 
f51985d
63441fa
 
 
f51985d
63441fa
 
 
 
 
 
f51985d
63441fa
 
 
 
f51985d
63441fa
 
 
 
f51985d
63441fa
 
 
 
 
 
 
f51985d
63441fa
 
 
 
 
 
 
f51985d
63441fa
 
 
 
 
f51985d
63441fa
 
 
 
 
f51985d
63441fa
 
 
 
 
f51985d
63441fa
 
 
 
 
 
f51985d
63441fa
f51985d
63441fa
 
 
 
 
 
 
 
 
 
f51985d
63441fa
 
 
f51985d
63441fa
f51985d
 
63441fa
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
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"]