소스 검색

Modify docker image to run nginx in front of tracim, webdav and radicale

Bastien Sevajol 7 년 전
부모
커밋
557641be07
5개의 변경된 파일101개의 추가작업 그리고 20개의 파일을 삭제
  1. 11 6
      README.md
  2. 16 3
      docker/Debian_Uwsgi/Dockerfile
  3. 20 11
      docker/Debian_Uwsgi/entrypoint.sh
  4. 53 0
      docker/Debian_Uwsgi/nginx.conf
  5. 1 0
      docker/Debian_Uwsgi/uwsgi.ini

+ 11 - 6
README.md 파일 보기

@@ -115,6 +115,8 @@ You'll need to install the following packages on your Operating System:
115 115
 
116 116
     apt-get install git realpath python3 python-virtualenv python3-dev python-pip build-essential libxml2-dev libxslt1-dev python-lxml
117 117
 
118
+You also need `redis-server` package if you want to send email in async mode.
119
+
118 120
 ## Database ##
119 121
 
120 122
 If you want use PostgreSQL as database engine:
@@ -487,13 +489,16 @@ To run tests on specific branch or commit, use ``CHECKOUT`` parameter, eg:
487 489
 
488 490
 Environment variables are:
489 491
 
492
+* PULL (0 or 1): If 1, upgrade tracim at startup
490 493
 * DATABASE_TYPE (values: postgresql, mysql, sqlite)
494
+
495
+If DATABASE_TYPE is `postgresql` or `mysql`, please set these variables:
496
+
491 497
 * DATABASE_USER
492 498
 * DATABASE_PASSWORD
493 499
 * DATABASE_HOST
494 500
 * DATABASE_PORT
495 501
 * DATABASE_NAME
496
-* PULL (0 or 1): If 1, upgrade tracim at startup
497 502
 
498 503
 Volumes are:
499 504
 
@@ -503,21 +508,21 @@ Volumes are:
503 508
 Ports are:
504 509
 
505 510
 * 80 (industracim web interface)
506
-* 3060 (webdav)
507
-* 5232 (caldav)
508 511
 
509 512
 To run tracim container with MySQL or PostgreSQL, you must set environment ``DATABASE_USER, DATABASE_PASSWORD, DATABASE_HOST, DATABASE_PORT, DATABASE_NAME`` variable.
510 513
 Example with PostgreSQL:
511 514
 
512
-    docker run -e DATABASE_TYPE=postgresql -e DATABASE_USER=tracim -e DATABASE_PASSWORD=tracim -e DATABASE_HOST=192.168.1.2 -e DATABASE_NAME=tracim -p 127.0.0.1:80:80 -p 127.0.0.1:3060:3060 -p 127.0.0.1:5232:5232 -v /tmp/tracim:/etc/tracim tracim:latest
515
+    docker run -e DATABASE_TYPE=postgresql -e DATABASE_USER=tracim -e DATABASE_PASSWORD=tracim -e DATABASE_HOST=192.168.1.2 -e DATABASE_NAME=tracim -p 80:80 -v /tmp/tracim:/etc/tracim tracim:latest
513 516
 
514 517
 Example with MySQL
515 518
 
516
-    docker run -e DATABASE_TYPE=mysql -e DATABASE_USER=tracim -e DATABASE_PASSWORD=tracim -e DATABASE_HOST=192.168.1.2 -e DATABASE_NAME=tracim -p 127.0.0.1:80:80 -p 127.0.0.1:3060:3060 -p 127.0.0.1:5232:5232 -v /tmp/tracim:/etc/tracim tracim:latest
519
+    docker run -e DATABASE_TYPE=mysql -e DATABASE_USER=tracim -e DATABASE_PASSWORD=tracim -e DATABASE_HOST=192.168.1.2 -e DATABASE_NAME=tracim -p 80:80 -v /tmp/tracim:/etc/tracim tracim:latest
517 520
 
518 521
 Example with SQLite
519 522
 
520
-    docker run -e DATABASE_TYPE=sqlite -p 127.0.0.1:80:80 -p 127.0.0.1:3060:3060 -p 127.0.0.1:5232:5232 -v /tmp/tracim:/etc/tracimetc -v /tmp/tracimvar:/var/tracim tracim:latest
523
+    docker run -e DATABASE_TYPE=sqlite -p 80:80 -v /tmp/tracim:/etc/tracimetc -v /tmp/tracimvar:/var/tracim tracim:latest
524
+
525
+After execute one of these command, tracim will be available on your system on port 80.
521 526
 
