From 3e800533d584489ad1b28e5dac5f6ab1a03302a9 Mon Sep 17 00:00:00 2001 From: oom Date: Tue, 3 Nov 2026 14:53:08 +0700 Subject: [PATCH] clean environment variable --- .env.example | 60 ++++++++++++++++++++++------------------------ docker-compose.yml | 58 +++++++++++++++++++++++++++++--------------- 2 files changed, 67 insertions(+), 51 deletions(-) diff --git a/.env.example b/.env.example index b1e22c2..7ee4d24 100644 --- a/.env.example +++ b/.env.example @@ -1,40 +1,13 @@ -# PostgreSQL container judes-note-db (สร้างด้วย docker run ตาม README) -DATABASE_URL=postgresql://postgres:postgres@127.0.0.1:54322/ecourt-note # N8 (optional): allowlist โฮสต์ลิงก์ไฟล์รีโมต — ไม่ตั้ง = admincourt.go.th # EXTERNAL_FILE_HOSTS=admincourt.go.th # N10 (optional): API key ของ /api/external/* (backend e-Court เรียก server-to-server) -# ไม่ตั้ง/ว่าง = ปฏิเสธทุก request (fail closed) — ตั้งค่ายาวและสุ่ม เช่น 32+ ตัวอักษร -# EXTERNAL_API_KEY= - -# สำหรับตัวอย่างระบบนอกเรียกใช้ API ของ template -DOCEDIT_BASE_URL=http://192.168.2.51:3000/docedit -# สำหรับตัวอย่างระบบนอกเรียกใช้ API ของ template -EXTERNAL_API_KEY='secret-api-key-1234' -# ที่เก็บไฟล์เทมเพลต(docx) ค่า default คือ /app/public/tmpl -#TMPL_PATH='./public/tmpl' # Sign/Hash ที่ใช้ฝังในเอกสาร(docx) -SECRET="super_secret" -PRIVATE_KEY_HEX="8f2077b57b39399b6a7828f35da03a63ade8e3a36a6bf437b091a8bdb3d18ee1" -PUBLIC_KEY_HEX="66b09b4a1b66271d5728c592c2409657e1c070a7bf371bf9f6ed457855270546" -# Optional เวลาหมดอายุที่ฝังไว้ในข้อมูล (ticket_data) -TICKET_SEC=300 - - - -# MinIO ของ API เอกสาร versioning (docs/PLAN-DOCVER.md §6) — ค่านี้ตรง docker-compose.yml -# (MINIO_ENDPOINT/MINIO_ACCESS_KEY/MINIO_SECRET_KEY ไม่ตั้ง = ทุก endpoint ของกลุ่มนี้ตอบ 500) -# หมายเหตุ: พอร์ตโฮสต์เป็น 19000 เพราะ 9000/9001 ชนกับโปรเจกต์อื่นในเครื่อง dev -# (ใน production ตั้งเป็นพอร์ตจริงที่ deploy) และ presigned URL อ้าง endpoint นี้ตรง ๆ — -# production ต้องเป็นโฮสต์ที่เบราว์เซอร์ของผู้ใช้เข้าถึงได้ ไม่ใช่แค่ที่ Next server เข้าถึงได้ -MINIO_ENDPOINT=127.0.0.1 -MINIO_PORT=19000 -MINIO_USE_SSL=false -MINIO_ACCESS_KEY=minioadmin -MINIO_SECRET_KEY=minioadmin -# MINIO_BUCKET=docver -# DOCVER_LINK_TTL_SECONDS=900 - +SECRET="" +PRIVATE_KEY_HEX="" +PUBLIC_KEY_HEX="" +## ไม่ตั้ง/ว่าง = ปฏิเสธทุก request (fail closed) — ตั้งค่ายาวและสุ่ม เช่น 32+ ตัวอักษร +EXTERNAL_API_KEY="" # docver token (2026-10-22): API key ของ POST /api/documents/token (header x-api-key) # และ POST /api/note/auth/token (เส้น mint login-token ของแอป note — PLAN-SSO.md) # ไม่ตั้ง/ว่าง = ปฏิเสธทุก request (fail closed) — ตั้งค่ายาวและสุ่ม เช่น 32+ ตัวอักษร @@ -48,6 +21,29 @@ DOCVER_API_KEY= # ไม่ได้ (ทางเข้า session เดียวคือลิงก์ SSO) — dev ต้องมีค่านี้ใน .env เสมอ # ⚠️ ก่อน production: rotate ค่าจริง (ค่า hex เดิมเคยถูก commit ไว้ใน comment — ถือว่าหลุด) DOCVER_TOKEN_SECRET= +# ใช้ตอน migrate และ การใช้งาน +DATABASE_URL=postgresql://postgres:postgres@127.0.0.1:54322/ecourt-note +### สำหรับโค้ดตัวอย่างระบบนอกเรียกเข้ามาไม่ได้ใช้ในระบบนี้ +DOCEDIT_BASE_URL=http://127.0.0.1:3000/docedit +# Optional เวลาหมดอายุที่ฝังไว้ในข้อมูล (ticket_data), worker ควรเท่ากับจำนวน CPU core -1 +TMPL_PATH='./public/tmpl' +TICKET_SEC=300 +DOCX_WORKERS=3 + +## สำหรับ docker-compose.yaml +POSTGRES_USER=postgres +POSTGRES_PASSWORD=postgres +POSTGRES_DB=note + +MINIO_ENDPOINT=127.0.0.1 +MINIO_PORT=19000 +MINIO_USE_SSL=false +MINIO_ACCESS_KEY=minioadmin +MINIO_SECRET_KEY=minioadmin +# MINIO_BUCKET=docver + +# DOCVER_LINK_TTL_SECONDS=900 + # DOCVER_TOKEN_TTL_SECONDS=3600 # (ถอดแล้ว 2026-10-30) NOTE_SESSION_SECRET ของรอบ cookie oacCaseSig — แอป note diff --git a/docker-compose.yml b/docker-compose.yml index b6a099c..f54a618 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -7,41 +7,38 @@ # ก่อน แล้ว compose จะต่อวอลุ่ม judes-note-db-data เดิมได้เลย ข้อมูลไม่หาย services: db: - image: postgres:17-alpine - container_name: judes-note-db + image: postgres:18-alpine + restart: unless-stopped environment: - POSTGRES_USER: postgres - POSTGRES_PASSWORD: postgres - # ชื่อ database ตรง DATABASE_URL ใน .env (สร้างตอน first init ของวอลุ่มเท่านั้น - # — วอลุ่มเดิมจาก docker run ที่ init ด้วย postgres ต้องสร้างเอง: - # docker exec judes-note-db psql -U postgres -c 'CREATE DATABASE "ecourt-note"') - POSTGRES_DB: ecourt-note + POSTGRES_USER: ${POSTGRES_USER:-postgres} + POSTGRES_PASSWORD: ${POSTGRES_PASSWORD:-postgres} + POSTGRES_DB: ${POSTGRES_DB:-note} + PGDATA: /var/lib/postgresql/data/pgdata ports: - "54322:5432" volumes: - judes-note-db-data:/var/lib/postgresql/data healthcheck: test: ["CMD-SHELL", "pg_isready -U postgres -d postgres"] - interval: 5s - timeout: 3s - retries: 10 + interval: 10s + timeout: 5s + retries: 5 # Object storage ของกลุ่ม API เอกสาร versioning (docs/PLAN-DOCVER.md §6) — # bucket docver ไม่ต้องสร้างเอง: app สร้างตอน first use ผ่าน ensureBucket # (ใช้ registry ทางการของ MinIO ที่ quay.io + pin RELEASE — Docker Hub # ของ minio/minio เจอ rate limit/เข้าไม่ได้บ่อย) minio: - image: quay.io/minio/minio:RELEASE.2025-09-07T16-13-09Z - container_name: judes-note-minio + image: docker.io/pgsty/silo:RELEASE.2026-10-26T00-00-00Z command: server /data --console-address ":9001" environment: - MINIO_ROOT_USER: minioadmin - MINIO_ROOT_PASSWORD: minioadmin + MINIO_ROOT_USER: ${MINIO_ACCESS_KEY} + MINIO_ROOT_PASSWORD: ${MINIO_SECRET_KEY} + # MC_HOST_local: http://${MINIO_ROOT_USER}:${MINIO_ROOT_PASSWORD}@localhost:39000 + MINIO_BROWSER_REDIRECT_URL: https://${APP_DOMAIN}/console/ ports: - # โฮสต์ใช้ 19000/19001 เพราะ 9000/9001 ชนกับ container ของโปรเจกต์อื่นในเครื่องนี้ - # (ข้างใน container ยังเป็น 9000/9001 ตาม default ของ MinIO) - - "19000:9000" # S3 API (MINIO_ENDPOINT/MINIO_PORT) - - "19001:9001" # console ดู bucket/object ผ่าน browser + - "${MINIO_PORT}:9000" # S3 API + - "9001:9001" # MinIO console volumes: - judes-note-minio-data:/data healthcheck: @@ -50,6 +47,29 @@ services: timeout: 3s retries: 10 + # สร้าง bucket docx-versions + docx-templates แบบ private (anonymous = none) + # idempotent — รันซ้ำได้ด้วย --ignore-existing + minio-init: + # quay.io mirror — Docker Hub ทำ minio/mc เป็น private แล้ว (pull access denied) + image: cgr.dev/chainguard/minio-client:latest-dev + depends_on: + minio: + condition: service_healthy + restart: "no" + environment: + MINIO_ROOT_USER: ${MINIO_ACCESS_KEY} + MINIO_ROOT_PASSWORD: ${MINIO_SECRET_KEY} + entrypoint: > + /bin/sh -c " + set -e; + mc alias set local http://minio:9000 $$MINIO_ROOT_USER $$MINIO_ROOT_PASSWORD; + mc mb --ignore-existing local/docx-versions; + mc mb --ignore-existing local/docx-templates; + mc anonymous set none local/docx-versions; + mc anonymous set none local/docx-templates; + echo 'MinIO buckets ready: docx-versions, docx-templates (private)'; + " + volumes: # pin ชื่อจริงไม่มี prefix _ ของ compose ให้ตรงชื่อวอลุ่มจาก docker run เดิม judes-note-db-data: