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
       postgresql \
20
       postgresql \
21
       postgresql-client \
21
       postgresql-client \
22
       uwsgi \
22
       uwsgi \
23
-      uwsgi-plugin-python3
23
+      uwsgi-plugin-python3 \
24
+      libmysqld-dev
24
 
25
 
25
 # Ensure UTF-8
26
 # Ensure UTF-8
26
 RUN locale-gen en_US.UTF-8 en_us \
27
 RUN locale-gen en_US.UTF-8 en_us \
36
      && cd /tracim/tracim \
37
      && cd /tracim/tracim \
37
      && python3 setup.py develop \
38
      && python3 setup.py develop \
38
      && cd /tracim \
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
 # Prepare volumes
44
 # Prepare volumes
42
 RUN mkdir /etc/tracim
45
 RUN mkdir /etc/tracim
45
 # Copy needed files
48
 # Copy needed files
46
 COPY uwsgi.ini /tracim/tracim/uwsgi.ini.template
49
 COPY uwsgi.ini /tracim/tracim/uwsgi.ini.template
47
 COPY wsgi.py /tracim/tracim/wsgi.py
50
 COPY wsgi.py /tracim/tracim/wsgi.py
51
+COPY check_env_vars.sh /tracim/check_env_vars.sh
48
 COPY entrypoint.sh /tracim/entrypoint.sh
52
 COPY entrypoint.sh /tracim/entrypoint.sh
49
 
53
 
50
 # Set the default entry point
54
 # Set the default entry point

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

6
     exit 1
6
     exit 1
7
 fi
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
 # Ensure DATABASE_TYPE value
33
 # Ensure DATABASE_TYPE value
10
 case "$DATABASE_TYPE" in
34
 case "$DATABASE_TYPE" in
11
     postgresql|mysql|sqlite) ;;
35
     postgresql|mysql|sqlite) ;;
12
     *) echo "DATABASE_TYPE environment variable must be one of these: \
36
     *) echo "DATABASE_TYPE environment variable must be one of these: \
13
 postgresql, mysql, sqlite" ;;
37
 postgresql, mysql, sqlite" ;;
14
 esac
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
 #
13
 #
14
 # * DATABASE_TYPE (values: postgresql, mysql, sqlite)
14
 # * DATABASE_TYPE (values: postgresql, mysql, sqlite)
15
 # * DATABASE_USER
15
 # * DATABASE_USER
16
-# * DATABASE PASSWORD
16
+# * DATABASE_PASSWORD
17
 # * DATABASE_HOST
17
 # * DATABASE_HOST
18
+# * DATABASE_PORT
18
 # * DATABASE_NAME
19
 # * DATABASE_NAME
19
 #
20
 #
20
 
21
 
21
 # Check environment variables
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
 # Create config.ini file if no exist
25
 # Create config.ini file if no exist
47
 if [ ! -f /etc/tracim/config.ini ]; then
26
 if [ ! -f /etc/tracim/config.ini ]; then
60
     cp /tracim/tracim/uwsgi.ini.template /etc/tracim/uwsgi.ini
39
     cp /tracim/tracim/uwsgi.ini.template /etc/tracim/uwsgi.ini
61
 fi
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
 # Initialize database if it is a fresh install
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
     cd /tracim/tracim/ && gearbox setup-app -c config.ini
73
     cd /tracim/tracim/ && gearbox setup-app -c config.ini
71
 fi
74
 fi
72
 
75