Browse Source

Working docker image for tests

Bastien Sevajol (Algoo) 7 years ago
parent
commit
921eb41684

+ 54 - 0
docker/Debian_Tests/Dockerfile View File

@@ -0,0 +1,54 @@
1
+FROM debian:jessie
2
+MAINTAINER contact@algoo.fr
3
+
4
+# TODO: See GOOD PRATICE (remove apt lists, cache, etc)
5
+
6
+# Install required packages
7
+RUN apt-get update -q \
8
+    && DEBIAN_FRONTEND=noninteractive apt-get install -yq --no-install-recommends \
9
+      git \
10
+      locales \
11
+      realpath \
12
+      python3 \
13
+      python3-dev \
14
+      python3-pip \
15
+      build-essential \
16
+      libxml2-dev \
17
+      libxslt1-dev \
18
+      python-lxml \
19
+      postgresql-server-dev-all \
20
+      postgresql \
21
+      postgresql-client \
22
+      uwsgi \
23
+      uwsgi-plugin-python3 \
24
+      postgresql-server-dev-all \
25
+      postgresql \
26
+      postgresql-client \
27
+      mysql-server \
28
+      mysql-client \
29
+      libmysqlclient-dev \
30
+      sqlite3 \
31
+      default-jdk
32
+
33
+# Ensure UTF-8
34
+RUN locale-gen en_US.UTF-8 en_us \
35
+    && dpkg-reconfigure locales \
36
+    && locale-gen C.UTF-8 \
37
+    && /usr/sbin/update-locale LANG=C.UTF-8
38
+ENV LANG C.UTF-8
39
+ENV LANGUAGE C.UTF-8
40
+ENV LC_ALL C.UTF-8
41
+
42
+# Download and install Tracim
43
+RUN git clone https://github.com/tracim/tracim.git \
44
+     && cd /tracim/tracim \
45
+     && python3 setup.py develop \
46
+     && cd /tracim \
47
+     && pip3 install -r install/requirements.txt \
48
+     && pip3 install https://launchpad.net/oursql/py3k/py3k-0.9.4/+download/oursql-0.9.4.zip
49
+
50
+# Copy needed files
51
+COPY entrypoint.sh /tracim/entrypoint.sh
52
+
53
+# Set the default entry point
54
+CMD ["/tracim/entrypoint.sh"]

+ 52 - 0
docker/Debian_Tests/entrypoint.sh View File

@@ -0,0 +1,52 @@
1
+#!/usr/bin/env bash
2
+
3
+#
4
+# ENVIRONMENT VARIABLES ARE:
5
+#
6
+# * DATABASE_TYPE (values: postgresql, mysql, sqlite)
7
+#
8
+
9
+# Ensure DATABASE_TYPE is set
10
+if ! [ -n "$DATABASE_TYPE" ]; then
11
+    echo "You must set DATABASE_TYPE environment variable"
12
+    exit 1
13
+fi
14
+
15
+# Ensure DATABASE_TYPE value
16
+case "$DATABASE_TYPE" in
17
+    postgresql|mysql|sqlite) ;;
18
+    *) echo "DATABASE_TYPE environment variable must be one of these: \
19
+postgresql, mysql, sqlite" ; exit 1 ;;
20
+esac
21
+
22
+# Prepare config files
23
+cp /tracim/tracim/development.ini.base /tracim/tracim/development.ini
24
+cp /tracim/tracim/wsgidav.conf.sample /tracim/tracim/wsgidav.conf
25
+
26
+# PostgreSQL case
27
+if [ "$DATABASE_TYPE" = postgresql ] ; then
28
+    # TODO: We need to increase max_connections, why ? Tracim tests don't closes connections ?
29
+    sed -i "s/\(max_connections *= *\).*/\max_connections = 300/" /etc/postgresql/9.4/main/postgresql.conf
30
+    service postgresql start
31
+    su - postgres -s /bin/bash -c "psql -c \"CREATE DATABASE tracim;\""
32
+    su - postgres -s /bin/bash -c "psql -c \"ALTER USER postgres WITH PASSWORD 'dummy';\""
33
+    sed -i "s/\(sqlalchemy.url *= *\).*/\sqlalchemy.url = postgresql:\/\/postgres:dummy@127.0.0.1:5432\/tracim?client_encoding=utf8/" /tracim/tracim/test.ini
34
+    sed -i "s/\(sqlalchemy.url *= *\).*/\sqlalchemy.url = postgresql:\/\/postgres:dummy@127.0.0.1:5432\/tracim?client_encoding=utf8/" /tracim/tracim/development.ini
35
+fi
36
+
37
+# MySQL case
38
+if [ "$DATABASE_TYPE" = mysql ] ; then
39
+    service mysql start
40
+    mysql -e 'CREATE DATABASE tracim;'
41
+    sed -i "s/\(sqlalchemy.url *= *\).*/\sqlalchemy.url = mysql+oursql:\/\/root@localhost\/tracim/" /tracim/tracim/test.ini
42
+    sed -i "s/\(sqlalchemy.url *= *\).*/\sqlalchemy.url = mysql+oursql:\/\/root@localhost\/tracim/" /tracim/tracim/development.ini
43
+fi
44
+
45
+# SQLite case
46
+if [ "$DATABASE_TYPE" = sqlite ] ; then
47
+    sed -i "s/\(sqlalchemy.url *= *\).*/\sqlalchemy.url = sqlite:\/\/\/tracim.sqlite/" /tracim/tracim/test.ini
48
+    sed -i "s/\(sqlalchemy.url *= *\).*/\sqlalchemy.url = sqlite:\/\/\/tracim.sqlite/" /tracim/tracim/development.ini
49
+fi
50
+
51
+# Run tests
52
+cd /tracim/tracim && nosetests -c /tracim/tracim/test.ini -v

