From 6e7cd675e6f42032950e47cd7cf96a3400e55ae5 Mon Sep 17 00:00:00 2001 From: Guillaume Pellerin Date: Thu, 14 Jan 2016 23:45:34 +0100 Subject: [PATCH] optimize docker composition, fix various env bugs --- .gitignore | 7 +----- Dockerfile | 13 +++++------ app/deploy/start_app.sh | 5 ++++- app/sandbox/settings.py | 36 +++++++++++++++---------------- app/sandbox/tm-docker-compose.env | 19 ++++++++++++++++ docker-compose.yml | 35 +++++++++++++++--------------- setup.py | 2 +- telemeta/pages | 2 +- 8 files changed, 66 insertions(+), 53 deletions(-) create mode 100644 app/sandbox/tm-docker-compose.env diff --git a/.gitignore b/.gitignore index a3908b6d..ce93772b 100644 --- a/.gitignore +++ b/.gitignore @@ -10,6 +10,7 @@ eggs parts bin var +data sdist develop-eggs .installed.cfg @@ -27,9 +28,3 @@ pip-log.txt #Mr Developer .mr.developer.cfg - -#app -media -static -var - diff --git a/Dockerfile b/Dockerfile index 9ae01c2d..ef476e7a 100644 --- a/Dockerfile +++ b/Dockerfile @@ -14,18 +14,15 @@ # See the License for the specific language governing permissions and # limitations under the License. -FROM parisson/timeside:latest-dev +FROM timeside_app:latest MAINTAINER Guillaume Pellerin , Thomas fillon -RUN mkdir /srv/app -RUN mkdir /srv/src -RUN mkdir /srv/src/app - -COPY . /srv/src/app -WORKDIR /srv/src/app +RUN mkdir /srv/src/telemeta +COPY . /srv/src/telemeta +WORKDIR /srv/src/telemeta RUN pip install -r requirements.txt RUN pip install -r requirements-dev.txt --src /srv/src -WORKDIR /srv/app +WORKDIR /srv/app EXPOSE 8000 diff --git a/app/deploy/start_app.sh b/app/deploy/start_app.sh index d6f8de52..6b61ddf5 100644 --- a/app/deploy/start_app.sh +++ b/app/deploy/start_app.sh @@ -5,6 +5,9 @@ app='/srv/app' manage=$app'/manage.py' wsgi=$app'/wsgi.py' static='/srv/static/' +media='/srv/media/' + +chown www-data:www-data $media # uwsgi params port=8000 @@ -15,7 +18,7 @@ uid='www-data' gid='www-data' # stating apps -pip install redis +# pip install redis # waiting for other services sh $app/deploy/wait.sh diff --git a/app/sandbox/settings.py b/app/sandbox/settings.py index d86be712..040367e6 100644 --- a/app/sandbox/settings.py +++ b/app/sandbox/settings.py @@ -4,11 +4,19 @@ import os, sys from django.core.urlresolvers import reverse_lazy, reverse -sys.dont_write_bytecode = True +import environ + +# set default values and casting +env = environ.Env(DEBUG=(bool, False), + CELERY_ALWAYS_EAGER=(bool, False), + ) -DEBUG = True +# Django settings for server project. +DEBUG = env('DEBUG') # False if not in os.environ TEMPLATE_DEBUG = DEBUG +sys.dont_write_bytecode = True + ALLOWED_HOSTS = ['*'] ADMINS = ( @@ -23,18 +31,10 @@ PROJECT_ROOT = '/srv/app/' DATABASES = { 'default': { - # SQLite config - # 'ENGINE': 'django.db.backends.sqlite', # Add 'postgresql_psycopg2', 'mysql', 'sqlite3' or 'oracle'. - # 'NAME': os.path.join(PROJECT_ROOT, 'telemeta.sql'), # Or path to database file if using sqlite3. - # 'OPTIONS': { - # 'timeout': 60, - # } - - # MySQL config - 'ENGINE': 'django.db.backends.mysql', # Add 'postgresql_psycopg2', 'mysql', 'sqlite3' or 'oracle'. - 'USER': os.environ.get('DB_ENV_MYSQL_USER'), # Not used with sqlite3. - 'PASSWORD': os.environ.get('DB_ENV_MYSQL_PASSWORD'), # Not used with sqlite3. - 'NAME': os.environ.get('DB_ENV_MYSQL_DATABASE'), + 'ENGINE': env('ENGINE'), # Add 'postgresql_psycopg2', 'mysql', 'sqlite3' or 'oracle'. + 'USER': env('MYSQL_USER'), # Not used with sqlite3. + 'PASSWORD': env('MYSQL_PASSWORD'), # Not used with sqlite3. + 'NAME': env('MYSQL_DATABASE'), 'HOST': 'db', # Set to empty string for localhost. Not used with sqlite3. 'PORT': '3306', # Set to empty string for default. Not used with sqlite3. } @@ -284,16 +284,16 @@ LOGGING = { } } -from celery_app import app -# replace rabbitmq by localhost if you start your app outside docker-compose -# BROKER_URL = 'amqp://guest:guest@broker//' -BROKER_URL = 'redis://broker:6379/0' +BROKER_URL = env('BROKER_URL') + CELERY_IMPORTS = ("timeside.server.tasks",) CELERY_RESULT_BACKEND = 'djcelery.backends.database:DatabaseBackend' CELERY_TASK_SERIALIZER = 'json' CELERY_RESULT_SERIALIZER = 'json' CELERY_ACCEPT_CONTENT = ['application/json'] +from celery_app import app + HAYSTACK_CONNECTIONS = { 'default': { 'ENGINE': 'haystack.backends.elasticsearch_backend.ElasticsearchSearchEngine', diff --git a/app/sandbox/tm-docker-compose.env b/app/sandbox/tm-docker-compose.env new file mode 100644 index 00000000..465d6beb --- /dev/null +++ b/app/sandbox/tm-docker-compose.env @@ -0,0 +1,19 @@ +# -- MYSQL DATABASE + +ENGINE=django.db.backends.mysql +MYSQL_ROOT_PASSWORD=mysecretpassword +MYSQL_DATABASE=telemeta +MYSQL_USER=telemeta +MYSQL_PASSWORD=mysecretpassword + +# -- DJANGO + +DEBUG=True + +SECRET_KEY=ghv8us2587n97dq&w$c((o5rj_$-9#d-8j#57y_a9og8wux1h7 + +# replace broker by localhost if you start your app outside docker-compose +BROKER_URL=redis://broker:6379/0 + +# If this is True, all tasks will be executed locally by blocking until the task returns. +CELERY_ALWAYS_EAGER=False diff --git a/docker-compose.yml b/docker-compose.yml index 3499c8de..623f5088 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -22,26 +22,23 @@ # Thomas Fillon -media: +data: image: debian:jessie volumes: - - ./media/:/srv/media - - ./static/:/srv/static - - ./backup/:/srv/backup + - ./data/media/:/srv/media + - ./data/static/:/srv/static + - ./data/backup/:/srv/backup command: "true" db: image: mysql volumes: - - ./app/deploy/my.cnf:/etc/mysql/my.cnf - - ./var/lib/mysql/:/var/lib/mysql + - ./data/var/lib/mysql/:/var/lib/mysql + - ./data/var/log/mysql/:/var/log/mysql volumes_from: - - media - environment: - - MYSQL_ROOT_PASSWORD=ItCydyatzix8 - - MYSQL_DATABASE=telemeta - - MYSQL_USER=telemeta - - MYSQL_PASSWORD=iuvIlkyisFit2 + - data + env_file: + - app/sandbox/tm-docker-compose.env broker: image: redis @@ -53,14 +50,14 @@ app: build: . volumes: - ./app/:/srv/app - - ./telemeta/:/srv/src/app/telemeta + - ./telemeta/:/srv/src/telemeta/telemeta volumes_from: - - media + - data + env_file: + - app/sandbox/tm-docker-compose.env command: /bin/sh deploy/start_app.sh ports: - "9001:9000" - expose: - - "8000" links: - broker - db @@ -70,6 +67,8 @@ worker: build: . volumes_from: - app + env_file: + - app/sandbox/tm-docker-compose.env command: /bin/sh deploy/celery_app.sh links: - broker @@ -78,12 +77,12 @@ worker: nginx: image: nginx ports: - - "8000:80" + - "8001:80" volumes: - ./app/deploy/nginx-app.conf:/etc/nginx/conf.d/default.conf - ./var/log/nginx/:/var/log/nginx volumes_from: - - media + - data links: - app - phpmyadmin diff --git a/setup.py b/setup.py index 5f33c1d8..7fa75c1b 100644 --- a/setup.py +++ b/setup.py @@ -71,8 +71,8 @@ setup( 'pyyaml', 'python-ebml', 'zipstream', - 'django-haystack', 'elasticsearch==1.6.0', + 'django-haystack', 'ebooklib', ], tests_require=['pytest-django', 'pytest-cov', 'factory-boy'], diff --git a/telemeta/pages b/telemeta/pages index f8324093..4fcb6022 160000 --- a/telemeta/pages +++ b/telemeta/pages @@ -1 +1 @@ -Subproject commit f8324093174d077b674ac2c52eb0db6eaf815ab5 +Subproject commit 4fcb6022f8a1cf0780fc526737e84b8e690c1f88 -- 2.39.5