clean environment variable
This commit is contained in:
parent
7494e1b4e0
commit
3e800533d5
2 changed files with 67 additions and 51 deletions
60
.env.example
60
.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
|
# N8 (optional): allowlist โฮสต์ลิงก์ไฟล์รีโมต — ไม่ตั้ง = admincourt.go.th
|
||||||
# EXTERNAL_FILE_HOSTS=admincourt.go.th
|
# EXTERNAL_FILE_HOSTS=admincourt.go.th
|
||||||
# N10 (optional): API key ของ /api/external/* (backend e-Court เรียก server-to-server)
|
# 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)
|
# Sign/Hash ที่ใช้ฝังในเอกสาร(docx)
|
||||||
SECRET="super_secret"
|
SECRET=""
|
||||||
PRIVATE_KEY_HEX="8f2077b57b39399b6a7828f35da03a63ade8e3a36a6bf437b091a8bdb3d18ee1"
|
PRIVATE_KEY_HEX=""
|
||||||
PUBLIC_KEY_HEX="66b09b4a1b66271d5728c592c2409657e1c070a7bf371bf9f6ed457855270546"
|
PUBLIC_KEY_HEX=""
|
||||||
# Optional เวลาหมดอายุที่ฝังไว้ในข้อมูล (ticket_data)
|
## ไม่ตั้ง/ว่าง = ปฏิเสธทุก request (fail closed) — ตั้งค่ายาวและสุ่ม เช่น 32+ ตัวอักษร
|
||||||
TICKET_SEC=300
|
EXTERNAL_API_KEY=""
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
# 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
|
|
||||||
|
|
||||||
# docver token (2026-10-22): API key ของ POST /api/documents/token (header x-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)
|
# และ POST /api/note/auth/token (เส้น mint login-token ของแอป note — PLAN-SSO.md)
|
||||||
# ไม่ตั้ง/ว่าง = ปฏิเสธทุก request (fail closed) — ตั้งค่ายาวและสุ่ม เช่น 32+ ตัวอักษร
|
# ไม่ตั้ง/ว่าง = ปฏิเสธทุก request (fail closed) — ตั้งค่ายาวและสุ่ม เช่น 32+ ตัวอักษร
|
||||||
|
|
@ -48,6 +21,29 @@ DOCVER_API_KEY=
|
||||||
# ไม่ได้ (ทางเข้า session เดียวคือลิงก์ SSO) — dev ต้องมีค่านี้ใน .env เสมอ
|
# ไม่ได้ (ทางเข้า session เดียวคือลิงก์ SSO) — dev ต้องมีค่านี้ใน .env เสมอ
|
||||||
# ⚠️ ก่อน production: rotate ค่าจริง (ค่า hex เดิมเคยถูก commit ไว้ใน comment — ถือว่าหลุด)
|
# ⚠️ ก่อน production: rotate ค่าจริง (ค่า hex เดิมเคยถูก commit ไว้ใน comment — ถือว่าหลุด)
|
||||||
DOCVER_TOKEN_SECRET=
|
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
|
# DOCVER_TOKEN_TTL_SECONDS=3600
|
||||||
|
|
||||||
# (ถอดแล้ว 2026-10-30) NOTE_SESSION_SECRET ของรอบ cookie oacCaseSig — แอป note
|
# (ถอดแล้ว 2026-10-30) NOTE_SESSION_SECRET ของรอบ cookie oacCaseSig — แอป note
|
||||||
|
|
|
||||||
|
|
@ -7,41 +7,38 @@
|
||||||
# ก่อน แล้ว compose จะต่อวอลุ่ม judes-note-db-data เดิมได้เลย ข้อมูลไม่หาย
|
# ก่อน แล้ว compose จะต่อวอลุ่ม judes-note-db-data เดิมได้เลย ข้อมูลไม่หาย
|
||||||
services:
|
services:
|
||||||
db:
|
db:
|
||||||
image: postgres:17-alpine
|
image: postgres:18-alpine
|
||||||
container_name: judes-note-db
|
restart: unless-stopped
|
||||||
environment:
|
environment:
|
||||||
POSTGRES_USER: postgres
|
POSTGRES_USER: ${POSTGRES_USER:-postgres}
|
||||||
POSTGRES_PASSWORD: postgres
|
POSTGRES_PASSWORD: ${POSTGRES_PASSWORD:-postgres}
|
||||||
# ชื่อ database ตรง DATABASE_URL ใน .env (สร้างตอน first init ของวอลุ่มเท่านั้น
|
POSTGRES_DB: ${POSTGRES_DB:-note}
|
||||||
# — วอลุ่มเดิมจาก docker run ที่ init ด้วย postgres ต้องสร้างเอง:
|
PGDATA: /var/lib/postgresql/data/pgdata
|
||||||
# docker exec judes-note-db psql -U postgres -c 'CREATE DATABASE "ecourt-note"')
|
|
||||||
POSTGRES_DB: ecourt-note
|
|
||||||
ports:
|
ports:
|
||||||
- "54322:5432"
|
- "54322:5432"
|
||||||
volumes:
|
volumes:
|
||||||
- judes-note-db-data:/var/lib/postgresql/data
|
- judes-note-db-data:/var/lib/postgresql/data
|
||||||
healthcheck:
|
healthcheck:
|
||||||
test: ["CMD-SHELL", "pg_isready -U postgres -d postgres"]
|
test: ["CMD-SHELL", "pg_isready -U postgres -d postgres"]
|
||||||
interval: 5s
|
interval: 10s
|
||||||
timeout: 3s
|
timeout: 5s
|
||||||
retries: 10
|
retries: 5
|
||||||
|
|
||||||
# Object storage ของกลุ่ม API เอกสาร versioning (docs/PLAN-DOCVER.md §6) —
|
# Object storage ของกลุ่ม API เอกสาร versioning (docs/PLAN-DOCVER.md §6) —
|
||||||
# bucket docver ไม่ต้องสร้างเอง: app สร้างตอน first use ผ่าน ensureBucket
|
# bucket docver ไม่ต้องสร้างเอง: app สร้างตอน first use ผ่าน ensureBucket
|
||||||
# (ใช้ registry ทางการของ MinIO ที่ quay.io + pin RELEASE — Docker Hub
|
# (ใช้ registry ทางการของ MinIO ที่ quay.io + pin RELEASE — Docker Hub
|
||||||
# ของ minio/minio เจอ rate limit/เข้าไม่ได้บ่อย)
|
# ของ minio/minio เจอ rate limit/เข้าไม่ได้บ่อย)
|
||||||
minio:
|
minio:
|
||||||
image: quay.io/minio/minio:RELEASE.2025-09-07T16-13-09Z
|
image: docker.io/pgsty/silo:RELEASE.2026-10-26T00-00-00Z
|
||||||
container_name: judes-note-minio
|
|
||||||
command: server /data --console-address ":9001"
|
command: server /data --console-address ":9001"
|
||||||
environment:
|
environment:
|
||||||
MINIO_ROOT_USER: minioadmin
|
MINIO_ROOT_USER: ${MINIO_ACCESS_KEY}
|
||||||
MINIO_ROOT_PASSWORD: minioadmin
|
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:
|
ports:
|
||||||
# โฮสต์ใช้ 19000/19001 เพราะ 9000/9001 ชนกับ container ของโปรเจกต์อื่นในเครื่องนี้
|
- "${MINIO_PORT}:9000" # S3 API
|
||||||
# (ข้างใน container ยังเป็น 9000/9001 ตาม default ของ MinIO)
|
- "9001:9001" # MinIO console
|
||||||
- "19000:9000" # S3 API (MINIO_ENDPOINT/MINIO_PORT)
|
|
||||||
- "19001:9001" # console ดู bucket/object ผ่าน browser
|
|
||||||
volumes:
|
volumes:
|
||||||
- judes-note-minio-data:/data
|
- judes-note-minio-data:/data
|
||||||
healthcheck:
|
healthcheck:
|
||||||
|
|
@ -50,6 +47,29 @@ services:
|
||||||
timeout: 3s
|
timeout: 3s
|
||||||
retries: 10
|
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:
|
volumes:
|
||||||
# pin ชื่อจริงไม่มี prefix <project>_ ของ compose ให้ตรงชื่อวอลุ่มจาก docker run เดิม
|
# pin ชื่อจริงไม่มี prefix <project>_ ของ compose ให้ตรงชื่อวอลุ่มจาก docker run เดิม
|
||||||
judes-note-db-data:
|
judes-note-db-data:
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue