diff --git a/Dockerfile b/Dockerfile deleted file mode 100644 index 9fd21d972..000000000 --- a/Dockerfile +++ /dev/null @@ -1,6 +0,0 @@ -FROM python:2.7.10 -ADD . /code -WORKDIR /code -RUN apt-get update && apt-get install -y mysql-client node-less gettext && \ - pip install --upgrade pip==8.0.3 -RUN pip install --require-hashes --no-deps -r requirements/dev.txt diff --git a/bin/run-dev.sh b/bin/run-dev.sh new file mode 100755 index 000000000..884a73ad6 --- /dev/null +++ b/bin/run-dev.sh @@ -0,0 +1,4 @@ +#!/bin/sh + +python manage.py migrate +python manage.py runserver 0.0.0.0:8000 diff --git a/bin/run-prod.sh b/bin/run-prod.sh new file mode 100755 index 000000000..d84449ee7 --- /dev/null +++ b/bin/run-prod.sh @@ -0,0 +1,6 @@ +#!/bin/sh + +python manage.py migrate +python manage.py collectstatic --noinput +python manage.py compress --engine jinja2 --extension=.jinja +gunicorn mozillians.wsgi:application -b 0.0.0.0:${PORT:-8000} --log-file - diff --git a/docker-compose.yml b/docker-compose.yml index 38597d8ab..6abd36118 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -1,50 +1,57 @@ -db: - image: mysql:5.5 - command: mysqld --character-set-server=utf8 --collation-server=utf8_unicode_ci --max_allowed_packet=3M - environment: - - MYSQL_DATABASE=mozillians - - MYSQL_USER=mozillians - - MYSQL_PASSWORD=mozillians - - MYSQL_ROOT_PASSWORD=root -es: - image: barnybug/elasticsearch:1.2.1 -memcached: - image: memcached -broker: - image: rabbitmq:3-management - ports: - - "15672:15672" -web: - build: . - ports: - - "8000:8000" - volumes: - - .:/code - links: - - db - - es - - memcached - - broker - command: bash -c "python manage.py migrate --noinput && python manage.py runserver 0.0.0.0:8000" -celery: - build: . - volumes: - - .:/code - links: - - db - - es - - broker - - memcached - command: celery -A mozillians worker -B -l INFO - environment: - - C_FORCE_ROOT=true -flower: - build: . - volumes: - - .:/code - links: - - db - - broker - ports: - - "5555:5555" - command: flower -A mozillians --address=0.0.0.0 --port=5555 +version: '2' +services: + db: + image: mysql:5.5 + command: mysqld --character-set-server=utf8 --collation-server=utf8_unicode_ci --max_allowed_packet=3M + environment: + - MYSQL_DATABASE=mozillians + - MYSQL_USER=mozillians + - MYSQL_PASSWORD=mozillians + - MYSQL_ROOT_PASSWORD=root + es: + image: elasticsearch:1.7 + memcached: + image: memcached + broker: + image: rabbitmq:3-management + ports: + - "15672:15672" + web: + build: + context: . + dockerfile: docker/dev + ports: + - "8000:8000" + volumes: + - .:/code + links: + - db + - es + - memcached + - broker + celery: + build: + context: . + dockerfile: docker/dev + volumes: + - .:/code + links: + - db + - es + - broker + - memcached + command: celery -A mozillians worker -B -l INFO + environment: + - C_FORCE_ROOT=true + flower: + build: + context: . + dockerfile: docker/dev + volumes: + - .:/code + links: + - db + - broker + ports: + - "5555:5555" + command: flower -A mozillians --address=0.0.0.0 --port=5555 diff --git a/docker/dev b/docker/dev new file mode 100644 index 000000000..dde55f631 --- /dev/null +++ b/docker/dev @@ -0,0 +1,14 @@ +FROM python:2.7-slim + +EXPOSE 8000 +WORKDIR /code +CMD ["./bin/run-dev.sh"] + +RUN apt-get update && \ + apt-get install -y --no-install-recommends \ + build-essential libxml2-dev libxslt-dev \ + mysql-client libmysqlclient-dev node-less gettext node-less && \ + rm -rf /var/lib/apt/lists/* + +COPY requirements /code/requirements/ +RUN pip install --require-hashes --no-deps -r requirements/dev.txt diff --git a/docker/prod b/docker/prod new file mode 100644 index 000000000..a80964abd --- /dev/null +++ b/docker/prod @@ -0,0 +1,19 @@ +FROM python:2.7-slim + +EXPOSE 8000 +WORKDIR /code +CMD ["./bin/run-prod.sh"] + +RUN adduser --uid 431 --disabled-password --disabled-login --gecos 'webdev' --no-create-home webdev +RUN apt-get update && \ + apt-get install -y --no-install-recommends \ + build-essential libxml2-dev libxslt-dev \ + mysql-client libmysqlclient-dev node-less gettext node-less && \ + rm -rf /var/lib/apt/lists/* + +COPY requirements /code/requirements/ +RUN pip install --require-hashes --no-deps -r requirements/prod.txt +COPY . /code + +RUN chown webdev.webdev -R . +USER webdev diff --git a/mozillians/wsgi.py b/mozillians/wsgi.py new file mode 120000 index 000000000..301b2d694 --- /dev/null +++ b/mozillians/wsgi.py @@ -0,0 +1 @@ +../wsgi/playdoh.wsgi \ No newline at end of file diff --git a/requirements/prod.txt b/requirements/prod.txt index 746accad8..312643a26 100644 --- a/requirements/prod.txt +++ b/requirements/prod.txt @@ -335,3 +335,6 @@ progressbar2==3.12.0 \ python-utils==2.0.1 \ --hash=sha256:985f44edf24918d87531c339f8b126ce2d303cbbc9a4c7fc4dc81ac0726079ff \ --hash=sha256:670f9b992ebfc005329fd9740408f2a704e595d64c8f8da83f7977618dba4acc +gunicorn==19.7.1 \ + --hash=sha256:75af03c99389535f218cc596c7de74df4763803f7b63eb09d77e92b3956b36c6 \ + --hash=sha256:eee1169f0ca667be05db3351a0960765620dad53f53434262ff8901b68a1b622 diff --git a/wsgi/playdoh.wsgi b/wsgi/playdoh.wsgi index ebebe4341..4803dd7a3 100644 --- a/wsgi/playdoh.wsgi +++ b/wsgi/playdoh.wsgi @@ -20,7 +20,7 @@ os.environ.setdefault('CELERY_LOADER', 'django') wsgidir = os.path.dirname(__file__) site.addsitedir(os.path.abspath(os.path.join(wsgidir, '../'))) -from django.core.wsgi import get_wsgi_application +from django.core.wsgi import get_wsgi_application # noqa application = get_wsgi_application() if newrelic: