Browse Source

Working docker image for tests

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

+ 54 - 0
docker/Debian_Tests/Dockerfile View File

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

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
 FROM debian:jessie
1
 FROM debian:jessie
2
 MAINTAINER contact@algoo.fr
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
 # Install required packages
6
 # Install required packages
7
 RUN apt-get update -q \
7
 RUN apt-get update -q \
41
 # Prepare volumes
41
 # Prepare volumes
42
 RUN mkdir /etc/tracim
42
 RUN mkdir /etc/tracim
43
 VOLUME ["/etc/tracim"]
43
 VOLUME ["/etc/tracim"]
44
-VOLUME  ["/etc/postgresql", "/var/log/postgresql", "/var/lib/postgresql"]
45
 
44
 
46
 # Copy needed files
45
 # Copy needed files
47
-COPY uwsgi.ini /tracim/tracim/uwsgi.ini
46
+COPY uwsgi.ini /tracim/tracim/uwsgi.ini.template
48
 COPY wsgi.py /tracim/tracim/wsgi.py
47
 COPY wsgi.py /tracim/tracim/wsgi.py
49
 COPY entrypoint.sh /tracim/entrypoint.sh
48
 COPY entrypoint.sh /tracim/entrypoint.sh
50
 
49
 

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

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
 # TODO: Fichiers de config link ls -s dans un dossier pour VOLUME
6
 # TODO: Fichiers de config link ls -s dans un dossier pour VOLUME
7
 # TODO: README QQCH pour les ports ? 80, 3060 et 5333
7
 # TODO: README QQCH pour les ports ? 80, 3060 et 5333
8
 # TODO: generate cookie secrent (if not yet done)
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
 # Start PostgreSQL
35
 # Start PostgreSQL
11
-service postgresql start
36
+service postgresql start  # Broken if volume empty ... ???
12
 
37
 
13
 # Init database if needed
38
 # Init database if needed
14
 if ! [ "$( su - postgres -s /bin/bash -c "psql -tAc \"SELECT 1 FROM pg_database WHERE datname='tracim'\"" )" = '1' ]; then
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
     su - postgres -s /bin/bash -c "psql -c \"CREATE DATABASE tracim;\""
41
     su - postgres -s /bin/bash -c "psql -c \"CREATE DATABASE tracim;\""
16
     su - postgres -s /bin/bash -c "psql -c \"CREATE USER tracim WITH PASSWORD 'tracim';\""
42
     su - postgres -s /bin/bash -c "psql -c \"CREATE USER tracim WITH PASSWORD 'tracim';\""
17
     su - postgres -s /bin/bash -c "psql -c \"GRANT ALL PRIVILEGES ON DATABASE tracim TO tracim;\""
43
     su - postgres -s /bin/bash -c "psql -c \"GRANT ALL PRIVILEGES ON DATABASE tracim TO tracim;\""
31
 
57
 
32
 # Create uwsgi file if no exist
58
 # Create uwsgi file if no exist
33
 if [ ! -f /etc/tracim/uwsgi.ini ]; then
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
 fi
61
 fi
36
 
62
 
37
 # Update config with ENV
63
 # Update config with ENV
38
 # TODO Manage other ENV vars
64
 # TODO Manage other ENV vars
39
 sed -i "s/\(sqlalchemy.url *= *\).*/\1postgresql:\/\/tracim:tracim@127.0.0.1:5432\/tracim?client_encoding=utf8/" /etc/tracim/config.ini
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
 # Start with uwsgi
73
 # Start with uwsgi
42
 uwsgi --http-socket 0.0.0.0:80 /etc/tracim/uwsgi.ini
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
-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

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
 port = 8080
20
 port = 8080
21
 
21
 
22
 [app:main]
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
 use = config:development.ini
24
 use = config:development.ini
25
 
25
 
26
 [app:main_without_authn]
26
 [app:main_without_authn]
28
 skip_authentication = True
28
 skip_authentication = True
29
 
29
 
30
 [app:ldap]
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
 auth_type = ldap
32
 auth_type = ldap
33
 ldap_url = ldap://localhost:3333
33
 ldap_url = ldap://localhost:3333
34
 ldap_base_dn = dc=directory,dc=fsf,dc=org
34
 ldap_base_dn = dc=directory,dc=fsf,dc=org
41
 use = config:development.ini
41
 use = config:development.ini
42
 
42
 
43
 [app:radicale]
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
 use = config:development.ini
46
 use = config:development.ini
47
 
47
 

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

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