feat: nginx container

This commit is contained in:
Sergey Yarkov 2022-03-26 22:39:12 +03:00
parent 79e56696fd
commit 416f221066
9 changed files with 495 additions and 11020 deletions

View File

@ -1,12 +1,12 @@
# Adonis default .gitignore ignores # Adonis default .gitignore ignores
node_modules node_modules
build build
uploads
coverage coverage
.vscode .vscode
.DS_STORE .DS_STORE
.env .env
tmp tmp
uploads
# Additional .gitignore ignores (any custom file you wish) # Additional .gitignore ignores (any custom file you wish)
.idea .idea

View File

@ -1,30 +1,24 @@
# syntax=docker/dockerfile:1 ARG NODE_IMAGE=node:14.17.3-alpine3.11
ARG NODE_IMAGE=node:17-alpine FROM ${NODE_IMAGE} AS base
FROM ${NODE_IMAGE} as base
RUN apk --no-cache add dumb-init RUN apk --no-cache add dumb-init
RUN mkdir -p /home/node/app && chown node:node /home/node/app RUN mkdir -p /home/node/app && chown node:node /home/node/app
WORKDIR /home/node/app WORKDIR /home/node/app
USER node USER node
RUN mkdir tmp
FROM base as dependencies FROM base as builder
COPY --chown=node:none ./package*.json ./ COPY --chown=node:node package*.json ./
RUN npm ci RUN npm ci
COPY --chown=node:node . . COPY --chown=node:node . .
RUN node ace build --production
FROM dependencies as build
RUN node ace build --production --ignore-ts-errors
FROM base as production FROM base as production
ENV NODE_ENV=production ENV NODE_ENV=production
ENV PORT=3333 ENV PORT=3333
ENV HOST=0.0.0.0 ENV HOST=0.0.0.0
WORKDIR /home/node/app
COPY --chown=node:node ./package*.json ./ COPY --chown=node:node --from=builder /home/node/app/build .
RUN npm ci --production RUN npm ci --production
COPY --chown=node:node --from=build /home/node/app/build .
EXPOSE 3333 EXPOSE 3333
CMD ["dumb-init", "node", "server.js"] CMD ["dumb-init", "node", "server.js"]

14
Makefile Normal file
View File

@ -0,0 +1,14 @@
build:
docker-compose -f docker-compose.yml build $(c)
up:
docker-compose -f docker-compose.yml up -d $(c)
down:
docker-compose -f docker-compose.yml down $(c)
stop:
docker-compose -f docker-compose.yml stop $(c)
logs:
docker-compose -f docker-compose.yml logs --tail=100 -f $(c)
migrate:
docker-compose -f docker-compose.yml run nodejs npm run db:migrate:force
seed:
docker-compose -f docker-compose.yml run nodejs npm run db:seed

View File

@ -17,9 +17,10 @@ export default class OnlineController {
this.socket = socket; this.socket = socket;
this.io = io; this.io = io;
this.sessionStore = sessionStore; this.sessionStore = sessionStore;
}
this.onConnected(socket); public handle() {
this.onConnected(this.socket);
this.socket.on('disconnect', reason => this.onDisconnected(reason)); this.socket.on('disconnect', reason => this.onDisconnected(reason));
} }

View File

