Rasyiq03 commited on
Commit
35b8631
Β·
verified Β·
1 Parent(s): 1773f9a

Rilis e5a1410eea3c84f8692505f382ceead646fcc971

Browse files
Files changed (3) hide show
  1. Dockerfile +58 -30
  2. README.md +11 -6
  3. REVISION +1 -0
Dockerfile CHANGED
@@ -1,43 +1,71 @@
1
- # ──────────────────────────────────────────────
2
- # Stage 1: Builder (Kompilasi TS -> JS)
3
- # ──────────────────────────────────────────────
4
- # Menggunakan Node.js 20 karena NestJS 11 & Baileys mewajibkan versi 20+
5
- FROM node:20 AS builder
 
 
 
6
 
7
- WORKDIR /app
 
 
 
8
 
9
- # Menyalin file manifes dependensi
10
- COPY package*.json ./
 
11
 
12
- # Instalasi seluruh dependensi dengan flag legacy untuk menghindari konflik peer
13
- RUN npm install --legacy-peer-deps
 
 
14
 
15
- # Menyalin seluruh kode sumber dan melakukan proses build
16
- COPY . .
17
- RUN npm run build
18
 
19
- # ──────────────────────────────────────────────
20
- # Stage 2: Runner (Hanya menjalankan JavaScript)
21
- # ──────────────────────────────────────────────
22
- FROM node:20-slim AS runner
 
 
 
 
 
 
 
 
23
 
24
- # Menggunakan pengguna 'node' bawaan (UID 1000)
25
- USER node
26
 
27
- # Menetapkan direktori kerja di dalam folder home pengguna node
28
- WORKDIR /home/node/app
 
 
 
 
29
 
30
- # Menyalin file manifes dependensi
31
- COPY --chown=node:node package*.json ./
 
 
32
 
33
- # Instalasi hanya dependensi produksi (Node 20 mendukung flag --omit=dev)
34
- RUN npm install --omit=dev --legacy-peer-deps
 
 
 
 
35
 
36
- # Menyalin hasil kompilasi dari stage builder
37
- COPY --from=builder --chown=node:node /app/dist ./dist
38
 
39
- # Ekspos port standar Hugging Face
 
40
  EXPOSE 7860
41
 
42
- # Menjalankan aplikasi menggunakan script start:prod (node dist/main)
43
- CMD ["npm", "run", "start:prod"]
 
 
1
+ # syntax=docker/dockerfile:1
2
+ #
3
+ # Image API Scheffin untuk Hugging Face Space.
4
+ #
5
+ # Space ini publik, jadi kode sumber TIDAK di-push ke sini. Saat build, kode
6
+ # di-clone dari repo GitHub privat memakai deploy key (baca-saja) dari secret
7
+ # Space GITHUB_DEPLOY_KEY. Commit yang dibangun tertulis di file REVISION, yang
8
+ # diisi workflow deploy-api.yml.
9
 
10
+ # ==========================================
11
+ # Tahap 1: clone dan build
12
+ # ==========================================
13
+ FROM node:24-bookworm-slim AS builder
14
 
