Files
lcbp3/specs/08-infrastructure/11_Chat.md
admin b84284f8a9
All checks were successful
Build and Deploy / deploy (push) Successful in 4m55s
260218:1712 20260218 TASK-BEFE-001n
2026-02-18 17:12:11 +07:00

8.9 KiB

การติดตั้ง Rocket.Chat บน QNAP

📍 Version: v1.0.0 (Chat Service) 🖥️ Server: QNAP TS-473A (Container Station) 🔗 Docker Compose Path: /share/np-dms/rocketchat/docker-compose.yml 🌐 Domain: chat.np-dms.work


📋 Prerequisites

ก่อนติดตั้ง ต้องมั่นใจว่า:

  1. Docker Network lcbp3 ถูกสร้างแล้ว (ตรวจสอบด้วย docker network ls)
  2. Nginx Proxy Manager (NPM) รันอยู่เพื่อจัดการ SSL และ Domain

1. เตรียม Directories

สร้าง folder สำหรับเก็บข้อมูลเพื่อให้ข้อมูลไม่หายเมื่อลบ container:

# SSH เข้า QNAP
ssh admin@192.168.10.8

# สร้าง directories
mkdir -p /share/np-dms/rocketchat/uploads
mkdir -p /share/np-dms/rocketchat/data/db
mkdir -p /share/np-dms/rocketchat/data/dump

# Permissions: 
# MongoDB ใน Docker ปกติใช้ uid 999 หรือ root, Rocket.Chat ใช้ uid 1000 หรือ root
# การสร้าง folder ผ่าน ssh admin ปกติจะเป็น admin:administrators

2. Docker Compose Configuration

สร้างไฟล์ docker-compose.yml ที่ /share/np-dms/rocketchat/docker-compose.yml:

x-restart: &restart_policy
  restart: unless-stopped

x-logging: &default_logging
  logging:
    driver: "json-file"
    options:
      max-size: "10m"
      max-file: "5"

services:
  mongodb:
    <<: [*restart_policy, *default_logging]
    image: docker.io/library/mongo:7.0
    container_name: mongodb
    command: mongod --oplogSize 128 --replSet rs0 --bind_ip_all
    volumes:
      - /share/np-dms/rocketchat/data/db:/data/db
      - /share/np-dms/rocketchat/data/dump:/dump
    deploy:
      resources:
        limits:
          cpus: "1.0"
          memory: 1G
    networks:
      - lcbp3

  # Service สำหรับ Init Replica Set อัตโนมัติ (รันแล้วจบ)
  mongo-init-replica:
    image: docker.io/library/mongo:7.0
    command: >
      bash -c "for i in `seq 1 30`; do
        mongosh --host mongodb --eval 'rs.initiate({ _id: \"rs0\", members: [ { _id: 0, host: \"mongodb:27017\" } ] })' && break;
        sleep 1;
      done"
    depends_on:
      - mongodb
    networks:
      - lcbp3

  rocketchat:
    <<: [*restart_policy, *default_logging]
    image: registry.rocket.chat/rocketchat/rocket.chat:latest
    container_name: rocketchat
    volumes:
      - /share/np-dms/rocketchat/uploads:/app/uploads
    environment:
      - PORT=3000
      - ROOT_URL=https://chat.np-dms.work
      - MONGO_URL=mongodb://mongodb:27017/rocketchat?replicaSet=rs0
      - MONGO_OPLOG_URL=mongodb://mongodb:27017/local?replicaSet=rs0
      - DEPLOY_METHOD=docker
      - ACCOUNTS_AVATAR_STORE_PATH=/app/uploads
    deploy:
      resources:
        limits:
          cpus: "1.0"
          memory: 1G
    depends_on:
      - mongodb
    networks:
      - lcbp3
    expose:
      - "3000"

networks:
  lcbp3:
    external: true

📝 Note:

  • MongoDB Replica Set (rs0): จำเป็นสำหรับ Rocket.Chat เพื่อใช้ Oplog
  • Expose: เราเปิด port 3000 ภายใน network lcbp3 เท่านั้น ไม่ expose ออก host โดยตรง เพื่อความปลอดภัยและให้ผ่าน NPM
  • Resources: กำหนด CPU/Memory Limit เพื่อป้องกันไม่ให้กินทรัพยากรเครื่อง QNAP มากเกินไป

3. Deployment

  1. ไปที่ Container Station บน QNAP
  2. เลือกเมนู Applications -> Create
  3. ตั้งชื่อ Application: lcbp3-chat
  4. วาง Code จาก docker-compose.yml ด้านบนลงไป
  5. Check Env Variable Validations
  6. กด Create

