feat: add data directory support and update Docker configurations
This commit is contained in:
parent
f05f5a01ad
commit
657019f123
@ -13,3 +13,4 @@ Dockerfile
|
|||||||
docker-compose*.yml
|
docker-compose*.yml
|
||||||
makefile
|
makefile
|
||||||
# .env TIDAK diignore: NEXT_PUBLIC_* di-inline saat build
|
# .env TIDAK diignore: NEXT_PUBLIC_* di-inline saat build
|
||||||
|
data
|
||||||
|
|||||||
@ -25,6 +25,8 @@ RUN addgroup -S nodejs -g 1001 && adduser -S nextjs -u 1001 -G nodejs
|
|||||||
COPY --from=builder --chown=nextjs:nodejs /app/.next/standalone ./
|
COPY --from=builder --chown=nextjs:nodejs /app/.next/standalone ./
|
||||||
COPY --from=builder --chown=nextjs:nodejs /app/.next/static ./.next/static
|
COPY --from=builder --chown=nextjs:nodejs /app/.next/static ./.next/static
|
||||||
COPY --from=builder --chown=nextjs:nodejs /app/public ./public
|
COPY --from=builder --chown=nextjs:nodejs /app/public ./public
|
||||||
|
# /app dibuat root oleh WORKDIR, jadi folder tulis harus dibuat & di-chown eksplisit
|
||||||
|
RUN mkdir -p /app/data && chown nextjs:nodejs /app/data
|
||||||
USER nextjs
|
USER nextjs
|
||||||
EXPOSE 3000
|
EXPOSE 3000
|
||||||
CMD ["node", "server.js"]
|
CMD ["node", "server.js"]
|
||||||
|
|||||||
0
data/.gitkeep
Normal file
0
data/.gitkeep
Normal file
@ -10,3 +10,5 @@ services:
|
|||||||
logging:
|
logging:
|
||||||
driver: json-file
|
driver: json-file
|
||||||
options: { max-size: "100m", max-file: "5" }
|
options: { max-size: "100m", max-file: "5" }
|
||||||
|
volumes:
|
||||||
|
- ./data:/app/data
|
||||||
|
|||||||
@ -6,3 +6,5 @@ services:
|
|||||||
build: .
|
build: .
|
||||||
ports:
|
ports:
|
||||||
- "${PORT_LOCAL:-3000}:3000"
|
- "${PORT_LOCAL:-3000}:3000"
|
||||||
|
volumes:
|
||||||
|
- ./data:/app/data
|
||||||
|
|||||||
@ -10,3 +10,5 @@ services:
|
|||||||
logging:
|
logging:
|
||||||
driver: json-file
|
driver: json-file
|
||||||
options: { max-size: "100m", max-file: "5" }
|
options: { max-size: "100m", max-file: "5" }
|
||||||
|
volumes:
|
||||||
|
- ./data:/app/data
|
||||||
|
|||||||
8
makefile
8
makefile
@ -43,7 +43,7 @@ help: ## Tampilkan daftar perintah
|
|||||||
| awk -F'|' '{printf " %-16s %s\n", $$1, $$2}'
|
| awk -F'|' '{printf " %-16s %s\n", $$1, $$2}'
|
||||||
|
|
||||||
# ---- deploy ----
|
# ---- deploy ----
|
||||||
deploy-%: log-dir ## Pull + build + up (prod/dev)
|
deploy-%: log-dir data-dir-% ## Pull + build + up (prod/dev)
|
||||||
@$(LOG) start $(PROJECT) $* || true
|
@$(LOG) start $(PROJECT) $* || true
|
||||||
@cd $(WORK_DIR) || exit 1; \
|
@cd $(WORK_DIR) || exit 1; \
|
||||||
( \
|
( \
|
||||||
@ -58,7 +58,7 @@ deploy-%: log-dir ## Pull + build + up (prod/dev)
|
|||||||
exit $$RC
|
exit $$RC
|
||||||
|
|
||||||
# ---- operasional ----
|
# ---- operasional ----
|
||||||
up-%: ## Build + start container
|
up-%: data-dir-% ## Build + start container
|
||||||
@cd $(WORK_DIR) && $(DC) up -d --build --remove-orphans
|
@cd $(WORK_DIR) && $(DC) up -d --build --remove-orphans
|
||||||
|
|
||||||
stop-%: ## Stop container
|
stop-%: ## Stop container
|
||||||
@ -92,3 +92,7 @@ ps: ## Status semua container
|
|||||||
log-dir:
|
log-dir:
|
||||||
@sudo mkdir -p $(LOG_DIR)/$(PROJECT) && sudo touch $(OUT_FILE) \
|
@sudo mkdir -p $(LOG_DIR)/$(PROJECT) && sudo touch $(OUT_FILE) \
|
||||||
&& sudo chown -R $$(id -u):$$(id -g) $(LOG_DIR)/$(PROJECT)
|
&& sudo chown -R $$(id -u):$$(id -g) $(LOG_DIR)/$(PROJECT)
|
||||||
|
|
||||||
|
# folder data di-bind ke /app/data; user container (nextjs) ber-UID 1001
|
||||||
|
data-dir-%:
|
||||||
|
@cd $(WORK_DIR) && sudo mkdir -p data && sudo chown -R 1001:1001 data
|
||||||
|
|||||||
@ -4,7 +4,8 @@ import path from "path";
|
|||||||
|
|
||||||
export const runtime = "nodejs";
|
export const runtime = "nodejs";
|
||||||
|
|
||||||
const DATA_DIR = path.join(process.cwd(), "data");
|
// Bisa dioverride lewat env kalau folder kerja tidak writable (mis. container).
|
||||||
|
const DATA_DIR = process.env.CONTACT_DATA_DIR || path.join(process.cwd(), "data");
|
||||||
const DATA_FILE = path.join(DATA_DIR, "contact-messages.json");
|
const DATA_FILE = path.join(DATA_DIR, "contact-messages.json");
|
||||||
|
|
||||||
interface ContactMessage {
|
interface ContactMessage {
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user