From 26b90ff5d4d35aff27f944cf0ff04d914bf5e942 Mon Sep 17 00:00:00 2001 From: JacobLinCool Date: Wed, 14 Feb 2024 04:05:45 +0800 Subject: [PATCH] build: add compose / k8s deployment --- .dockerignore | 4 ++ Dockerfile | 18 +++++++ deployment/docker-compose/.env.example | 3 ++ deployment/docker-compose/.gitignore | 1 + deployment/docker-compose/README.md | 7 +++ deployment/docker-compose/docker-compose.yml | 23 +++++++++ deployment/kubernetes/env-configmap.yaml | 10 ++++ .../mongo-data-persistentvolumeclaim.yaml | 12 +++++ deployment/kubernetes/mongo-deployment.yaml | 36 ++++++++++++++ deployment/kubernetes/server-deployment.yaml | 49 +++++++++++++++++++ deployment/kubernetes/server-service.yaml | 16 ++++++ 11 files changed, 179 insertions(+) create mode 100644 .dockerignore create mode 100644 Dockerfile create mode 100644 deployment/docker-compose/.env.example create mode 100644 deployment/docker-compose/.gitignore create mode 100644 deployment/docker-compose/README.md create mode 100644 deployment/docker-compose/docker-compose.yml create mode 100644 deployment/kubernetes/env-configmap.yaml create mode 100644 deployment/kubernetes/mongo-data-persistentvolumeclaim.yaml create mode 100644 deployment/kubernetes/mongo-deployment.yaml create mode 100644 deployment/kubernetes/server-deployment.yaml create mode 100644 deployment/kubernetes/server-service.yaml diff --git a/.dockerignore b/.dockerignore new file mode 100644 index 0000000..8a9b597 --- /dev/null +++ b/.dockerignore @@ -0,0 +1,4 @@ +.devcontainer/ +.git/ +.github/ +deployment/ diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 0000000..2e08e40 --- /dev/null +++ b/Dockerfile @@ -0,0 +1,18 @@ +FROM golang:alpine AS builder + +WORKDIR /app + +COPY go.mod go.sum ./ +RUN go mod download + +COPY . . + +RUN go build . + +FROM alpine AS production + +WORKDIR /app + +COPY --from=builder /app/ad-service . + +CMD ["./ad-service"] diff --git a/deployment/docker-compose/.env.example b/deployment/docker-compose/.env.example new file mode 100644 index 0000000..e47d88f --- /dev/null +++ b/deployment/docker-compose/.env.example @@ -0,0 +1,3 @@ +MONGODB_URI="mongodb://mongo:27017" +AD_SERVICE_PORT="8080" +AD_SERVICE_CACHE_TTL="1" diff --git a/deployment/docker-compose/.gitignore b/deployment/docker-compose/.gitignore new file mode 100644 index 0000000..4c49bd7 --- /dev/null +++ b/deployment/docker-compose/.gitignore @@ -0,0 +1 @@ +.env diff --git a/deployment/docker-compose/README.md b/deployment/docker-compose/README.md new file mode 100644 index 0000000..3fcda17 --- /dev/null +++ b/deployment/docker-compose/README.md @@ -0,0 +1,7 @@ +# Deploy with Docker Compose + +You can copy and configure the `.env.example` file to `.env` and then run the following command to deploy: + +```bash +docker-compose up -d +``` diff --git a/deployment/docker-compose/docker-compose.yml b/deployment/docker-compose/docker-compose.yml new file mode 100644 index 0000000..1cc0d23 --- /dev/null +++ b/deployment/docker-compose/docker-compose.yml @@ -0,0 +1,23 @@ +version: '3.8' + +volumes: + mongo-data: + +services: + server: + image: ghcr.io/jacoblincool/ad-service-dcard-2024 + build: + context: ../.. + dockerfile: Dockerfile + env_file: + - .env + environment: + - GIN_MODE=release + ports: + - "${AD_SERVICE_PORT}:${AD_SERVICE_PORT}" + + mongo: + image: mongo:latest + restart: unless-stopped + volumes: + - mongo-data:/data/db diff --git a/deployment/kubernetes/env-configmap.yaml b/deployment/kubernetes/env-configmap.yaml new file mode 100644 index 0000000..a934a1f --- /dev/null +++ b/deployment/kubernetes/env-configmap.yaml @@ -0,0 +1,10 @@ +apiVersion: v1 +data: + AD_SERVICE_CACHE_TTL: "1" + AD_SERVICE_PORT: "8080" + MONGODB_URI: mongodb://mongo:27017 +kind: ConfigMap +metadata: + labels: + io.kompose.service: server-env + name: env diff --git a/deployment/kubernetes/mongo-data-persistentvolumeclaim.yaml b/deployment/kubernetes/mongo-data-persistentvolumeclaim.yaml new file mode 100644 index 0000000..f60ef32 --- /dev/null +++ b/deployment/kubernetes/mongo-data-persistentvolumeclaim.yaml @@ -0,0 +1,12 @@ +apiVersion: v1 +kind: PersistentVolumeClaim +metadata: + labels: + io.kompose.service: mongo-data + name: mongo-data +spec: + accessModes: + - ReadWriteOnce + resources: + requests: + storage: 100Mi diff --git a/deployment/kubernetes/mongo-deployment.yaml b/deployment/kubernetes/mongo-deployment.yaml new file mode 100644 index 0000000..c99e476 --- /dev/null +++ b/deployment/kubernetes/mongo-deployment.yaml @@ -0,0 +1,36 @@ +apiVersion: apps/v1 +kind: Deployment +metadata: + annotations: + kompose.cmd: kompose convert -o ../kubernetes/ + kompose.version: 1.32.0 (HEAD) + labels: + io.kompose.service: mongo + name: mongo +spec: + replicas: 1 + selector: + matchLabels: + io.kompose.service: mongo + strategy: + type: Recreate + template: + metadata: + annotations: + kompose.cmd: kompose convert -o ../kubernetes/ + kompose.version: 1.32.0 (HEAD) + labels: + io.kompose.network/docker-compose-default: "true" + io.kompose.service: mongo + spec: + containers: + - image: mongo:latest + name: mongo + volumeMounts: + - mountPath: /data/db + name: mongo-data + restartPolicy: Always + volumes: + - name: mongo-data + persistentVolumeClaim: + claimName: mongo-data diff --git a/deployment/kubernetes/server-deployment.yaml b/deployment/kubernetes/server-deployment.yaml new file mode 100644 index 0000000..68c49e0 --- /dev/null +++ b/deployment/kubernetes/server-deployment.yaml @@ -0,0 +1,49 @@ +apiVersion: apps/v1 +kind: Deployment +metadata: + annotations: + kompose.cmd: kompose convert -o ../kubernetes/ + kompose.version: 1.32.0 (HEAD) + labels: + io.kompose.service: server + name: server +spec: + replicas: 1 + selector: + matchLabels: + io.kompose.service: server + template: + metadata: + annotations: + kompose.cmd: kompose convert -o ../kubernetes/ + kompose.version: 1.32.0 (HEAD) + labels: + io.kompose.network/docker-compose-default: "true" + io.kompose.service: server + spec: + containers: + - env: + - name: AD_SERVICE_CACHE_TTL + valueFrom: + configMapKeyRef: + key: AD_SERVICE_CACHE_TTL + name: env + - name: AD_SERVICE_PORT + valueFrom: + configMapKeyRef: + key: AD_SERVICE_PORT + name: env + - name: GIN_MODE + value: release + - name: MONGODB_URI + valueFrom: + configMapKeyRef: + key: MONGODB_URI + name: env + image: jacoblincool/ad-service-dcard-2024 + name: server + ports: + - containerPort: 8080 + hostPort: 8080 + protocol: TCP + restartPolicy: Always diff --git a/deployment/kubernetes/server-service.yaml b/deployment/kubernetes/server-service.yaml new file mode 100644 index 0000000..f77236e --- /dev/null +++ b/deployment/kubernetes/server-service.yaml @@ -0,0 +1,16 @@ +apiVersion: v1 +kind: Service +metadata: + annotations: + kompose.cmd: kompose convert -o ../kubernetes/ + kompose.version: 1.32.0 (HEAD) + labels: + io.kompose.service: server + name: server +spec: + ports: + - name: "8080" + port: 8080 + targetPort: 8080 + selector: + io.kompose.service: server