@ -115,9 +115,10 @@ class WsService {
private listen() { private listen() {
this.io.on('connection', async socket => { this.io.on('connection', async socket => {
// eslint-disable-next-line @typescript-eslint/no-unused-vars
const onlineController = new OnlineController(socket, this.io, this.sessionStore); const onlineController = new OnlineController(socket, this.io, this.sessionStore);
onlineController.handle();
const { sessionId, userId, userName } = socket.data; const { sessionId, userId, userName } = socket.data;
const isExistSocketData = !!(sessionId && userId && userName); const isExistSocketData = !!(sessionId && userId && userName);

View File

@ -1,37 +1,72 @@
version: '3.8' version: '3.8'
services: services:
backend: nginx:
container_name: educt-server container_name: nginx
restart: always
image: nginx:latest
volumes:
- ./nginx/default.conf:/etc/nginx/conf.d/default.conf
ports:
- 80:80
depends_on:
- api
networks:
- app-network
api:
container_name: api
restart: always restart: always
build: build:
context: . context: .
target: dependencies target: production
dockerfile: Dockerfile
ports: ports:
- ${PORT}:${PORT} - ${PORT}:${PORT}
env_file:
- .env
environment: environment:
- PORT=3333
- APP_KEY=IP387l45rlNO3t7Qgjd89qr-a2G4oUgz
- DB_CONNECTION=pg
- PG_HOST=postgres - PG_HOST=postgres
- PG_PORT=5432
- PG_USER=postgres
- PG_PASSWORD=1234
- PG_DB_NAME=educt
- REDIS_CONNECTION=local
- REDIS_HOST=redis - REDIS_HOST=redis
- REDIS_PORT=6379
- REDIS_PASSWORD=
- SMTP_HOST=localhost
- SMTP_PORT=587
- SMTP_USERNAME=<username>
- SMTP_PASSWORD=<password>
- MAILGUN_API_KEY=<key>
- MAILGUN_DOMAIN=<domain>
- CACHE_VIEWS=false
- DRIVE_DISK=local
- S3_KEY=<key>
- S3_SECRET=<secret>
- S3_BUCKET=<bucket>
- S3_REGION=<region>
volumes: volumes:
- ./:/home/node/app - uploads:/home/node/app/uploads
command: dumb-init node ace serve --watch command: ['dumb-init', 'node', 'server.js']
depends_on: depends_on:
- postgres - postgres
- redis networks:
- app-network
postgres: postgres:
container_name: postgres container_name: postgres
image: postgres:14 image: postgres:14
volumes: volumes:
- postgres_volume:/var/lib/postgresql/data - postgres_volume:/var/lib/postgresql/data
environment: environment:
POSTGRES_USER: ${PG_USER} POSTGRES_USER: postgres
POSTGRES_PASSWORD: ${PG_PASSWORD} POSTGRES_PASSWORD: 1234
POSTGRES_DB: ${PG_DB_NAME} POSTGRES_DB: educt
ports: ports:
- 5432:5432 - 5432:5432
networks:
- app-network
redis: redis:
container_name: redis container_name: redis
image: redis:6-alpine image: redis:6-alpine
@ -39,6 +74,14 @@ services:
- redis_volume:/data - redis_volume:/data
ports: ports:
- 6379:6379 - 6379:6379
networks:
- app-network
depends_on:
- postgres
volumes: volumes:
postgres_volume: postgres_volume:
redis_volume: redis_volume:
uploads:
networks:
app-network:
driver: bridge

17
nginx/default.conf Normal file
View File

@ -0,0 +1,17 @@
server {
listen 80;
server_name localhost;
location / {
proxy_pass http://api:3333;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection 'upgrade';
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_cache_bypass $http_upgrade;
}
}

11381
package-lock.json generated

File diff suppressed because it is too large Load Diff

View File

@ -32,6 +32,7 @@
"youch-terminal": "^1.1.1" "youch-terminal": "^1.1.1"
}, },
"dependencies": { "dependencies": {
"@adonisjs/application": "^5.2.0",
"@adonisjs/attachment-lite": "^1.0.1", "@adonisjs/attachment-lite": "^1.0.1",
"@adonisjs/auth": "^8.0.10", "@adonisjs/auth": "^8.0.10",
"@adonisjs/bouncer": "^2.2.5", "@adonisjs/bouncer": "^2.2.5",
@ -48,6 +49,7 @@
"luxon": "^1.28.0", "luxon": "^1.28.0",
"nanoid": "^3.1.25", "nanoid": "^3.1.25",
"pg": "^8.7.1", "pg": "^8.7.1",
"phc-bcrypt": "^1.0.7",
"proxy-addr": "^2.0.7", "proxy-addr": "^2.0.7",
"reflect-metadata": "^0.1.13", "reflect-metadata": "^0.1.13",
"socket.io": "^4.4.1", "socket.io": "^4.4.1",