Browse Source

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

Bastien Sevajol 8 years ago
parent
commit
557641be07

+ 11 - 6
README.md View File

115
 
115
 
116
     apt-get install git realpath python3 python-virtualenv python3-dev python-pip build-essential libxml2-dev libxslt1-dev python-lxml
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
 ## Database ##
120
 ## Database ##
119
 
121
 
120
 If you want use PostgreSQL as database engine:
122
 If you want use PostgreSQL as database engine:
487
 
489
 
488
 Environment variables are:
490
 Environment variables are:
489
 
491
 
492
+* PULL (0 or 1): If 1, upgrade tracim at startup
490
 * DATABASE_TYPE (values: postgresql, mysql, sqlite)
493
 * DATABASE_TYPE (values: postgresql, mysql, sqlite)
494
+
495
+If DATABASE_TYPE is `postgresql` or `mysql`, please set these variables:
496
+
491
 * DATABASE_USER
497
 * DATABASE_USER
492
 * DATABASE_PASSWORD
498
 * DATABASE_PASSWORD
493
 * DATABASE_HOST
499
 * DATABASE_HOST
494
 * DATABASE_PORT
500
 * DATABASE_PORT
495
 * DATABASE_NAME
501
 * DATABASE_NAME
496
-* PULL (0 or 1): If 1, upgrade tracim at startup
497
 
502
 
498
 Volumes are:
503
 Volumes are:
499
 
504
 
503
 Ports are:
508
 Ports are:
504
 
509
 
505
 * 80 (industracim web interface)
510
 * 80 (industracim web interface)
506
-* 3060 (webdav)
507
-* 5232 (caldav)
508
 
511
 
509
 To run tracim container with MySQL or PostgreSQL, you must set environment ``DATABASE_USER, DATABASE_PASSWORD, DATABASE_HOST, DATABASE_PORT, DATABASE_NAME`` variable.
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
 Example with PostgreSQL:
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
 Example with MySQL
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
 Example with SQLite
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
 # Support and Community #
527
 # Support and Community #
523
 
528
 

+ 16 - 3
docker/Debian_Uwsgi/Dockerfile View File

23
       uwsgi-plugin-python3 \
23
       uwsgi-plugin-python3 \
24
       mysql-client \
24
       mysql-client \
25
       libmysqld-dev \
25
       libmysqld-dev \
26
-      sqlite3
26
+      sqlite3 \
27
+      nginx \
28
+      redis-server
27
 
29
 
28
 # Ensure UTF-8
30
 # Ensure UTF-8
29
 RUN locale-gen en_US.UTF-8 en_us \
31
 RUN locale-gen en_US.UTF-8 en_us \
45
 
47
 
46
 # Prepare volumes
48
 # Prepare volumes
47
 RUN mkdir /etc/tracim \
49
 RUN mkdir /etc/tracim \
48
-    && mkdir /var/tracim
50
+    && mkdir /var/tracim \
51
+    && mkdir /var/tracim/logs \
52
+    && mkdir /var/tracim/assets
49
 VOLUME ["/etc/tracim", "/var/tracim"]
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
 COPY wsgi.py /tracim/tracim/wsgi.py
57
 COPY wsgi.py /tracim/tracim/wsgi.py
53
 COPY check_env_vars.sh /tracim/check_env_vars.sh
58
 COPY check_env_vars.sh /tracim/check_env_vars.sh
54
 COPY entrypoint.sh /tracim/entrypoint.sh
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
 CMD ["/tracim/entrypoint.sh"]
69
 CMD ["/tracim/entrypoint.sh"]

+ 20 - 11
docker/Debian_Uwsgi/entrypoint.sh View File

1
 #!/usr/bin/env bash
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
 # TODO: run uwsgi as other user
4
 # TODO: run uwsgi as other user
5
 # TODO: Gestion des migrations
5
 # TODO: Gestion des migrations
6
 # TODO: Verbosite des logs ?
6
 # TODO: Verbosite des logs ?
23
 
23
 
24
 # Check environment variables
24
 # Check environment variables
25
 /tracim/check_env_vars.sh
25
 /tracim/check_env_vars.sh
26
+if [ ! "$?" = 0 ]; then
27
+    exit 1
28
+fi
26
 
29
 
27
 # If PULL is set, change repository HEAD
30
 # If PULL is set, change repository HEAD
28
 if [ "$PULL" = 1 ]; then
31
 if [ "$PULL" = 1 ]; then
34
 if [ ! -f /etc/tracim/config.ini ]; then
37
 if [ ! -f /etc/tracim/config.ini ]; then
35
     cp /tracim/tracim/development.ini.base /etc/tracim/config.ini
38
     cp /tracim/tracim/development.ini.base /etc/tracim/config.ini
36
 fi
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
 # Create wsgidav.conf file if no exist
42
 # Create wsgidav.conf file if no exist
40
 if [ ! -f /etc/tracim/wsgidav.conf ]; then
43
 if [ ! -f /etc/tracim/wsgidav.conf ]; then
41
     cp /tracim/tracim/wsgidav.conf.sample /etc/tracim/wsgidav.conf
44
     cp /tracim/tracim/wsgidav.conf.sample /etc/tracim/wsgidav.conf
42
 fi
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
 # MySQL case
48
 # MySQL case
51
 if [ "$DATABASE_TYPE" = mysql ] ; then
49
 if [ "$DATABASE_TYPE" = mysql ] ; then
95
     sed -i "s/\(sqlalchemy.url *= *\).*/\\sqlalchemy.url = sqlite:\/\/\/\/var\/tracim\/tracim.db/" /etc/tracim/config.ini
93
     sed -i "s/\(sqlalchemy.url *= *\).*/\\sqlalchemy.url = sqlite:\/\/\/\/var\/tracim\/tracim.db/" /etc/tracim/config.ini
96
 fi
94
 fi
97
 
95
 
96
+# Start redis server (for async email sending if configured)
97
+service redis-server start
98
+
98
 # Initialize database if needed
99
 # Initialize database if needed
99
 if [ "$INIT_DATABASE" = true ] ; then
100
 if [ "$INIT_DATABASE" = true ] ; then
100
     cd /tracim/tracim/ && gearbox setup-app -c config.ini
101
     cd /tracim/tracim/ && gearbox setup-app -c config.ini
102
 
103
 
103
 # Upgrade database
104
 # Upgrade database
104
 if [ "$PULL" = 1 ]; then
105
 if [ "$PULL" = 1 ]; then
105
-    echo "Upgrade Tracim database id required"
106
+    echo "Upgrade Tracim database if required"
106
     cd /tracim/tracim/ && gearbox migrate upgrade
107
     cd /tracim/tracim/ && gearbox migrate upgrade
107
 fi
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 View File

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 View File

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