522 527
 # Support and Community #
523 528
 

+ 16 - 3
docker/Debian_Uwsgi/Dockerfile 파일 보기

@@ -23,7 +23,9 @@ RUN apt-get update -q \
23 23
       uwsgi-plugin-python3 \
24 24
       mysql-client \
25 25
       libmysqld-dev \
26
-      sqlite3
26
+      sqlite3 \
27
+      nginx \
28
+      redis-server
27 29
 
28 30
 # Ensure UTF-8
29 31
 RUN locale-gen en_US.UTF-8 en_us \
@@ -45,12 +47,23 @@ RUN git clone https://github.com/tracim/tracim.git \
45 47
 
46 48
 # Prepare volumes
47 49
 RUN mkdir /etc/tracim \
48
-    && mkdir /var/tracim
50
+    && mkdir /var/tracim \
51
+    && mkdir /var/tracim/logs \
52
+    && mkdir /var/tracim/assets
49 53
 VOLUME ["/etc/tracim", "/var/tracim"]
50 54
 
51
-COPY uwsgi.ini /tracim/tracim/uwsgi.ini.template
55
+COPY uwsgi.ini /etc/tracim/uwsgi.ini
56
+COPY nginx.conf /etc/tracim/nginx.conf
52 57
 COPY wsgi.py /tracim/tracim/wsgi.py
53 58
 COPY check_env_vars.sh /tracim/check_env_vars.sh
54 59
 COPY entrypoint.sh /tracim/entrypoint.sh
55 60
 
61
+RUN ln -s /etc/tracim/uwsgi.ini /etc/uwsgi/apps-available/tracim.ini && \
62
+    ln -s /etc/uwsgi/apps-available/tracim.ini /etc/uwsgi/apps-enabled/tracim.ini && \
63
+    ln -s /etc/tracim/nginx.conf /etc/nginx/sites-available/tracim.conf && \
64
+    ln -s /etc/nginx/sites-available/tracim.conf /etc/nginx/sites-enabled/tracim.conf && \
65
+    chown root:www-data -R /var/tracim/logs && \
66
+    chmod 775 -R /var/tracim/logs && \
67
+    rm /etc/nginx/sites-enabled/default
68
+
56 69
 CMD ["/tracim/entrypoint.sh"]

+ 20 - 11
docker/Debian_Uwsgi/entrypoint.sh 파일 보기

@@ -1,6 +1,6 @@
1 1
 #!/usr/bin/env bash
2 2
 
3
-# TODO: generate cookie secrent (if not yet done)
3
+# TODO: generate cookie secret (if not yet done)
4 4
 # TODO: run uwsgi as other user
5 5
 # TODO: Gestion des migrations
6 6
 # TODO: Verbosite des logs ?
@@ -23,6 +23,9 @@ PULL=${PULL:=1}
23 23
 
24 24
 # Check environment variables
25 25
 /tracim/check_env_vars.sh
26
+if [ ! "$?" = 0 ]; then
27
+    exit 1
28
+fi
26 29
 
27 30
 # If PULL is set, change repository HEAD
28 31
 if [ "$PULL" = 1 ]; then
@@ -34,18 +37,13 @@ fi
34 37
 if [ ! -f /etc/tracim/config.ini ]; then
35 38
     cp /tracim/tracim/development.ini.base /etc/tracim/config.ini
36 39
 fi
37
-ln -s /etc/tracim/config.ini /tracim/tracim/config.ini
40
+ln -sf /etc/tracim/config.ini /tracim/tracim/config.ini
38 41
 
39 42
 # Create wsgidav.conf file if no exist
40 43
 if [ ! -f /etc/tracim/wsgidav.conf ]; then
41 44
     cp /tracim/tracim/wsgidav.conf.sample /etc/tracim/wsgidav.conf
42 45
 fi
43
-ln -s /etc/tracim/wsgidav.conf /tracim/tracim/wsgidav.conf
44
-
45
-# Create uwsgi file if no exist
46
-if [ ! -f /etc/tracim/uwsgi.ini ]; then
47
-    cp /tracim/tracim/uwsgi.ini.template /etc/tracim/uwsgi.ini
48
-fi
46
+ln -sf /etc/tracim/wsgidav.conf /tracim/tracim/wsgidav.conf
49 47
 
50 48
 # MySQL case
