Browse Source

docker: std image working with pgsql

Bastien Sevajol (Algoo) 8 years ago
parent
commit
2282a7384e

+ 6 - 2
docker/Debian_Uwsgi/Dockerfile View File

@@ -20,7 +20,8 @@ RUN apt-get update -q \
20 20
       postgresql \
21 21
       postgresql-client \
22 22
       uwsgi \
23
-      uwsgi-plugin-python3
23
+      uwsgi-plugin-python3 \
24
+      libmysqld-dev
24 25
 
25 26
 # Ensure UTF-8
26 27
 RUN locale-gen en_US.UTF-8 en_us \
@@ -36,7 +37,9 @@ RUN git clone https://github.com/tracim/tracim.git \
36 37
      && cd /tracim/tracim \
37 38
      && python3 setup.py develop \
38 39
      && cd /tracim \
39
-     && pip3 install -r install/requirements.txt
40
+     && pip3 install -r install/requirements.txt\
41
+     && pip3 install https://launchpad.net/oursql/py3k/py3k-0.9.4/+download/oursql-0.9.4.zip \
42
+     && echo 20161216001
40 43
 
41 44
 # Prepare volumes
42 45
 RUN mkdir /etc/tracim
@@ -45,6 +48,7 @@ VOLUME ["/etc/tracim"]
45 48
 # Copy needed files
46 49
 COPY uwsgi.ini /tracim/tracim/uwsgi.ini.template
47 50
 COPY wsgi.py /tracim/tracim/wsgi.py
51
+COPY check_env_vars.sh /tracim/check_env_vars.sh
48 52
 COPY entrypoint.sh /tracim/entrypoint.sh
49 53
 
50 54
 # Set the default entry point

+ 24 - 5
docker/Debian_Uwsgi/check_env_vars.sh View File

@@ -6,14 +6,33 @@ if ! [ -n "$DATABASE_TYPE" ]; then
6 6
     exit 1
7 7
 fi
8 8
 
9
+# Ensure DATABASE_USER is set
10
+if ! [ -n "$DATABASE_USER" ]; then
11
+    echo "You must set DATABASE_USER environment variable"
12
+    exit 1
13
+fi
14
+
15
+# Ensure DATABASE_PASSWORD is set
16
+if ! [ -n "$DATABASE_PASSWORD" ]; then
17
+    echo "You must set DATABASE_PASSWORD environment variable"
18
+    exit 1
19
+fi
20
+
21
+# Ensure DATABASE_HOST is set
22
+if ! [ -n "$DATABASE_HOST" ]; then
23
+    echo "You must set DATABASE_HOST environment variable"
24
+    exit 1
25
+fi
26
+
27
+# Ensure DATABASE_NAME is set
28
+if ! [ -n "$DATABASE_NAME" ]; then
29
+    echo "You must set DATABASE_NAME environment variable"
30
+    exit 1
31
+fi
32
+
9 33
 # Ensure DATABASE_TYPE value
10 34
 case "$DATABASE_TYPE" in
11 35
     postgresql|mysql|sqlite) ;;
12 36
     *) echo "DATABASE_TYPE environment variable must be one of these: \
13 37
 postgresql, mysql, sqlite" ;;
14 38
 esac
15
-
16
-# MySQL case
17
-if [ "$DATABASE_TYPE" = mysql ] ; then
18
-    #
19
-fi

+ 32 - 29
docker/Debian_Uwsgi/entrypoint.sh View File

@@ -13,35 +13,14 @@
13 13
 #
14 14
 # * DATABASE_TYPE (values: postgresql, mysql, sqlite)
15 15
 # * DATABASE_USER
16
-# * DATABASE PASSWORD
16
+# * DATABASE_PASSWORD
17 17
 # * DATABASE_HOST
18
+# * DATABASE_PORT
18 19
 # * DATABASE_NAME
19 20
 #
20 21
 
21 22
 # 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
34
-
35
-# Start PostgreSQL
36
-service postgresql start  # Broken if volume empty ... ???
37
-
38
-# Init database if needed
39
-if ! [ "$( su - postgres -s /bin/bash -c "psql -tAc \"SELECT 1 FROM pg_database WHERE datname='tracim'\"" )" = '1' ]; then
40
-    FRESH_INSTALL=true
41
-    su - postgres -s /bin/bash -c "psql -c \"CREATE DATABASE tracim;\""
42
-    su - postgres -s /bin/bash -c "psql -c \"CREATE USER tracim WITH PASSWORD 'tracim';\""
43
-    su - postgres -s /bin/bash -c "psql -c \"GRANT ALL PRIVILEGES ON DATABASE tracim TO tracim;\""
44
-fi
23
+/tracim/check_env_vars.sh
45 24
 
46 25
 # Create config.ini file if no exist
47 26
 if [ ! -f /etc/tracim/config.ini ]; then
@@ -60,13 +39,37 @@ if [ ! -f /etc/tracim/uwsgi.ini ]; then
60 39
     cp /tracim/tracim/uwsgi.ini.template /etc/tracim/uwsgi.ini
61 40
 fi
62 41
 
63
-# Update config with ENV
64
-# TODO Manage other ENV vars
65
-sed -i "s/\(sqlalchemy.url *= *\).*/\1postgresql:\/\/tracim:tracim@127.0.0.1:5432\/tracim?client_encoding=utf8/" /etc/tracim/config.ini
42
+# MySQL case
43
+if [ "$DATABASE_TYPE" = mysql ] ; then
44
+    # Ensure DATABASE_PORT is set
45
+    if ! [ -n "$DATABASE_PORT" ]; then
46
+        DATABASE_PORT=3306
47
+    fi
48
+    # engine is mysql+oursql
49
+    DATABASE_TYPE=mysql+oursql
50
+fi
51
+
52
+# PostgreSQL case
53
+if [ "$DATABASE_TYPE" = postgresql ] ; then
54
+    # Ensure DATABASE_PORT is set
55
+    if ! [ -n "$DATABASE_PORT" ]; then
56
+        DATABASE_PORT=5432
57
+    fi
58
+    DATABASE_SUFFIX="?client_encoding=utf8"
59
+fi
60
+
61
+# Update sqlalchemy.url
62
+sed -i "s/\(sqlalchemy.url *= *\).*/\\sqlalchemy.url = $DATABASE_TYPE:\/\/$DATABASE_USER:$DATABASE_PASSWORD@$DATABASE_HOST:$DATABASE_PORT\/$DATABASE_NAME$DATABASE_SUFFIX/" /etc/tracim/config.ini
66 63
 
67 64
 # Initialize database if it is a fresh install
68
-if [ "$FRESH_INSTALL" = true ] ; then
69
-    echo "Init tracim database"
65
+if [ "$DATABASE_TYPE" = postgresql ] ; then
66
+    TEST_TABLE=$(PGPASSWORD="$DATABASE_PASSWORD" psql -U ${DATABASE_USER} -h ${DATABASE_HOST} -d ${DATABASE_NAME} -t -c "SELECT EXISTS (SELECT 1 FROM information_schema.tables WHERE table_schema = 'public' AND table_name = 'content' );")
67
+    if [ ${TEST_TABLE} = f ] ; then
68
+        INIT_DATABASE=true
69
+    fi
70
+fi
71
+
72
+if [ "$INIT_DATABASE" = true ] ; then
70 73
     cd /tracim/tracim/ && gearbox setup-app -c config.ini
71 74
 fi
72 75