ติดตั้ง Odoo ด้วย Docker Compose บน Cloud VPS
Odoo เป็นระบบ ERP โอเพนซอร์สที่ครอบคลุมทั้งการขาย คลังสินค้า บัญชี และงานบุคคล การติดตั้งบนเซิร์ฟเวอร์ของตัวเองทำให้ไม่มีค่าใช้จ่ายรายผู้ใช้ต่อเดือน และปรับแต่งได้เต็มที่
คู่มือนี้ติดตั้งรุ่น Community ด้วย Docker Compose พร้อมการตั้งค่าด้านความปลอดภัยที่จำเป็นก่อนใช้งานจริง โดยเฉพาะการปิดหน้าจัดการฐานข้อมูลซึ่งเป็นช่องโหว่ที่พบบ่อยที่สุด
สิ่งที่ต้องเตรียม
- Cloud VPS ที่มี RAM อย่างน้อย 4 GB สำหรับผู้ใช้ไม่เกิน 20 คน
- โดเมนที่ชี้มาที่เซิร์ฟเวอร์
- Docker และ Docker Compose
ขั้นตอนที่ 1: เตรียมไฟล์
sudo mkdir -p /opt/odoo/{config,addons,data,db}
sudo chown -R 101:101 /opt/odoo/{addons,data}
cd /opt/odoo
sudo nano .env
POSTGRES_USER=odoo
POSTGRES_PASSWORD=รหัสผ่านที่ยาวและสุ่ม
POSTGRES_DB=postgres
ADMIN_PASSWORD=รหัสผ่านหลักของ Odoo
sudo chmod 600 .env
sudo nano config/odoo.conf
[options]
addons_path = /mnt/extra-addons
data_dir = /var/lib/odoo
; รหัสผ่านหลัก ใช้สร้างและลบฐานข้อมูล ต้องยาวและเก็บเป็นความลับ
admin_passwd = รหัสผ่านหลักของ Odoo
; ปิดหน้าจัดการฐานข้อมูลหลังติดตั้งเสร็จ สำคัญมาก
list_db = False
; จำนวน worker คำนวณจาก (คอร์ * 2) + 1
workers = 5
max_cron_threads = 2
; จำกัดหน่วยความจำต่อ worker
limit_memory_soft = 640000000
limit_memory_hard = 768000000
limit_time_cpu = 600
limit_time_real = 1200
; proxy
proxy_mode = True
sudo nano docker-compose.yml
services:
db:
image: postgres:16-alpine
restart: unless-stopped
environment:
POSTGRES_USER: ${POSTGRES_USER}
POSTGRES_PASSWORD: ${POSTGRES_PASSWORD}
POSTGRES_DB: ${POSTGRES_DB}
PGDATA: /var/lib/postgresql/data/pgdata
volumes:
- ./db:/var/lib/postgresql/data
healthcheck:
test: ["CMD-SHELL", "pg_isready -U ${POSTGRES_USER}"]
interval: 10s
retries: 5
odoo:
image: odoo:17
restart: unless-stopped
depends_on:
db:
condition: service_healthy
ports:
- "127.0.0.1:8069:8069"
- "127.0.0.1:8072:8072"
volumes:
- ./config:/etc/odoo
- ./addons:/mnt/extra-addons
- ./data:/var/lib/odoo
environment:
HOST: db
USER: ${POSTGRES_USER}
PASSWORD: ${POSTGRES_PASSWORD}
TZ: Asia/Bangkok
sudo docker compose up -d
sudo docker compose logs -f odoo
พอร์ต 8072 คือช่องทาง longpolling ที่ใช้สำหรับการแจ้งเตือนและแชทในตัว Odoo จำเป็นเมื่อตั้ง workers มากกว่า 0
ขั้นตอนที่ 2: ตั้ง Nginx และ SSL
sudo nano /etc/nginx/sites-available/odoo
upstream odoo { server 127.0.0.1:8069; }
upstream odoochat { server 127.0.0.1:8072; }
server {
listen 80;
server_name erp.example.com;
client_max_body_size 200M;
proxy_read_timeout 720s;
proxy_connect_timeout 720s;
proxy_send_timeout 720s;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
location /websocket {
proxy_pass http://odoochat;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
}
location / {
proxy_pass http://odoo;
proxy_redirect off;
}
# ไฟล์คงที่ แคชได้ยาว
location ~* /web/static/ {
proxy_pass http://odoo;
proxy_cache_valid 200 90m;
expires 90d;
}
gzip on;
gzip_types text/css text/plain application/javascript application/json;
}
sudo ln -s /etc/nginx/sites-available/odoo /etc/nginx/sites-enabled/
sudo nginx -t && sudo systemctl reload nginx
sudo certbot --nginx -d erp.example.com --agree-tos -m [email protected] --redirect
ขั้นตอนที่ 3: สร้างฐานข้อมูลแรก
ชั่วคราวให้เปิด list_db = True ก่อน แล้วรีสตาร์ต เข้าหน้าเว็บจะเห็นหน้าสร้างฐานข้อมูล
- Master Password ใส่ตามที่ตั้งใน
admin_passwd - Database Name ตั้งชื่อ เช่น
production - Language เลือก Thai
- Country เลือก Thailand เพื่อให้ผังบัญชีและภาษีถูกตั้งตามกฎหมายไทย
- ไม่ต้องติ๊ก Demo data สำหรับฐานข้อมูลที่จะใช้งานจริง เพราะลบข้อมูลตัวอย่างออกภายหลังยากมาก
เมื่อสร้างเสร็จแล้วกลับไปตั้ง list_db = False ทันที แล้วรีสตาร์ต
sudo sed -i 's/^list_db = True/list_db = False/' /opt/odoo/config/odoo.conf
sudo docker compose restart odoo
หน้าจัดการฐานข้อมูลที่เปิดทิ้งไว้ทำให้ใครก็ตามที่เดารหัสผ่านหลักได้ สามารถลบฐานข้อมูลทั้งหมดหรือดาวน์โหลดข้อมูลไปได้
ขั้นตอนที่ 4: ติดตั้งโมดูลเพิ่ม
cd /opt/odoo/addons
sudo git clone -b 17.0 https://github.com/OCA/l10n-thailand.git
sudo chown -R 101:101 /opt/odoo/addons
sudo docker compose restart odoo
จากนั้นเข้าเมนู Apps แล้วกด Update Apps List ค้นหาโมดูลที่ต้องการแล้วติดตั้ง หากไม่เห็นเมนูนี้ ให้เปิดโหมดนักพัฒนาที่ Settings แล้ว Developer Tools
ขั้นตอนที่ 5: สำรองข้อมูล
sudo nano /usr/local/bin/odoo-backup.sh
#!/bin/bash
set -euo pipefail
cd /opt/odoo
source .env
DEST=/var/backups/odoo
STAMP=$(date +%F-%H%M)
DB=production
mkdir -p "$DEST"
docker compose exec -T db pg_dump -U "$POSTGRES_USER" "$DB" \
| gzip > "$DEST/$DB-$STAMP.sql.gz"
# ไฟล์แนบและรูปภาพ
tar czf "$DEST/filestore-$STAMP.tar.gz" -C /opt/odoo/data filestore
find "$DEST" -name '*.gz' -mtime +30 -delete
echo "odoo backup ok: $STAMP"
ต้องสำรองทั้งสองอย่างเสมอ ฐานข้อมูลเก็บข้อมูลธุรกรรม ส่วน filestore เก็บไฟล์แนบและรูปภาพ การกู้เพียงอย่างเดียวจะได้ระบบที่ไฟล์แนบหายทั้งหมด
กู้คืน
sudo docker compose exec -T db psql -U odoo -c "CREATE DATABASE restore_test;"
zcat /var/backups/odoo/production-2026-09-25-0200.sql.gz | \
sudo docker compose exec -T db psql -U odoo restore_test
ขั้นตอนที่ 6: ปรับจำนวน worker ตามขนาดเครื่อง
สูตรที่ Odoo แนะนำคือ workers = (จำนวนคอร์ * 2) + 1 และหน่วยความจำที่ต้องใช้ประมาณ workers * 700 MB
nproc
free -h
sudo docker stats --no-stream
หากหน่วยความจำไม่พอ ลด workers ลง ระบบจะช้าลงแต่ไม่ล่ม ซึ่งดีกว่าการตั้งสูงเกินจนถูกระบบฆ่ากระบวนการทิ้ง
ปัญหาที่พบบ่อย
หน้าเว็บโหลดช้ามากหรือค้าง
ตรวจว่าตั้ง proxy_mode = True และ Nginx ส่ง header ครบ และตรวจว่าบล็อก /websocket ชี้ไปพอร์ต 8072 ถูกต้อง
ขึ้น Internal Server Error หลังติดตั้งโมดูล
ดู Log ด้วย sudo docker compose logs --tail=100 odoo มักเป็นโมดูลที่ไม่รองรับเวอร์ชันนี้ ถอนออกแล้วรีสตาร์ต
อัปโหลดไฟล์ใหญ่ไม่ได้
ตั้ง client_max_body_size ใน Nginx และเพิ่ม limit_time_real ในคอนฟิกของ Odoo
ลืมรหัสผ่านผู้ใช้ admin
sudo docker compose exec -T db psql -U odoo production -c \
"UPDATE res_users SET password='newpass' WHERE login='admin';"
แล้วรีสตาร์ต Odoo ระบบจะเข้ารหัสรหัสผ่านให้เองในครั้งถัดไปที่เข้าสู่ระบบ
ต้องการ Cloud Server สำหรับระบบ ERP พร้อมทีมดูแล ติดต่อ THAI DATA CLOUD ได้ที่ https://thaidata.cloud/contact/
- Categories:
- Cloud
- Tags:
- Cloud
- Cloud Server
Related Posts
หมวดหมู่ที่น่าสนใจ
- Account Settings
- AD Server
- AI
- Alibaba Cloud
- Anti-Spam Gateway
- AWS Amazon Web Services
- Campaign
- CentOS/AlmaLinux
- Cloud
- Cloud Backup
- Cloud Communication
- Cloud Migration
- Cloud Security
- Cloud Server Management
- Cloud Solution
- Cloud Solution for Government
- Cloud Solutions by Industry
- Cloud Storage
- Cloud VPS App Plus +
- Cloud VPS DirectAdmin
- Cloud VPS Plesk
- CSR
- Cyber Security
- Cybersecurity
- Data Sovereignty
- Database Server
- DDoS
- Digital Tranformation
- Digital Transformation
- Direct Mail
- Directadmin
- Domainname
- Ecommerce
- ERP
- Generative AI
- Getting Started
- Google Cloud
- Google G Suite
- Huawei Cloud
- IT News
- Linux Server
- Managed Cloud Services
- Managed Service Provider
- Manual
- Microsoft
- Microsoft 365
- Microsoft Azure
- News
- On-premise
- Private Mail Server
- Promotion
- Recommend Solution (Enterprise)
- Server
- Sovereign Cloud
- THAI DATA CLOUD Platform
- Ubuntu
- Ubuntu
- Uncategorized
- VMware
- VPS Server
- Web Design
- Web Hosting
- Web Hosting (DirectAdmin)
- Web Hosting (Plesk)
- Web Technologies
- Windows Server
- Wordpress
- Zimbra
- เรื่องราวความประทับใจ
- โซลูชันสำหรับธุรกิจการผลิตและยานยนต์
- โซลูชันสำหรับธุรกิจการศึกษา
- โซลูชันสำหรับธุรกิจการเงิน
- โซลูชันสำหรับธุรกิจขนส่งและกระจายสินค้า
- โซลูชันสำหรับธุรกิจค้าปลีก
- โซลูชันสำหรับธุรกิจท่องเที่ยว
- โซลูชันสำหรับธุรกิจบริการสุขภาพและโรงพยาบาล
- โซลูชันสำหรับธุรกิจประกันภัย
- โซลูชันสำหรับธุรกิจพลังงานและสาธารณูปโภค
- โซลูชันสำหรับธุรกิจสื่อสารมวลชนและเอ็นเตอร์เทนเมนท์
- โซลูชันสำหรับธุรกิจอสังหาริมทรัพย์
- โซลูชันสำหรับธุรกิจเทคโนโลยี








