From a81a1edf8852bdfa2a6c33cb0cecd0a748e862d2 Mon Sep 17 00:00:00 2001 From: furyhawk Date: Sun, 12 Jul 2026 07:08:59 +0800 Subject: [PATCH] feat: add nodepad service with Docker configuration and Traefik routing --- swarm/apps.yml | 2 +- swarm/inline.Dockerfile | 18 ++++++++++++++++++ swarm/nodepad | 1 + swarm/nodepad.yml | 30 ++++++++++++++++++++++++++++++ 4 files changed, 50 insertions(+), 1 deletion(-) create mode 100644 swarm/inline.Dockerfile create mode 160000 swarm/nodepad create mode 100644 swarm/nodepad.yml diff --git a/swarm/apps.yml b/swarm/apps.yml index 0730c13..08a79a3 100644 --- a/swarm/apps.yml +++ b/swarm/apps.yml @@ -87,7 +87,7 @@ services: - traefik.swarm.network=traefik-public - traefik.constraint-label=traefik-public - traefik.http.routers.heynote.entrypoints=https - - traefik.http.routers.heynote.rule=Host(`note.${DOMAIN}`) || Host(`note0.${DOMAIN}`) || Host(`n.${DOMAIN}`) || Host(`pad.${DOMAIN}`) + - traefik.http.routers.heynote.rule=Host(`note.${DOMAIN}`) || Host(`note0.${DOMAIN}`) || Host(`n.${DOMAIN}`) # - traefik.http.routers.heynote.rule=HostRegexp(`note[0-9]{0,2}.${DOMAIN}`) || Host(`pad.${DOMAIN}`) - traefik.http.routers.heynote.tls.certresolver=le - traefik.http.routers.heynote.service=heynote_app diff --git a/swarm/inline.Dockerfile b/swarm/inline.Dockerfile new file mode 100644 index 0000000..61056cb --- /dev/null +++ b/swarm/inline.Dockerfile @@ -0,0 +1,18 @@ +FROM node:20-alpine AS builder +WORKDIR /app +COPY ./nodepad/package*.json ./ +RUN npm install +COPY ./nodepad . +RUN npm run build + +FROM node:20-alpine AS runner +WORKDIR /app +ENV NODE_ENV=production +COPY --from=builder /app/package*.json ./ +COPY --from=builder /app/.next ./.next +COPY --from=builder /app/public ./public +COPY --from=builder /app/node_modules ./node_modules +COPY --from=builder /app/next.config.mjs ./ + +EXPOSE 3000 +CMD ["npm", "run", "start"] diff --git a/swarm/nodepad b/swarm/nodepad new file mode 160000 index 0000000..e72c2fd --- /dev/null +++ b/swarm/nodepad @@ -0,0 +1 @@ +Subproject commit e72c2fdcc87ad98f0b80f6dee4d3ffbee7e80ff8 diff --git a/swarm/nodepad.yml b/swarm/nodepad.yml new file mode 100644 index 0000000..c214cd1 --- /dev/null +++ b/swarm/nodepad.yml @@ -0,0 +1,30 @@ +services: + nodepad: + container_name: nodepad + build: + context: . + dockerfile: inline.Dockerfile + ports: + - "3000:3000" + environment: + - NODE_ENV=production + # Add your AI model API keys below if needed by the app: + # - OPENAI_API_KEY=your_key_here + # - ANTHROPIC_API_KEY=your_key_here + restart: unless-stopped + networks: + - traefik-public + deploy: + labels: + - traefik.enable=true + - traefik.swarm.network=traefik-public + - traefik.constraint-label=traefik-public + - traefik.http.routers.nodepad.entrypoints=https + - traefik.http.routers.nodepad.rule=Host(`pad.${DOMAIN}`) + - traefik.http.routers.nodepad.tls.certresolver=le + - traefik.http.routers.nodepad.service=nodepad_app + - traefik.http.routers.nodepad-local.entrypoints=https + - traefik.http.routers.nodepad-local.rule=Host(`pad.${LOCALDOMAIN}`) + - traefik.http.routers.nodepad-local.tls=true + - traefik.http.routers.nodepad-local.service=nodepad_app + - traefik.http.services.nodepad_app.loadbalancer.server.port=3000 \ No newline at end of file