docker/Debian_Uwsgi_PostgreSQL/Dockerfile → docker/Debian_Uwsgi/Dockerfile View File

@@ -1,7 +1,7 @@
1 1
 FROM debian:jessie
2 2
 MAINTAINER contact@algoo.fr
3 3
 
4
-# TODO: See GOOD PRATICE (remove apt lists, etc)
4
+# TODO: See GOOD PRATICE (remove apt lists, cache, etc)
5 5
 
6 6
 # Install required packages
7 7
 RUN apt-get update -q \
@@ -41,10 +41,9 @@ RUN git clone https://github.com/tracim/tracim.git \
41 41
 # Prepare volumes
42 42
 RUN mkdir /etc/tracim
43 43
 VOLUME ["/etc/tracim"]
44
-VOLUME  ["/etc/postgresql", "/var/log/postgresql", "/var/lib/postgresql"]
45 44
 
46 45
 # Copy needed files
47
-COPY uwsgi.ini /tracim/tracim/uwsgi.ini
46
+COPY uwsgi.ini /tracim/tracim/uwsgi.ini.template
48 47
 COPY wsgi.py /tracim/tracim/wsgi.py
49 48
 COPY entrypoint.sh /tracim/entrypoint.sh
50 49
 

+ 19 - 0
docker/Debian_Uwsgi/check_env_vars.sh View File

@@ -0,0 +1,19 @@
1
+#!/usr/bin/env bash
2
+
3
+# Ensure DATABASE_TYPE is set
4
+if ! [ -n "$DATABASE_TYPE" ]; then
5
+    echo "You must set DATABASE_TYPE environment variable"
6
+    exit 1
7
+fi
8
+
9
+# Ensure DATABASE_TYPE value
10
+case "$DATABASE_TYPE" in
11
+    postgresql|mysql|sqlite) ;;
12
+    *) echo "DATABASE_TYPE environment variable must be one of these: \
13
+postgresql, mysql, sqlite" ;;
14
+esac
15
+
16
+# MySQL case
17
+if [ "$DATABASE_TYPE" = mysql ] ; then
18
+    #
19
+fi

docker/Debian_Uwsgi_PostgreSQL/entrypoint.sh → docker/Debian_Uwsgi/entrypoint.sh View File

@@ -6,12 +6,38 @@
6 6
 # TODO: Fichiers de config link ls -s dans un dossier pour VOLUME
7 7
 # TODO: README QQCH pour les ports ? 80, 3060 et 5333
8 8
 # TODO: generate cookie secrent (if not yet done)
9
+# TODO: run uwsgi as other user
10
+
11
+#
12
+# ENVIRONMENT VARIABLES ARE:
13
+#
14
+# * DATABASE_TYPE (values: postgresql, mysql, sqlite)
15
+# * DATABASE_USER
16
+# * DATABASE PASSWORD
17
+# * DATABASE_HOST
18
+# * DATABASE_NAME
19
+#
20
+
21
+# Check environment variables
22
+./check_env_vars.sh
23
+
24
+
25
+
26
+
27
+# MySQL case: engine is mysql+oursql
28
+if [ "$DATABASE_TYPE" = mysql ] ; then
29
+    DATABASE_TYPE=mysql+oursql
30
+fi
31
+
32
+# Script preparation
33
+FRESH_INSTALL=false
9 34
 
10 35
 # Start PostgreSQL
11
-service postgresql start
36
+service postgresql start  # Broken if volume empty ... ???
12 37
 
13 38
 # Init database if needed
14 39
 if ! [ "$( su - postgres -s /bin/bash -c "psql -tAc \"SELECT 1 FROM pg_database WHERE datname='tracim'\"" )" = '1' ]; then
