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
ก่อนติดตั้ง ต้องมั่นใจว่า:
- Docker Network
lcbp3ถูกสร้างแล้ว (ตรวจสอบด้วยdocker network ls) - 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
- ไปที่ Container Station บน QNAP
- เลือกเมนู Applications -> Create
- ตั้งชื่อ Application:
lcbp3-chat - วาง Code จาก
docker-compose.ymlด้านบนลงไป - Check Env Variable Validations
- กด Create
4. Nginx Proxy Manager (NPM) Setup
ต้องตั้งค่า Proxy Host ที่ NPM เพื่อให้เข้าใช้งานผ่าน https://chat.np-dms.work ได้
- Login NPM Admin (
https://npm.np-dms.work) - ไปที่ Hosts -> Proxy Hosts -> Add Proxy Host
- 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)
- Domain Names:
- SSL Tab:
- SSL Certificate: Request a new SSL Certificate (Let's Encrypt) หรือใช้ Wildcard เดิมที่มี
- Force SSL: ✅
- HTTP/2 Support: ✅
- กด Save
5. Verification
- เปิด Browser เข้าไปที่
https://chat.np-dms.work - จะพบหน้า Setup Wizard
- กรอกข้อมูล Admin และ Organization เพื่อเริ่มใช้งาน
6. Configuration & Initial Setup
6.1 Setup Wizard (First Run)
เมื่อเข้าสู่ระบบครั้งแรก จะพบกับ Setup Wizard ให้กรอกข้อมูลดังนี้:
-
Admin Info:
- Name: Administrator (หรือชื่อผู้ดูแลระบบ)
- Username:
admin(แนะนำให้เปลี่ยนเพื่อความปลอดภัย) - Email:
admin@np-dms.work - Password: (ตั้งรหัสผ่านที่ซับซ้อนและบันทึกใน Secrets Management)
-
Organization Info:
- Organization Type: Government / Public Sector
- Organization Name: Laem Chabang Port Phase 3
- Industry: Construction / Infrastructure
- Size: 51-100 (หรือตามจริง)
- Country: Thailand
-
Server Info:
- Site Name: LCBP3 DMS Chat
- Language: English / Thai
- Server Type: Private Team
- 2FA: แนะนำให้เปิด Two Factor Authentication (Optional)
-
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:
- General > Site URL: ต้องเป็น
https://chat.np-dms.work - General > Force SSL: ต้องเป็น
True - File Upload > File Upload: เปิดใช้งาน
- 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:
- เช็ค Logs Rocket.Chat:
docker logs -f rocketchat - เช็ค Logs MongoDB:
docker logs -f mongodb(ดูว่า Replica Set init หรือยัง) - เช็ค 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 |