4. Nginx Proxy Manager (NPM) Setup

ต้องตั้งค่า Proxy Host ที่ NPM เพื่อให้เข้าใช้งานผ่าน https://chat.np-dms.work ได้

  1. Login NPM Admin (https://npm.np-dms.work)
  2. ไปที่ Hosts -> Proxy Hosts -> Add Proxy Host
  3. Details Tab:
    • Domain Names: chat.np-dms.work
    • Scheme: http
    • Forward Hostname: rocketchat (ชื่อ service ใน docker-compose)
    • Forward Port: 3000
    • Cache Assets:
    • Block Common Exploits:
    • Websockets Support: (⚠️ สำคัญมากสำหรับ Real-time chat)
  4. SSL Tab:
    • SSL Certificate: Request a new SSL Certificate (Let's Encrypt) หรือใช้ Wildcard เดิมที่มี
    • Force SSL:
    • HTTP/2 Support:
  5. กด Save

5. Verification

  1. เปิด Browser เข้าไปที่ https://chat.np-dms.work
  2. จะพบหน้า Setup Wizard
  3. กรอกข้อมูล Admin และ Organization เพื่อเริ่มใช้งาน

6. Configuration & Initial Setup

6.1 Setup Wizard (First Run)

เมื่อเข้าสู่ระบบครั้งแรก จะพบกับ Setup Wizard ให้กรอกข้อมูลดังนี้:

  1. Admin Info:

    • Name: Administrator (หรือชื่อผู้ดูแลระบบ)
    • Username: admin (แนะนำให้เปลี่ยนเพื่อความปลอดภัย)
    • Email: admin@np-dms.work
    • Password: (ตั้งรหัสผ่านที่ซับซ้อนและบันทึกใน Secrets Management)
  2. Organization Info:

    • Organization Type: Government / Public Sector
    • Organization Name: Laem Chabang Port Phase 3
    • Industry: Construction / Infrastructure
    • Size: 51-100 (หรือตามจริง)
    • Country: Thailand
  3. Server Info:

    • Site Name: LCBP3 DMS Chat
    • Language: English / Thai
    • Server Type: Private Team
    • 2FA: แนะนำให้เปิด Two Factor Authentication (Optional)
  4. Register Server:

    • Standalone: เลือก "Keep standalone" หากต้องการความเป็นส่วนตัวสูงสุด (Privacy-first / Air-gapped)
    • Registered: หากต้องการใช้ Mobile App Push Notification Gateway ของ Rocket.Chat (ฟรีจำกัดจำนวน)

💡 Tip: หากเลือก Standalone จะไม่มี Push Notification ไปยังมือถือ (iOS/Android) แต่ยังใช้งานผ่าน Browser และ Desktop App ได้ปกติ

6.2 Post-Installation Settings

หลังจาก Setup เสร็จสิ้น แนะนำให้ตรวจสอบค่าเหล่านี้ใน Administration:

  1. General > Site URL: ต้องเป็น https://chat.np-dms.work
  2. General > Force SSL: ต้องเป็น True
  3. File Upload > File Upload: เปิดใช้งาน
  4. File Upload > Max File Size: ปรับตามนโยบาย (Default 2MB อาจน้อยไป แนะนำ 50MB+)
    • หมายเหตุ: ต้องสัมพันธ์กับ client_max_body_size ใน NPM ด้วย

7. Maintenance

Backup Strategy

ข้อมูลสำคัญจะอยู่ที่ Path บน QNAP:

  • /share/np-dms/rocketchat/data/db (Database)
  • /share/np-dms/rocketchat/uploads (Files)

ระบบ Backup (Restic บน ASUSTOR) ควรสั่ง backup folder /share/np-dms/ ทั้งหมดอยู่แล้ว

Troubleshooting

หากเข้าเว็บไม่ได้ หรือขึ้น 502 Bad Gateway:

  1. เช็ค Logs Rocket.Chat: docker logs -f rocketchat
  2. เช็ค Logs MongoDB: docker logs -f mongodb (ดูว่า Replica Set init หรือยัง)
  3. เช็ค NPM: มั่นใจว่า Forward Hostname ถูกต้อง (rocketchat ต้องอยู่ใน network เดียวกันคือ lcbp3)

📦 Resource Summary

Service Image CPU Limit Memory Limit Port
mongodb mongo:7.0 1.0 1 GB 27017
rocketchat registry.rocket.chat/rocketchat/rocket.chat 1.0 1 GB 3000