Just run:
$ docker network create marbleseeds-network
$ docker volume create --name=mongodbdata
$ docker-compose up -d
| # nginx/conf.d/default.conf | |
| upstream apiServer { | |
| server api:3000; | |
| } | |
| upstream appServer { | |
| server app:4000; | |
| } | |
| upstream adminServer { | |
| server admin:5000; | |
| } | |
| server { | |
| listen 80 default_server; | |
| server_name _; | |
| access_log /var/log/nginx/access.log; | |
| error_log /var/log/nginx/error.log; | |
| client_max_body_size 0; | |
| location /api { | |
| client_max_body_size 0; | |
| proxy_pass http://apiServer; | |
| proxy_redirect off; | |
| proxy_read_timeout 5m; | |
| proxy_set_header Host $host; | |
| proxy_set_header X-Real-IP $remote_addr; | |
| proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; | |
| } | |
| location / { | |
| client_max_body_size 0; | |
| proxy_pass http://appServer/; | |
| proxy_redirect off; | |
| proxy_read_timeout 5m; | |
| proxy_set_header Host $host; | |
| proxy_set_header X-Real-IP $remote_addr; | |
| proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; | |
| } | |
| location /admin { | |
| client_max_body_size 0; | |
| proxy_pass http://adminServer; | |
| proxy_redirect off; | |
| proxy_read_timeout 5m; | |
| proxy_set_header Host $host; | |
| proxy_set_header X-Real-IP $remote_addr; | |
| proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; | |
| } | |
| } |
| version: '3' | |
| services: | |
| api: | |
| container_name: api | |
| restart: always | |
| build: . | |
| ports: | |
| - "3000:3000" | |
| networks: | |
| - marbleseeds-network | |
| volumes: | |
| - .:/marbleseeds | |
| links: | |
| - mongo | |
| app: | |
| container_name: app | |
| restart: always | |
| build: . | |
| ports: | |
| - "4000:4000" | |
| networks: | |
| - marbleseeds-network | |
| volumes: | |
| - .:/marbleseeds | |
| admin: | |
| container_name: admin | |
| restart: always | |
| build: . | |
| ports: | |
| - "5000:5000" | |
| networks: | |
| - marbleseeds-network | |
| volumes: | |
| - .:/marbleseeds | |
| mongo: | |
| container_name: mongo | |
| image: mongo | |
| ports: | |
| - "27017:27017" | |
| networks: | |
| - marbleseeds-network | |
| volumes: | |
| - mongodbdata:/data/db | |
| webserver: | |
| image: nginx:alpine | |
| container_name: webserver | |
| restart: unless-stopped | |
| tty: true | |
| ports: | |
| - "80:80" | |
| - "443:443" | |
| networks: | |
| - marbleseeds-network | |
| volumes: | |
| - ./:/var/www | |
| - ./nginx/conf.d/:/etc/nginx/conf.d/ | |
| volumes: | |
| mongodbdata: | |
| external: true | |
| networks: | |
| marbleseeds-network: | |
| external: true |
| FROM node:8-alpine | |
| RUN apk add python gcc g++ make curl | |
| ARG WORKING_DIR=/var/www | |
| RUN mkdir -p $WORKING_DIR | |
| WORKDIR $WORKING_DIR | |
| COPY package.json $WORKING_DIR | |
| RUN npm install | |
| COPY . $WORKING_DIR/ | |
| RUN make dist | |
| RUN npm install -g pm2 | |
| RUN pm2 install pm2-logrotate | |
| CMD ["pm2-runtime", "ecosystem.config.js", "--env", "production"] |
| module.exports = { | |
| apps : [{ | |
| name: 'API', | |
| script: './api/runner.js', | |
| instances: 1, | |
| autorestart: true, | |
| watch: false, | |
| max_memory_restart: '1G', | |
| env: { | |
| NODE_ENV: 'development' | |
| }, | |
| env_production: { | |
| NODE_ENV: 'production' | |
| } | |
| }, { | |
| name: 'App', | |
| script: './app/runner.js', | |
| instances: 1, | |
| autorestart: true, | |
| watch: false, | |
| max_memory_restart: '1G', | |
| env: { | |
| NODE_ENV: 'development' | |
| }, | |
| env_production: { | |
| NODE_ENV: 'production' | |
| } | |
| }, { | |
| name: 'Admin', | |
| script: './admin/runner.js', | |
| instances: 1, | |
| autorestart: true, | |
| watch: false, | |
| max_memory_restart: '1G', | |
| env: { | |
| NODE_ENV: 'development' | |
| }, | |
| env_production: { | |
| NODE_ENV: 'production' | |
| } | |
| }] | |
| }; |