From 20927fe8aa15f5e81cfb283ec68117569a60237b Mon Sep 17 00:00:00 2001 From: wancat Date: Sat, 14 Oct 2023 19:43:13 +0800 Subject: [PATCH] feat: docker setup & deployment --- .github/workflows/ci_cd.yml | 8 ++++++++ docker-compose.prod.yml | 15 +++++++++++++++ docker-compose.yml | 17 +++++++++++++++++ packages/analytics/Dockerfile | 19 +++++++++++++++++++ packages/analytics/Dockerfile.dev | 16 ++++++++++++++++ packages/analytics/package.json | 2 +- packages/analytics/src/config.js | 8 +++++++- packages/analytics/src/index.js | 4 ++-- packages/models/package.json | 1 - packages/models/session.js | 5 ++--- 10 files changed, 87 insertions(+), 8 deletions(-) create mode 100644 packages/analytics/Dockerfile create mode 100644 packages/analytics/Dockerfile.dev diff --git a/.github/workflows/ci_cd.yml b/.github/workflows/ci_cd.yml index 87ab406..ec3dd98 100644 --- a/.github/workflows/ci_cd.yml +++ b/.github/workflows/ci_cd.yml @@ -80,6 +80,14 @@ jobs: push: true tags: docker.io/${{ secrets.DOCKERHUB_USERNAME }}/linux-odyssey:app + - name: Build analytics + uses: docker/build-push-action@v2 + with: + context: . + file: ./packages/analytics/Dockerfile + push: true + tags: docker.io/${{ secrets.DOCKERHUB_USERNAME }}/linux-odyssey:analytics + - name: Build base image uses: docker/build-push-action@v2 with: diff --git a/docker-compose.prod.yml b/docker-compose.prod.yml index 1883512..8eacdc4 100644 --- a/docker-compose.prod.yml +++ b/docker-compose.prod.yml @@ -25,6 +25,21 @@ services: environment: - MONGO_URL=mongodb://user:user-password@db:27017/odyssey-test - DOCKER_NETWORK=linux-odyssey-players + + analytics: + image: lancatlin/linux-odyssey:analytics + build: + context: . + dockerfile: packages/analytics/Dockerfile + depends_on: + - db + networks: + - internal + ports: + - '3001:3001' + environment: + - MONGO_URL=mongodb://user:user-password@db:27017/odyssey-test + db: image: mongo restart: always diff --git a/docker-compose.yml b/docker-compose.yml index 30253cf..a6483c9 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -39,6 +39,23 @@ services: - GOOGLE_CLIENT_SECRET=${GOOGLE_CLIENT_SECRET} - GITHUB_CLIENT_ID=${GITHUB_CLIENT_ID} - GITHUB_CLIENT_SECRET=${GITHUB_CLIENT_SECRET} + + analytics: + build: + context: . + dockerfile: packages/analytics/Dockerfile.dev + depends_on: + - db + networks: + - internal + ports: + - '3001:3001' + environment: + - MONGO_URL=mongodb://db:27017/odyssey-test + volumes: + - ./packages/analytics:/app/packages/analytics + - ./packages/models:/app/packages/models + db: image: mongo networks: diff --git a/packages/analytics/Dockerfile b/packages/analytics/Dockerfile new file mode 100644 index 0000000..69f71f4 --- /dev/null +++ b/packages/analytics/Dockerfile @@ -0,0 +1,19 @@ +FROM node + +WORKDIR /app +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 --production + +COPY packages/analytics ./packages/analytics +COPY packages/models ./packages/models + +WORKDIR /app/packages/analytics + +ENV NODE_ENV=production +ENV HOST=0.0.0.0 +ENV PORT=3001 +EXPOSE 3001 + +CMD [ "yarn", "start" ] \ No newline at end of file diff --git a/packages/analytics/Dockerfile.dev b/packages/analytics/Dockerfile.dev new file mode 100644 index 0000000..1262872 --- /dev/null +++ b/packages/analytics/Dockerfile.dev @@ -0,0 +1,16 @@ +FROM node + +WORKDIR /app +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 + +WORKDIR /app/packages/analytics + +ENV NODE_ENV=development +ENV HOST=0.0.0.0 +ENV PORT=3001 +EXPOSE 3001 + +CMD [ "yarn", "dev" ] diff --git a/packages/analytics/package.json b/packages/analytics/package.json index 56b62de..53eda5a 100644 --- a/packages/analytics/package.json +++ b/packages/analytics/package.json @@ -1,7 +1,7 @@ { "name": "analytics", "version": "1.0.0", - "main": "index.js", + "main": "src/index.js", "private": true, "type": "module", "license": "GPL", diff --git a/packages/analytics/src/config.js b/packages/analytics/src/config.js index fa291ff..00e1afd 100644 --- a/packages/analytics/src/config.js +++ b/packages/analytics/src/config.js @@ -1,3 +1,9 @@ -export default { +const config = { + host: process.env.HOST || 'localhost', + port: process.env.PORT || 3001, db: process.env.MONGO_URL || 'mongodb://localhost:27017/odyssey-test', } + +config.baseUrl = process.env.BASE_URL || `http://${config.host}:${config.port}` + +export default config diff --git a/packages/analytics/src/index.js b/packages/analytics/src/index.js index 463efca..6977ab0 100644 --- a/packages/analytics/src/index.js +++ b/packages/analytics/src/index.js @@ -16,8 +16,8 @@ async function main() { app.use(router) app.use(express.static('./public')) - app.listen(3001, () => { - console.log('Server started on http://localhost:3001') + app.listen(config.port, config.host, () => { + console.log(`Server started on ${config.baseUrl}`) }) } diff --git a/packages/models/package.json b/packages/models/package.json index 1dd49ae..d5f58b0 100644 --- a/packages/models/package.json +++ b/packages/models/package.json @@ -6,7 +6,6 @@ "license": "GPL", "exports": "./index.js", "dependencies": { - "@linux-odyssey/file-graph": "*", "mongoose": "^7.6.0" } } diff --git a/packages/models/session.js b/packages/models/session.js index ddb4fad..85568a1 100644 --- a/packages/models/session.js +++ b/packages/models/session.js @@ -1,5 +1,4 @@ import { model, Schema } from 'mongoose' -import { FileNode } from '@linux-odyssey/file-graph' const nodeSchema = new Schema({ path: String, @@ -58,10 +57,10 @@ const Session = model( hints: [String], graph: { type: nodeSchema, - default: new FileNode({ + default: { path: '/', type: 'folder', - }), + }, }, }, { timestamps: true }