40
+    FRESH_INSTALL=true
15 41
     su - postgres -s /bin/bash -c "psql -c \"CREATE DATABASE tracim;\""
16 42
     su - postgres -s /bin/bash -c "psql -c \"CREATE USER tracim WITH PASSWORD 'tracim';\""
17 43
     su - postgres -s /bin/bash -c "psql -c \"GRANT ALL PRIVILEGES ON DATABASE tracim TO tracim;\""
@@ -31,12 +57,18 @@ ln -s /etc/tracim/wsgidav.conf /tracim/tracim/wsgidav.conf
31 57
 
32 58
 # Create uwsgi file if no exist
33 59
 if [ ! -f /etc/tracim/uwsgi.ini ]; then
34
-    cp /tracim/tracim/uwsgi.ini /etc/tracim/uwsgi.ini
60
+    cp /tracim/tracim/uwsgi.ini.template /etc/tracim/uwsgi.ini
35 61
 fi
36 62
 
37 63
 # Update config with ENV
38 64
 # TODO Manage other ENV vars
39 65
 sed -i "s/\(sqlalchemy.url *= *\).*/\1postgresql:\/\/tracim:tracim@127.0.0.1:5432\/tracim?client_encoding=utf8/" /etc/tracim/config.ini
40 66
 
67
+# Initialize database if it is a fresh install
68
+if [ "$FRESH_INSTALL" = true ] ; then
69
+    echo "Init tracim database"
70
+    cd /tracim/tracim/ && gearbox setup-app -c config.ini
71
+fi
72
+
41 73
 # Start with uwsgi
42 74
 uwsgi --http-socket 0.0.0.0:80 /etc/tracim/uwsgi.ini

docker/Debian_Uwsgi_PostgreSQL/uwsgi.ini → docker/Debian_Uwsgi/uwsgi.ini View File


docker/Debian_Uwsgi_PostgreSQL/wsgi.py → docker/Debian_Uwsgi/wsgi.py View File


+ 0 - 4
docker/Debian_Uwsgi_PostgreSQL/default_locale View File

@@ -1,4 +0,0 @@
1
-LC_ALL=en_US.UTF8
2
-LANG=en_US.UTF8
3
-LC_CTYPE=en_US.UTF8
4
-LC_COLLATE=en_US.UTF8

+ 21 - 0
docker/README.md View File

@@ -0,0 +1,21 @@
1
+# How to use Tracim docker images
2
+
3
+## For test execution
4
+
5
+### Build image
6
+
7
+    docker build -t tracim:tests docker/Debian_Tests
8
+
9
+### Run tests
10
+      
11
+With SQLite
12
+
13
+    docker run -e DATABASE_TYPE=sqlite tracim:tests
14
+
15
+With MySQL
16
+
17
+    docker run -e DATABASE_TYPE=mysql tracim:tests
18
+    
19
+With PostgreSQL
20
+
21
+    docker run -e DATABASE_TYPE=postgresql tracim:tests

+ 3 - 3
tracim/test.ini View File

@@ -20,7 +20,7 @@ host = 127.0.0.1
20 20
 port = 8080
21 21
 
22 22
 [app:main]
23
-sqlalchemy.url = sqlite:///tracim_test.sqlite
23
+sqlalchemy.url =  postgresql://postgres:dummy@127.0.0.1:5432/tracim_test?client_encoding=utf8
24 24
 use = config:development.ini
25 25
 
26 26
 [app:main_without_authn]
@@ -28,7 +28,7 @@ use = main
28 28
 skip_authentication = True
29 29
 
30 30
 [app:ldap]
31
-sqlalchemy.url = sqlite:///tracim_test.sqlite
31
+sqlalchemy.url =  postgresql://postgres:dummy@127.0.0.1:5432/tracim_test?client_encoding=utf8
32 32
 auth_type = ldap
33 33
 ldap_url = ldap://localhost:3333
34 34
 ldap_base_dn = dc=directory,dc=fsf,dc=org
@@ -41,7 +41,7 @@ ldap_group_enabled = False
41 41
 use = config:development.ini
42 42
 
43 43
 [app:radicale]
44
-sqlalchemy.url = sqlite:///tracim_test.sqlite
44
+sqlalchemy.url =  postgresql://postgres:dummy@127.0.0.1:5432/tracim_test?client_encoding=utf8
45 45
 
46 46
 use = config:development.ini
47 47
 

+ 1 - 0
tracim/tracim/config/app_cfg.py View File

@@ -102,6 +102,7 @@ def start_daemons(manager: DaemonsManager):
102 102
     if 'disable_daemons' in config and config['disable_daemons']:
103 103
         return
104 104
 
105
+    return
105 106
     manager.run('radicale', RadicaleDaemon)
106 107
     manager.run('webdav', WsgiDavDaemon)
107 108