From e3b98d9f352ab96d961b857cb4e8380fbba50795 Mon Sep 17 00:00:00 2001 From: Hafid Nur Date: Sat, 14 Feb 2026 16:44:23 +0700 Subject: [PATCH] Add deployment script Add Dockerfile, docker compose, and update Nix config for deployment --- apps/qrcampaign/Dockerfile | 17 +++++++++++++++++ docker-compose-qrcampaign.yml | 9 +++++++++ docker/qrcampaign.Dockerfile | 17 +++++++++++++++++ flake.nix | 7 ++++++- 4 files changed, 49 insertions(+), 1 deletion(-) create mode 100644 apps/qrcampaign/Dockerfile create mode 100644 docker-compose-qrcampaign.yml create mode 100644 docker/qrcampaign.Dockerfile diff --git a/apps/qrcampaign/Dockerfile b/apps/qrcampaign/Dockerfile new file mode 100644 index 0000000..80582ff --- /dev/null +++ b/apps/qrcampaign/Dockerfile @@ -0,0 +1,17 @@ +FROM node:22-alpine AS deps +WORKDIR /app +COPY package.json package-lock.json ./ +RUN npm ci --prefer-offline --no-audit --no-fund + +FROM node:22-alpine AS builder +WORKDIR /app +COPY --from=deps /app/node_modules ./node_modules +COPY . . +ENV NX_DAEMON=false +RUN npm run qrcampaign:build + +FROM nginx:alpine AS runner +RUN rm -rf /usr/share/nginx/html/* +COPY --from=builder /app/dist/apps/qrcampaign /usr/share/nginx/html +EXPOSE 80 +CMD ["nginx", "-g", "daemon off;"] diff --git a/docker-compose-qrcampaign.yml b/docker-compose-qrcampaign.yml new file mode 100644 index 0000000..f4e9c8f --- /dev/null +++ b/docker-compose-qrcampaign.yml @@ -0,0 +1,9 @@ +services: + qrcampaign: + build: + context: . + dockerfile: docker/qrcampaign.Dockerfile + ports: + - '127.0.0.1:3006:80' + restart: unless-stopped + container_name: qrcampaign diff --git a/docker/qrcampaign.Dockerfile b/docker/qrcampaign.Dockerfile new file mode 100644 index 0000000..80582ff --- /dev/null +++ b/docker/qrcampaign.Dockerfile @@ -0,0 +1,17 @@ +FROM node:22-alpine AS deps +WORKDIR /app +COPY package.json package-lock.json ./ +RUN npm ci --prefer-offline --no-audit --no-fund + +FROM node:22-alpine AS builder +WORKDIR /app +COPY --from=deps /app/node_modules ./node_modules +COPY . . +ENV NX_DAEMON=false +RUN npm run qrcampaign:build + +FROM nginx:alpine AS runner +RUN rm -rf /usr/share/nginx/html/* +COPY --from=builder /app/dist/apps/qrcampaign /usr/share/nginx/html +EXPOSE 80 +CMD ["nginx", "-g", "daemon off;"] diff --git a/flake.nix b/flake.nix index 4440357..ae5c466 100644 --- a/flake.nix +++ b/flake.nix @@ -33,6 +33,7 @@ dimentorin = mkViteApp { name = "dimentorin"; buildScript = "dimentorin:build"; }; hackathon = mkViteApp { name = "hackathon"; buildScript = "hackathon:build"; }; infra = mkViteApp { name = "infra"; buildScript = "infra:build"; }; + qrcampaign = mkViteApp { name = "qrcampaign"; buildScript = "qrcampaign:build"; }; # Next.js app landing = landingApp; @@ -63,7 +64,7 @@ echo " nx dev - Start development server" echo " nx build - Build an app" echo "" - echo "Apps: landing, backoffice, gacha, dimentorin, hackathon" + echo "Apps: landing, backoffice, gacha, dimentorin, hackathon, qrcampaign" echo "" echo "Build packages with:" echo " nix build .#landing" @@ -71,6 +72,7 @@ echo " nix build .#gacha" echo " nix build .#dimentorin" echo " nix build .#hackathon" + echo " nix build .#qrcampaign" ''; }; } @@ -84,6 +86,7 @@ dimentorin = import ./nix/modules/static-app.nix { inherit self; } { appName = "dimentorin"; }; hackathon = import ./nix/modules/static-app.nix { inherit self; } { appName = "hackathon"; }; infra = import ./nix/modules/static-app.nix { inherit self; } { appName = "infra"; }; + qrcampaign = import ./nix/modules/static-app.nix { inherit self; } { appName = "qrcampaign"; }; # All-in-one module that enables all apps all = { config, lib, pkgs, ... }: { @@ -94,6 +97,7 @@ self.nixosModules.dimentorin self.nixosModules.hackathon self.nixosModules.infra + self.nixosModules.qrcampaign ]; }; }; @@ -107,6 +111,7 @@ dimentorin = self.packages.${final.system}.dimentorin; hackathon = self.packages.${final.system}.hackathon; infra = self.packages.${final.system}.infra; + qrcampaign = self.packages.${final.system}.qrcampaign; # Function to build hackathon with custom environment variables (e.g., Supabase) mkHackathonWithEnv = envVars: import ./nix/mkViteApp.nix { pkgs = final;