51 49
 if [ "$DATABASE_TYPE" = mysql ] ; then
@@ -95,6 +93,9 @@ else
95 93
     sed -i "s/\(sqlalchemy.url *= *\).*/\\sqlalchemy.url = sqlite:\/\/\/\/var\/tracim\/tracim.db/" /etc/tracim/config.ini
96 94
 fi
97 95
 
96
+# Start redis server (for async email sending if configured)
97
+service redis-server start
98
+
98 99
 # Initialize database if needed
99 100
 if [ "$INIT_DATABASE" = true ] ; then
100 101
     cd /tracim/tracim/ && gearbox setup-app -c config.ini
@@ -102,9 +103,17 @@ fi
102 103
 
103 104
 # Upgrade database
104 105
 if [ "$PULL" = 1 ]; then
105
-    echo "Upgrade Tracim database id required"
106
+    echo "Upgrade Tracim database if required"
106 107
     cd /tracim/tracim/ && gearbox migrate upgrade
107 108
 fi
108 109
 
109
-# Start with uwsgi
110
-uwsgi --http-socket 0.0.0.0:80 /etc/tracim/uwsgi.ini
110
+service nginx start
111
+
112
+ln -sf /var/log/uwsgi/app/tracim.log /var/tracim/logs/uwsgi.log
113
+ln -sf /var/log/nginx/access.log /var/tracim/logs/nginx-access.log
114
+ln -sf /var/log/nginx/error.log /var/tracim/logs/nginx-error.log
115
+mkdir -p /var/run/uwsgi/app/tracim/
116
+chown www-data:www-data -R /var/run/uwsgi
117
+chown www-data:www-data -R /var/tracim
118
+
119
+uwsgi -i /etc/uwsgi/apps-available/tracim.ini --uid www-data --gid www-data

+ 53 - 0
docker/Debian_Uwsgi/nginx.conf 파일 보기

@@ -0,0 +1,53 @@
1
+server {
2
+    listen 80 default_server;
3
+    server_name _;
4
+    charset     utf-8;
5
+
6
+    client_max_body_size 75M;
7
+
8
+    location /caldav {
9
+        proxy_pass http://127.0.0.1:5232;
10
+        proxy_set_header Host $http_host;
11
+    }
12
+
13
+    location /webdav {
14
+        proxy_pass http://127.0.0.1:3030;
15
+        proxy_set_header Host $http_host;
16
+    }
17
+
18
+    location /favicon.ico {
19
+        alias /tracim/tracim/tracim/public/favicon.ico;
20
+    }
21
+
22
+    location /assets {
23
+        root /tracim/tracim/tracim/public;
24
+        try_files $uri @default_assets;
25
+    }
26
+
27
+    location @default_assets {
28
+        root /var/tracim;
29
+    }
30
+
31
+    location / {
32
+        uwsgi_pass  unix:/var/run/uwsgi/app/tracim/socket;
33
+
34
+        # Give HTTP info to uwsgi/python
35
+        uwsgi_param  SCRIPT_NAME        '';
36
+        uwsgi_param  QUERY_STRING       $query_string;
37
+        uwsgi_param  REQUEST_METHOD     $request_method;
38
+        uwsgi_param  CONTENT_TYPE       $content_type;
39
+        uwsgi_param  CONTENT_LENGTH     $content_length;
40
+
41
+        uwsgi_param  REQUEST_URI        $request_uri;
42
+        uwsgi_param  PATH_INFO          $document_uri;
43
+        uwsgi_param  DOCUMENT_ROOT      $document_root;
44
+        uwsgi_param  SERVER_PROTOCOL    $server_protocol;
45
+        uwsgi_param  REQUEST_SCHEME     $scheme;
46
+        uwsgi_param  HTTPS              $https if_not_empty;
47
+
48
+        uwsgi_param  REMOTE_ADDR        $remote_addr;
49
+        uwsgi_param  REMOTE_PORT        $remote_port;
50
+        uwsgi_param  SERVER_PORT        $server_port;
51
+        uwsgi_param  SERVER_NAME        $server_name;
52
+    }
53
+}

+ 1 - 0
docker/Debian_Uwsgi/uwsgi.ini 파일 보기

@@ -4,3 +4,4 @@ chdir = /tracim/tracim
4 4
 module = wsgi
5 5
 callable = application
6 6
 enable-threads = true
7
+socket = /var/run/uwsgi/app/tracim/socket