15
+ RUN apt-get update \
16
+ && apt-get install -y --no-install-recommends git openssh-client ca-certificates \
17
+ && rm -rf /var/lib/apt/lists/*
18
 
19
+ # Kunci host resmi GitHub (api.github.com/meta). Dengan ini koneksi ke server
20
+ # palsu tetap ditolak, tanpa perlu StrictHostKeyChecking=no.
21
+ RUN mkdir -p /root/.ssh \
22
+ && echo "github.com ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIOMqqnkVzrm0SdG6UOoqKLsabgH5C9okWi0dh2l9GKJl" > /root/.ssh/known_hosts
23
 
24
+ # Sebelum clone: setiap SHA baru memecah cache Docker, jadi clone di bawah
25
+ # tidak pernah memakai hasil lama.
26
+ COPY REVISION /tmp/REVISION
27
 
28
+ # Kunci disalin ke file sementara dengan newline di akhir, karena secret yang
29
+ # ditempel di Settings sering tanpa newline dan OpenSSH menolaknya ("invalid
30
+ # format"). File itu dihapus di RUN yang sama, jadi tidak pernah masuk layer.
31
+ RUN --mount=type=secret,id=GITHUB_DEPLOY_KEY,required=true \
32
+ cp /run/secrets/GITHUB_DEPLOY_KEY /tmp/k \
33
+ && echo >> /tmp/k \
34
+ && chmod 600 /tmp/k \
35
+ && GIT_SSH_COMMAND="ssh -i /tmp/k -o IdentitiesOnly=yes" \
36
+ git clone --quiet git@github.com:rasyiq03/Scheffin-App.git /src \
37
+ && rm -f /tmp/k \
38
+ && git -C /src checkout --quiet "$(cat /tmp/REVISION)" \
39
+ && rm -rf /src/.git
40
 
41
+ WORKDIR /src
 
42
 
43
+ # Lockfile hanya ada di root monorepo.
44
+ RUN npm ci -w apps/api \
45
+ && npm exec -w apps/api -- prisma generate \
46
+ && npm run build -w apps/api \
47
+ && npm prune --omit=dev -w apps/api \
48
+ && mkdir -p apps/api/node_modules
49
 
50
+ # ==========================================
51
+ # Tahap 2: runtime
52
+ # ==========================================
53
+ FROM node:24-bookworm-slim
54
 
55
+ # User "node" bawaan image ber-UID 1000, sesuai yang dipakai Spaces.
56
+ COPY --from=builder --chown=node:node /src/node_modules /app/node_modules
57
+ COPY --from=builder --chown=node:node /src/apps/api/dist /app/apps/api/dist
58
+ COPY --from=builder --chown=node:node /src/apps/api/node_modules /app/apps/api/node_modules
59
+ COPY --from=builder --chown=node:node /src/apps/api/package.json /app/apps/api/package.json
60
+ COPY --from=builder --chown=node:node /tmp/REVISION /app/REVISION
61
 
62
+ WORKDIR /app/apps/api
63
+ USER node
64
 
65
+ ENV NODE_ENV=production \
66
+ PORT=7860
67
  EXPOSE 7860
68
 
69
+ # Tanpa `prisma migrate deploy`: migrasi dijalankan manual lewat migrate.yml.
70
+ # GIT_SHA dibaca /api/v1/health supaya workflow rilis tahu versi mana yang live.
71
+ CMD ["sh", "-c", "GIT_SHA=$(cat /app/REVISION) exec node --no-warnings=MODULE_TYPELESS_PACKAGE_JSON dist/src/main"]
README.md CHANGED
@@ -1,12 +1,17 @@
1
  ---
2
- title: Awpai
3
- emoji: πŸ€–
4
- colorFrom: blue
5
- colorTo: indigo
6
  sdk: docker
7
  app_port: 7860
8
  pinned: false
9
  ---
10
 
11
- # WA Reminder Assalam
12
- Bot pengingat otomatis menggunakan Baileys dan Google Sheets untuk organisasi Assalam Polban.
 
 
 
 
 
 
1
  ---
2
+ title: Scheffin API
3
+ emoji: πŸ’°
4
+ colorFrom: green
5
+ colorTo: blue
6
  sdk: docker
7
  app_port: 7860
8
  pinned: false
9
  ---
10
 
11
+ # Scheffin API
12
+
13
+ API untuk aplikasi keuangan keluarga Scheffin. Kode sumbernya ada di repo GitHub
14
+ privat dan diambil saat build, sehingga tidak tersimpan di Space ini.
15
+
16
+ Seluruh isi Space ditulis oleh workflow `deploy-api.yml` di repo tersebut. Jangan
17
+ mengedit file di sini, karena rilis berikutnya akan menimpanya.
REVISION ADDED
@@ -0,0 +1 @@
 
 
1
+ e5a1410eea3c84f8692505f382ceead646fcc971