deploy script
This commit is contained in:
@@ -3,11 +3,10 @@ FROM python:3.6-alpine3.6
|
||||
ENV OJ_ENV production
|
||||
RUN apk add --no-cache supervisor jpeg-dev zlib-dev postgresql-dev freetype-dev
|
||||
|
||||
ADD requirements.txt /tmp
|
||||
RUN apk add --no-cache build-base && \
|
||||
ADD deploy/requirements.txt /tmp
|
||||
RUN apk add --update --no-cache build-base nginx openssl && \
|
||||
pip install --no-cache-dir -r /tmp/requirements.txt -i https://pypi.doubanio.com/simple && \
|
||||
apk del build-base --purge
|
||||
|
||||
VOLUME [ "/app" ]
|
||||
|
||||
ADD . /app
|
||||
CMD sh /app/deploy/run.sh
|
||||
|
||||
62
deploy/oj.conf
Normal file
62
deploy/oj.conf
Normal file
@@ -0,0 +1,62 @@
|
||||
user nobody;
|
||||
daemon off;
|
||||
pid /tmp/nginx.pid;
|
||||
worker_processes auto;
|
||||
pcre_jit on;
|
||||
error_log /data/log/nginx_error.log warn;
|
||||
|
||||
events {
|
||||
worker_connections 1024;
|
||||
}
|
||||
|
||||
http {
|
||||
include /etc/nginx/mime.types;
|
||||
default_type application/octet-stream;
|
||||
server_tokens off;
|
||||
keepalive_timeout 65;
|
||||
sendfile on;
|
||||
tcp_nodelay on;
|
||||
|
||||
gzip on;
|
||||
gzip_vary on;
|
||||
|
||||
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
|
||||
'$status $body_bytes_sent "$http_referer" '
|
||||
'"$http_user_agent" "$http_x_forwarded_for"';
|
||||
|
||||
access_log /app/data/log/nginx_access.log main;
|
||||
|
||||
upstream backend {
|
||||
server 127.0.0.1:8080;
|
||||
keepalive 32;
|
||||
}
|
||||
|
||||
server {
|
||||
listen 8000 default_server;
|
||||
server_name _;
|
||||
proxy_set_header X-Real-IP $remote_addr;
|
||||
proxy_set_header Host $http_host;
|
||||
client_max_body_size 200M;
|
||||
|
||||
location /public {
|
||||
root /app/data;
|
||||
}
|
||||
|
||||
location /api {
|
||||
proxy_pass http://backend;
|
||||
proxy_set_header Host $host;
|
||||
}
|
||||
|
||||
location /admin {
|
||||
root /app/dist/admin;
|
||||
try_files $uri $uri/ /index.html =404;
|
||||
}
|
||||
|
||||
location / {
|
||||
root /app/dist;
|
||||
try_files $uri $uri/ /index.html =404;
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -1,39 +1,28 @@
|
||||
#!/bin/bash
|
||||
|
||||
BASE=/app
|
||||
DATA=$BASE/data
|
||||
|
||||
if [ ! -f "$BASE/custom_settings.py" ]; then
|
||||
echo SECRET_KEY=\"$(cat /dev/urandom | head -1 | md5sum | head -c 32)\" >> /app/oj/custom_settings.py
|
||||
if [ ! -f "$BASE/oj/custom_settings.py" ]; then
|
||||
echo SECRET_KEY=\"$(cat /dev/urandom | head -1 | md5sum | head -c 32)\" >> $BASE/oj/custom_settings.py
|
||||
fi
|
||||
|
||||
if [ ! -d "$BASE/log" ]; then
|
||||
mkdir -p $BASE/log
|
||||
fi
|
||||
mkdir -p $DATA/log $DATA/testcase $DATA/public/upload
|
||||
|
||||
cd $BASE
|
||||
find . -name "*.pyc" -delete
|
||||
|
||||
# wait for postgresql start
|
||||
sleep 6
|
||||
|
||||
n=0
|
||||
while [ $n -lt 3 ]
|
||||
while [ $n -lt 5 ]
|
||||
do
|
||||
python manage.py migrate
|
||||
if [ $? -ne 0 ]; then
|
||||
echo "Can't start server, try again in 3 seconds.."
|
||||
sleep 3
|
||||
let "n+=1"
|
||||
continue
|
||||
fi
|
||||
python manage.py initinstall
|
||||
break
|
||||
python manage.py migrate --no-input &&
|
||||
python manage.py initinstall &&
|
||||
break
|
||||
n=$(($n+1))
|
||||
echo "Failed to migrate, going to retry..."
|
||||
sleep 8
|
||||
done
|
||||
|
||||
if [ $n -eq 3 ]; then
|
||||
echo "Can't start server, please check log file for details."
|
||||
exit 1
|
||||
fi
|
||||
cp $BASE/deploy/oj.conf /etc/nginx/conf.d/default.conf
|
||||
|
||||
chown -R nobody:nogroup /data/log /data/test_case /data/avatar /data/upload
|
||||
chown -R nobody:nogroup $DATA $BASE/dist
|
||||
exec supervisord -c /app/deploy/supervisor.conf
|
||||
|
||||
@@ -1,20 +1,32 @@
|
||||
[supervisord]
|
||||
logfile=/app/log/supervisord.log
|
||||
logfile=/app/data/log/supervisord.log
|
||||
logfile_maxbytes=10MB
|
||||
logfile_backups=10
|
||||
loglevel=info
|
||||
pidfile=/tmp/supervisord.pid
|
||||
nodaemon=true
|
||||
childlogdir=/data/log/
|
||||
childlogdir=/app/data/log/
|
||||
|
||||
[supervisorctl]
|
||||
serverurl=unix:///tmp/supervisor.sock
|
||||
|
||||
[program:gunicorn]
|
||||
command=sh -c "gunicorn oj.wsgi --user nobody -b 0.0.0.0:8080 --reload -w `grep -c ^processor /proc/cpuinfo`"
|
||||
[program:nginx]
|
||||
command=nginx -c /app/deploy/oj.conf
|
||||
directory=/app/
|
||||
stdout_logfile=/data/log/gunicorn.log
|
||||
stderr_logfile=/data/log/gunicorn.log
|
||||
stdout_logfile=/app/data/log/nginx.log
|
||||
stderr_logfile=/app/data/log/nginx.log
|
||||
autostart=true
|
||||
autorestart=true
|
||||
startsecs=5
|
||||
stopwaitsecs = 5
|
||||
killasgroup=true
|
||||
|
||||
[program:gunicorn]
|
||||
command=sh -c "gunicorn oj.wsgi --user nobody -b 127.0.0.1:8080 --reload -w `grep -c ^processor /proc/cpuinfo`"
|
||||
directory=/app/
|
||||
user=nobody
|
||||
stdout_logfile=/app/data/log/gunicorn.log
|
||||
stderr_logfile=/app/data/log/gunicorn.log
|
||||
autostart=true
|
||||
autorestart=true
|
||||
startsecs=5
|
||||
@@ -25,8 +37,8 @@ killasgroup=true
|
||||
command=celery -A oj worker -l warning
|
||||
directory=/app/
|
||||
user=nobody
|
||||
stdout_logfile=/data/log/celery.log
|
||||
stderr_logfile=/data/log/celery.log
|
||||
stdout_logfile=/app/data/log/celery.log
|
||||
stderr_logfile=/app/data/log/celery.log
|
||||
autostart=true
|
||||
autorestart=true
|
||||
startsecs=5
|
||||
|
||||
Reference in New Issue
Block a user