Skip to content

Commit

Permalink
Merge 44f8071 into b0a7928
Browse files Browse the repository at this point in the history
  • Loading branch information
FedeG committed Sep 23, 2019
2 parents b0a7928 + 44f8071 commit d93c217
Show file tree
Hide file tree
Showing 107 changed files with 6,374 additions and 1,218 deletions.
1 change: 1 addition & 0 deletions .dockerignore
Original file line number Diff line number Diff line change
Expand Up @@ -82,3 +82,4 @@ docs/
eventol/front/node_modules/
eventol/front/eventol/static/manager/bower_components/
.vscode/
deploy/docker/db/postgres/
130 changes: 71 additions & 59 deletions Dockerfile
Original file line number Diff line number Diff line change
@@ -1,78 +1,99 @@
FROM python:3.7.3-alpine
#########################################
# frontend image
#########################################
FROM node:12.2.0-alpine as frontend

# Set environment variables
ENV APP_ROOT /usr/src/app
ENV APP_USER_NAME app
ENV APP_USER_UID 1000
ENV IS_ALPINE true
ENV NODE_VERSION 8.x
## Install system dependencies
RUN apk --update add --no-cache \
git gcc make autoconf automake musl-dev \
&& rm -rf /var/cache/apk/* /var/lib/apt/lists/* /tmp/* /var/tmp/*

# Install alpine dependencies
# Install bower and less
RUN npm install -g bower less

## Upgrade apk-tools
RUN apk add --upgrade --no-cache --repository http://dl-cdn.alpinelinux.org/alpine/edge/main apk-tools
# Set working directory
WORKDIR /app
RUN chown -R node:node /app

## Install system dependencies
RUN apk --update add --no-cache --repository http://dl-cdn.alpinelinux.org/alpine/edge/main \
bash wget dpkg-dev libffi nodejs nodejs-npm git gcc musl-dev gettext \
postgresql-dev libffi-dev py3-setuptools jpeg-dev make autoconf automake \
zlib-dev freetype-dev lcms2-dev openjpeg-dev libxslt-dev alpine-sdk \
&& rm -rf /var/cache/apk/* /var/lib/apt/lists/* /tmp/* /var/tmp/*
# Set user
USER node

# Install yarn dependencies
COPY --chown=node:node ./eventol/front/package.json ./eventol/front/yarn.lock ./
RUN yarn install

# Install bower dependencies
COPY --chown=node:node ./eventol/front/bower.json ./eventol/front/.bowerrc ./
RUN bower install

# Build less files
COPY --chown=node:node ./eventol/front/eventol/static/manager/less/ ./eventol/static/manager/less/
RUN mkdir -p ./eventol/static/manager/css/
RUN lessc ./eventol/static/manager/less/eventol.less > ./eventol/static/manager/css/eventol.css
RUN lessc ./eventol/static/manager/less/eventol-bootstrap.less > ./eventol/static/manager/css/eventol-bootstrap.css

# Copy code
COPY --chown=node:node ./eventol/front/ .

# Build
RUN yarn build

## Install react dependencies
RUN npm install -g npm
RUN npm install -g yarn bower less
EXPOSE 3000

CMD ["tail", "-f", "/dev/null"]

#########################################
# build image
#########################################
FROM python:3.7.3-alpine as development

# Set environment variables
ENV APP_ROOT /usr/src/app/
ENV IS_ALPINE true
ENV DJANGO_CONFIGURATION=Prod

# Install system dependencies
RUN apk --update add --no-cache \
bash git gcc cairo-dev postgresql-dev libxslt-dev \
gettext musl-dev py3-setuptools jpeg-dev \
&& rm -rf /var/cache/apk/* /var/lib/apt/lists/* /tmp/* /var/tmp/*

## Install python dependencies
RUN pip3 install --no-cache-dir cffi cairocffi psycopg2
RUN apk --update add --no-cache cairo-dev \
&& rm -rf /var/cache/apk/* /var/lib/apt/lists/* /tmp/* /var/tmp/*

# Create user
RUN adduser -D -h ${APP_ROOT} \
-s /bin/bash \
-u ${APP_USER_UID} \
${APP_USER_NAME}

# Create folders for deploy
RUN mkdir -p ${APP_ROOT}
RUN mkdir -p /var/log/eventol
RUN chown ${APP_USER_NAME}:root /var/log/eventol
WORKDIR ${APP_ROOT}

# Create user
RUN adduser -D -h ${APP_ROOT} -s /bin/bash app
RUN chown app:app /var/log/eventol

# Install python requirements
COPY ./requirements.txt ${APP_ROOT}
COPY ./requirements-dev.txt ${APP_ROOT}
RUN pip3 install --no-cache-dir -r requirements.txt
COPY --chown=app:app ./requirements.txt ./requirements-dev.txt ${APP_ROOT}
RUN pip3 install --no-cache-dir -r requirements-dev.txt

# Install node modules
COPY ./eventol/front/package.json ${APP_ROOT}/eventol/front/
COPY ./eventol/front/yarn.lock ${APP_ROOT}/eventol/front/
RUN cd ${APP_ROOT}/eventol/front && yarn install
# RUN cd ${APP_ROOT}/eventol/front && npm rebuild node-sass --force

# Install bower dependencies
COPY ./eventol/front/bower.json ${APP_ROOT}/eventol/front/
COPY ./eventol/front/.bowerrc ${APP_ROOT}/eventol/front/
RUN cd ${APP_ROOT}/eventol/front && bower install --allow-root
# Set user
USER app

# Copy python code
COPY ./eventol ${APP_ROOT}/eventol
COPY --chown=app:app ./eventol ${APP_ROOT}/eventol
RUN mkdir -p ${APP_ROOT}/eventol/manager/static
RUN mkdir -p ${APP_ROOT}/eventol/front/eventol/static

# Compile scss
RUN mkdir -p ${APP_ROOT}/eventol/manager/static/manager/css/
RUN lessc ${APP_ROOT}/eventol/front/eventol/static/manager/less/eventol.less > ${APP_ROOT}/eventol/manager/static/manager/css/eventol.css
RUN lessc ${APP_ROOT}/eventol/front/eventol/static/manager/less/eventol-bootstrap.less > ${APP_ROOT}/eventol/manager/static/manager/css/eventol-bootstrap.css
# Copy css
COPY --chown=app:app --from=frontend /app/eventol/static/manager/css/ ${APP_ROOT}/eventol/manager/static/manager/css/

# Copy script for docker-compose wait and start-eventol
COPY ./deploy/docker/scripts/wait-for-it.sh ${APP_ROOT}/wait-for-it.sh
COPY ./deploy/docker/scripts/start_eventol.sh ${APP_ROOT}/start_eventol.sh
# Copy frontend files
COPY --chown=app:app --from=frontend /app/webpack-stats-prod.json ${APP_ROOT}/eventol/front/webpack-stats-prod.json
COPY --chown=app:app --from=frontend /app/eventol/static ${APP_ROOT}/eventol/front/eventol/static

# Compile reactjs code
RUN cd ${APP_ROOT}/eventol/front && yarn build
# Copy script for docker-compose wait and start-eventol
COPY --chown=app:app ./deploy/docker/scripts/wait-for-it.sh ${APP_ROOT}/wait-for-it.sh
COPY --chown=app:app ./deploy/docker/scripts/start_eventol.sh ${APP_ROOT}/start_eventol.sh

# Collect statics
RUN mkdir -p ${APP_ROOT}/eventol/static
Expand All @@ -81,15 +102,6 @@ RUN cd ${APP_ROOT}/eventol && python manage.py collectstatic --noinput
# Create media folder
RUN mkdir -p ${APP_ROOT}/eventol/media

# Clean and chown files
RUN rm -rf ${APP_ROOT}/eventol/front \
&& mkdir -p ${APP_ROOT}/eventol/front
RUN chmod 0755 ${APP_ROOT}
RUN chown --changes --recursive ${APP_USER_NAME}:${APP_USER_NAME} ${APP_ROOT}/

# Drop privs
USER ${APP_USER_NAME}

# Create log file
RUN touch /var/log/eventol/eventol.log

Expand All @@ -102,4 +114,4 @@ EXPOSE 8000
VOLUME ${APP_ROOT}/eventol/media
VOLUME ${APP_ROOT}/eventol/static

CMD ["tail", "-f", "/dev/null"]
CMD ["tail", "-f", "/dev/null"]
61 changes: 40 additions & 21 deletions deploy/docker/docker-compose.prod.yml
Original file line number Diff line number Diff line change
@@ -1,29 +1,34 @@
version: "2"
version: '3.4'

services:
daphne:
restart: always
image: ${DOCKER_IMAGE_NAME}:${DOCKER_IMAGE_VERSION}
expose:
- "8000"
build:
context: ../../.
target: development
depends_on:
- worker
- redis
- elasticsearch
- logstash
env_file:
- .env
environment:
- DJANGO_CONFIGURATION=Prod
command: bash -c "cd eventol; daphne -b 0.0.0.0 -p 8000 eventol.asgi:channel_layer"
command: bash -c 'cd eventol; daphne -b 0.0.0.0 -p 8000 eventol.asgi:channel_layer'

worker:
restart: always
image: ${DOCKER_IMAGE_NAME}:${DOCKER_IMAGE_VERSION}
build:
context: ../../.
target: development
env_file:
- .env
volumes:
- /usr/src/app
- /srv/deploys/eventoldata/static:/usr/src/app/eventol/static
- /srv/deploys/eventoldata/media:/usr/src/app/eventol/media
- type: bind
source: /srv/deploys/eventoldata/static
target: /usr/src/app/eventol/static
- type: bind
source: /srv/deploys/eventoldata/media
target: /usr/src/app/eventol/media
environment:
- DJANGO_CONFIGURATION=Prod
command: ./wait-for-it.sh -p 5432 -h postgres -t 40 -- ./start_eventol.sh
Expand All @@ -34,33 +39,47 @@ services:
depends_on:
- daphne
- worker
volumes_from:
- worker
volumes:
- type: bind
source: /srv/deploys/eventoldata/static
target: /usr/src/app/eventol/static
read_only: true
- type: bind
source: /srv/deploys/eventoldata/media
target: /usr/src/app/eventol/media
read_only: true
environment:
- VIRTUAL_HOST=${HOST}

postgres:
restart: always
image: postgres:9.6
environment:
- POSTGRES_PASSWORD=${PSQL_PASSWORD}
- POSTGRES_USER=${PSQL_USER}
- POSTGRES_DB=${PSQL_DBNAME}
expose:
- "5432"
volumes:
- /srv/deploys/eventoldata/postgres:/var/lib/postgresql/data
- type: bind
source: /srv/deploys/eventoldata/postgres
target: /var/lib/postgresql/data

nginx-proxy:
restart: always
image: jwilder/nginx-proxy
depends_on:
- nginx
ports:
- "${EXTERNAL_PORT}:80"
- '${EXTERNAL_PORT}:80'
volumes:
- /var/run/docker.sock:/tmp/docker.sock:ro
- ./nginx_proxy_settings.conf:/etc/nginx/conf.d/eventol_settings.conf:ro
- type: bind
source: /var/run/docker.sock
target: /tmp/docker.sock
read_only: true
- type: bind
source: ./nginx_proxy_settings.conf
target: /etc/nginx/conf.d/eventol_settings.conf
read_only: true

redis:
image: redis:4.0.2
restart: always
expose:
- "6379"
41 changes: 27 additions & 14 deletions deploy/docker/docker-compose.yml
Original file line number Diff line number Diff line change
@@ -1,37 +1,50 @@
version: "2"
version: '3.4'

services:
worker:
build: ../../.
build:
context: ../../.
target: development
volumes:
- ../../:/usr/src/app
- type: bind
source: ../../
target: /usr/src/app
environment:
- DJANGO_CONFIGURATION=Dev
- PSQL_HOST=postgres
ports:
- "8000:8000"
- '8000:8000'
depends_on:
- redis
- postgres

reactjs:
build: ../../.
build:
context: ../../.
target: frontend
volumes:
- ../../:/usr/src/app
working_dir: /usr/src/app/eventol/front
- type: bind
source: ../../eventol/front/src
target: /app/src
- type: bind
source: ../../eventol/front/webpack-stats-local.json
target: /app/webpack-stats-local.json
ports:
- "3000:3000"
- '3000:3000'

redis:
image: redis:4.0.2
expose:
- "6379"

postgres:
image: postgres:9.6
environment:
- POSTGRES_PASSWORD=secret
- POSTGRES_USER=eventol
- POSTGRES_DB=eventol
expose:
- "5432"
ports:
- "5432:5432"
- '5432:5432'
volumes:
- ./db/postgres:/var/lib/postgresql/data
- type: bind
source: ./db/postgres
target: /var/lib/postgresql/data

2 changes: 1 addition & 1 deletion eventol/eventol/settings.py
Original file line number Diff line number Diff line change
Expand Up @@ -350,7 +350,7 @@ class Staging(Base):
'file': {
'level': 'DEBUG',
'class': 'logging.handlers.RotatingFileHandler',
'filename': os.getenv('LOG_FILE', '/var/log/eventol.log'),
'filename': os.getenv('LOG_FILE', '/var/log/eventol/eventol.log'),
'maxBytes': 1024*1024*10,
'backupCount': 10,
'formatter': 'logservices'
Expand Down
9 changes: 6 additions & 3 deletions eventol/front/.eslintrc.json
Original file line number Diff line number Diff line change
Expand Up @@ -40,7 +40,7 @@
}],
"arrow-parens": ["error", "as-needed"],
"object-curly-spacing": ["error", "never"],
"quotes": ["error", "single"],
"quotes": ["error", "single", {"avoidEscape": true}],
"no-prototype-builtins": "off",
"no-underscore-dangle": ["error", {"allow": ["__REDUX_DEVTOOLS_EXTENSION_COMPOSE__"]}],
"react-hooks/rules-of-hooks": "error",
Expand All @@ -49,16 +49,17 @@
"react/jsx-max-depth": ["error", {"max": 5}],
"react/state-in-constructor": ["error", "never"],
"react/no-set-state": "off",
"react/boolean-prop-naming": ["error", { "rule": "^(is|has|show|use|focus)([A-Z]?)([A-Za-z0-9]?)+"}],
"react/boolean-prop-naming": ["error", { "rule": "^(is|has|show|use|focus|reconnect)([A-Z]?)([A-Za-z0-9]?)+"}],
"react/jsx-props-no-spreading": ["error", {
"exceptions": ["WrappedComponent"]
"exceptions": ["WrappedComponent", "ReactSlickSlider"]
}],
"import/no-extraneous-dependencies": "off"
},
"overrides": [{
"files": [
"src/**/*.{spec,test}.{js,jsx}",
"src/**/__mocks__/*.{js,jsx}",
"config/jest/setupTests.jsx",
"src/setupTests.js"
],
"globals": {
Expand All @@ -76,7 +77,9 @@
"jest/no-identical-title": "error",
"jest/prefer-to-have-length": "warn",
"jest/valid-expect": "error",
"react/jsx-props-no-spreading": "off",
"no-underscore-dangle": "off",
"react/display-name": "off",
"import/first": "off"
}
}, {
Expand Down
Loading

0 comments on commit d93c217

Please sign in to comment.