diff --git a/README.md b/README.md index e2f8ac1..ef124a4 100644 --- a/README.md +++ b/README.md @@ -163,6 +163,17 @@ Run Cypress in container, create brand-new containers along with it: ## Deployment +Create production env + + cp .env.prod.sample .env.prod + +Edit `.env.prod` + + BASE_URL=https://yourdomain.com # IMPORTANT to make login work + SECRET_KEY=xxxx # Change it to something safe! + +Start the service + # Build the images (only allowed for maintainers) docker compose -f docker-compose.prod.yml build docker compose -f docker-compose.prod.yml push diff --git a/app/Dockerfile b/app/Dockerfile index aa511c6..c3be3df 100644 --- a/app/Dockerfile +++ b/app/Dockerfile @@ -1,26 +1,15 @@ # Base stage -FROM node:20-alpine as base +FROM node:20-alpine as build WORKDIR /app -COPY package.json yarn.lock tsconfig.json ./ -COPY packages/file-graph/package.json ./packages/file-graph/package.json -COPY packages/utils/package.json ./packages/utils/package.json -COPY packages/constants/package.json ./packages/constants/package.json -COPY packages/models/package.json ./packages/models/package.json +COPY package.json yarn.lock ./ COPY app/package.json ./app/package.json +COPY server/package.json ./server/package.json RUN yarn install --frozen-lockfile -# Dev stage -FROM base as dev -WORKDIR /app/app -CMD [ "yarn", "dev:docker", "--host", "0.0.0.0" ] - -# Build stage -FROM base as build -COPY packages/file-graph ./packages/file-graph -COPY packages/utils ./packages/utils -COPY packages/constants ./packages/constants -COPY packages/models ./packages/models +COPY tsconfig.json ./tsconfig.json +COPY server ./server +COPY packages ./packages COPY app ./app RUN yarn workspace app build diff --git a/deployment/nginx.conf b/deployment/nginx.conf index d4ac3df..1ddcd42 100644 --- a/deployment/nginx.conf +++ b/deployment/nginx.conf @@ -12,6 +12,11 @@ server { proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; } + location /trpc/ { + proxy_pass http://backend:3000; + proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; + } + location /api-docs/ { proxy_pass http://backend:3000; } diff --git a/docker-compose.prod.yml b/docker-compose.prod.yml index 86140b3..06099cb 100644 --- a/docker-compose.prod.yml +++ b/docker-compose.prod.yml @@ -9,7 +9,7 @@ services: dockerfile: app/Dockerfile target: prod networks: - internal: + - internal ports: - 8080:80 @@ -31,7 +31,7 @@ services: - ./config:/app/config - ./quests:/app/quests:ro env_file: - - .env + - .env.prod environment: - DOCKER_NETWORK=linux-odyssey-players - BACKEND_URL=http://backend:3000 @@ -51,7 +51,7 @@ services: ports: - '3001:3001' env_file: - - .env + - .env.prod db: image: mongo:6 @@ -64,7 +64,7 @@ services: - mongo:/data/db - ./mongo-init.js:/docker-entrypoint-initdb.d/mongo-init.js:ro env_file: - - .env + - .env.prod base: image: linuxodyssey/quest-base diff --git a/packages/analytics/Dockerfile b/packages/analytics/Dockerfile index 55820ca..ac95f83 100644 --- a/packages/analytics/Dockerfile +++ b/packages/analytics/Dockerfile @@ -1,19 +1,20 @@ FROM node:20-alpine as build WORKDIR /app -COPY ./package.json yarn.lock tsconfig.json ./ +COPY ./package.json yarn.lock ./ COPY packages/analytics/package.json ./packages/analytics/package.json -COPY packages/models/package.json ./packages/models/package.json RUN yarn install --frozen-lockfile + +COPY tsconfig.json ./tsconfig.json +COPY packages ./packages + ENV HOST=0.0.0.0 ENV PORT=3001 EXPOSE 3001 # Production stage -FROM build as prod -COPY packages/analytics ./packages/analytics -COPY packages/models ./packages/models +FROM node:20-alpine as prod +COPY --from=build /app/packages/analytics ./packages/analytics ENV NODE_ENV=production WORKDIR /app/packages/analytics -RUN yarn build CMD [ "yarn", "start" ] \ No newline at end of file diff --git a/server/Dockerfile b/server/Dockerfile index 32361c6..8ab6a0d 100644 --- a/server/Dockerfile +++ b/server/Dockerfile @@ -1,41 +1,28 @@ FROM node:20-alpine AS build WORKDIR /app -COPY ./package.json yarn.lock tsconfig.json ./ -COPY packages/file-graph/package.json ./packages/file-graph/package.json -COPY packages/utils/package.json ./packages/utils/package.json -COPY packages/models/package.json ./packages/models/package.json -COPY packages/constants/package.json ./packages/constants/package.json +COPY ./package.json yarn.lock ./ COPY server/package.json ./server/package.json RUN yarn install # Install docker cli COPY --from=docker:dind /usr/local/bin/docker /usr/local/bin/ +COPY server ./server +COPY packages ./packages +COPY tsconfig.json ./tsconfig.json +RUN yarn workspace server build + +# Production +FROM node:20-alpine as prod + +WORKDIR /app +COPY --from=build /app/node_modules ./node_modules +COPY --from=build /app/server ./server +COPY ./quests ./quests + +ENV NODE_ENV=production +WORKDIR /app/server +CMD [ "yarn", "start" ] ENV HOST=0.0.0.0 ENV PORT=3000 EXPOSE 3000 - -# Production -FROM build as prod - -COPY packages/file-graph ./packages/file-graph -COPY packages/utils ./packages/utils -COPY packages/models ./packages/models -COPY packages/constants ./packages/constants -COPY server ./server -COPY quests ./quests - -ENV NODE_ENV=production -RUN yarn workspace server build -WORKDIR /app/server -CMD [ "yarn", "start" ] - -# Development -FROM build as dev - -RUN yarn install --frozen-lockfile -COPY server/nodemon.json ./server/nodemon.json -COPY tsconfig.json ./tsconfig.json -COPY server/tsconfig.json ./server/tsconfig.json -ENV NODE_ENV=development -CMD [ "yarn", "server" ] diff --git a/tsconfig.json b/tsconfig.json index bcf7b78..3abbf89 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -6,5 +6,6 @@ "skipLibCheck": true, "sourceMap": true, "baseUrl": "." - } + }, + "exclude": ["node_modules", "dist", "*.test.ts"] }