ติดตั้ง Nextcloud ด้วย Docker Compose บน Cloud VPS
Nextcloud คือระบบเก็บและแชร์ไฟล์แบบเดียวกับบริการคลาวด์ทั่วไป แต่ทำงานบนเซิร์ฟเวอร์ของคุณเอง องค์กรที่มีข้อกำหนดว่าข้อมูลต้องอยู่ในประเทศ หรือไม่ต้องการจ่ายค่าบริการรายผู้ใช้ต่อเดือน จะได้ประโยชน์ชัดเจนที่สุด
คู่มือนี้ติดตั้งด้วย Docker Compose พร้อมฐานข้อมูล MariaDB และ Redis สำหรับแคช ซึ่งเป็นชุดที่รองรับผู้ใช้จำนวนมากได้ดีกว่าการติดตั้งแบบพื้นฐาน
สิ่งที่ต้องเตรียม
- Cloud VPS ที่มี RAM อย่างน้อย 4 GB และพื้นที่ตามปริมาณไฟล์ที่ต้องเก็บ
- โดเมนที่ชี้มาที่ IP ของเซิร์ฟเวอร์แล้ว
- Docker และ Docker Compose ติดตั้งเรียบร้อย
docker --version
docker compose version
ขั้นตอนที่ 1: เตรียมโครงสร้างโฟลเดอร์
sudo mkdir -p /opt/nextcloud/{html,data,db,redis}
cd /opt/nextcloud
sudo nano .env
MYSQL_ROOT_PASSWORD=รหัสผ่านที่ยาวและสุ่ม
MYSQL_PASSWORD=รหัสผ่านอีกตัวที่ต่างกัน
MYSQL_DATABASE=nextcloud
MYSQL_USER=nextcloud
NEXTCLOUD_ADMIN_USER=admin
NEXTCLOUD_ADMIN_PASSWORD=รหัสผ่านผู้ดูแล
NEXTCLOUD_TRUSTED_DOMAINS=cloud.example.com
REDIS_PASSWORD=รหัสผ่านของ Redis
sudo chmod 600 .env
ขั้นตอนที่ 2: เขียนไฟล์ Compose
sudo nano docker-compose.yml
services:
db:
image: mariadb:11
restart: unless-stopped
command: --transaction-isolation=READ-COMMITTED --log-bin=binlog --binlog-format=ROW
volumes:
- ./db:/var/lib/mysql
environment:
MYSQL_ROOT_PASSWORD: ${MYSQL_ROOT_PASSWORD}
MYSQL_DATABASE: ${MYSQL_DATABASE}
MYSQL_USER: ${MYSQL_USER}
MYSQL_PASSWORD: ${MYSQL_PASSWORD}
healthcheck:
test: ["CMD", "healthcheck.sh", "--connect", "--innodb_initialized"]
interval: 10s
retries: 5
redis:
image: redis:7-alpine
restart: unless-stopped
command: redis-server --requirepass ${REDIS_PASSWORD}
volumes:
- ./redis:/data
app:
image: nextcloud:29-apache
restart: unless-stopped
depends_on:
db:
condition: service_healthy
ports:
- "127.0.0.1:8080:80"
volumes:
- ./html:/var/www/html
- ./data:/var/www/html/data
environment:
MYSQL_HOST: db
MYSQL_DATABASE: ${MYSQL_DATABASE}
MYSQL_USER: ${MYSQL_USER}
MYSQL_PASSWORD: ${MYSQL_PASSWORD}
REDIS_HOST: redis
REDIS_HOST_PASSWORD: ${REDIS_PASSWORD}
NEXTCLOUD_ADMIN_USER: ${NEXTCLOUD_ADMIN_USER}
NEXTCLOUD_ADMIN_PASSWORD: ${NEXTCLOUD_ADMIN_PASSWORD}
NEXTCLOUD_TRUSTED_DOMAINS: ${NEXTCLOUD_TRUSTED_DOMAINS}
OVERWRITEPROTOCOL: https
cron:
image: nextcloud:29-apache
restart: unless-stopped
volumes:
- ./html:/var/www/html
- ./data:/var/www/html/data
entrypoint: /cron.sh
depends_on:
- db
- redis
สังเกตว่าพอร์ตผูกกับ 127.0.0.1 เท่านั้น ทำให้เข้าจากอินเทอร์เน็ตโดยตรงไม่ได้ ต้องผ่าน Nginx ที่จะตั้งในขั้นตอนถัดไป ซึ่งปลอดภัยกว่าการเปิดพอร์ตออกไปตรง ๆ
คอนเทนเนอร์ cron จำเป็น Nextcloud มีงานเบื้องหลังที่ต้องทำเป็นระยะ เช่น การจัดทำดัชนีไฟล์และการส่งการแจ้งเตือน หากขาดตัวนี้ระบบจะค่อย ๆ มีปัญหาสะสม
ขั้นตอนที่ 3: เริ่มระบบ
sudo docker compose up -d
sudo docker compose ps
sudo docker compose logs -f app
รอจนเห็นข้อความว่าติดตั้งเสร็จ ครั้งแรกใช้เวลาหลายนาที
ขั้นตอนที่ 4: ตั้ง Nginx และ SSL
sudo apt install -y nginx certbot python3-certbot-nginx
sudo nano /etc/nginx/sites-available/nextcloud
server {
listen 80;
server_name cloud.example.com;
# ไฟล์ขนาดใหญ่ ปรับตามที่ต้องการให้อัปโหลดได้
client_max_body_size 10G;
client_body_timeout 300s;
location / {
proxy_pass http://127.0.0.1:8080;
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;
proxy_buffering off;
proxy_request_buffering off;
proxy_read_timeout 300s;
}
# เส้นทางที่ไคลเอนต์เดสก์ท็อปและมือถือต้องใช้
location /.well-known/carddav { return 301 $scheme://$host/remote.php/dav; }
location /.well-known/caldav { return 301 $scheme://$host/remote.php/dav; }
}
sudo ln -s /etc/nginx/sites-available/nextcloud /etc/nginx/sites-enabled/
sudo nginx -t && sudo systemctl reload nginx
sudo certbot --nginx -d cloud.example.com --agree-tos -m [email protected] --redirect
ขั้นตอนที่ 5: ปรับแต่งหลังติดตั้ง
# เข้าไปรันคำสั่งของ Nextcloud
sudo docker compose exec -u www-data app php occ status
sudo docker compose exec -u www-data app php occ config:system:set overwrite.cli.url --value="https://cloud.example.com"
sudo docker compose exec -u www-data app php occ config:system:set default_phone_region --value="TH"
# เพิ่ม Index ที่ระบบแนะนำ ทำให้เร็วขึ้นชัดเจน
sudo docker compose exec -u www-data app php occ db:add-missing-indices
sudo docker compose exec -u www-data app php occ db:convert-filecache-bigint
ตรวจคำเตือนในหน้าผู้ดูแลที่เมนู Administration settings แล้ว Overview ระบบจะบอกสิ่งที่ควรแก้ทั้งหมด
ขั้นตอนที่ 6: ตั้งการสำรองข้อมูล
sudo nano /usr/local/bin/nextcloud-backup.sh
#!/bin/bash
set -euo pipefail
cd /opt/nextcloud
source .env
DEST=/var/backups/nextcloud
STAMP=$(date +%F-%H%M)
mkdir -p "$DEST"
# เข้าโหมดบำรุงรักษาเพื่อให้ข้อมูลคงที่ระหว่างสำรอง
docker compose exec -T -u www-data app php occ maintenance:mode --on
docker compose exec -T db mysqldump --single-transaction \
-u root -p"$MYSQL_ROOT_PASSWORD" "$MYSQL_DATABASE" | gzip > "$DEST/db-$STAMP.sql.gz"
tar czf "$DEST/config-$STAMP.tar.gz" ./html/config ./html/themes 2>/dev/null || true
docker compose exec -T -u www-data app php occ maintenance:mode --off
# ไฟล์ผู้ใช้ สำรองแยกด้วย restic เพราะมีขนาดใหญ่และเปลี่ยนทีละน้อย
restic backup /opt/nextcloud/data --tag nextcloud
find "$DEST" -name '*.gz' -mtime +14 -delete
echo "nextcloud backup ok: $STAMP"
sudo chmod +x /usr/local/bin/nextcloud-backup.sh
โหมดบำรุงรักษาสำคัญมาก การสำรองฐานข้อมูลกับไฟล์คนละจังหวะโดยไม่หยุดระบบ จะได้ข้อมูลที่ไม่สอดคล้องกันและกู้คืนแล้วไฟล์หาย
ขั้นตอนที่ 7: อัปเกรด
cd /opt/nextcloud
sudo /usr/local/bin/nextcloud-backup.sh
sudo docker compose pull
sudo docker compose up -d
sudo docker compose exec -u www-data app php occ upgrade
sudo docker compose exec -u www-data app php occ maintenance:mode --off
ข้ามเวอร์ชันหลักไม่ได้ ต้องอัปเกรดทีละรุ่นเสมอ เช่น จาก 27 ไป 28 แล้วจึงไป 29
ปัญหาที่พบบ่อย
ขึ้นว่า Access through untrusted domain
โดเมนที่ใช้ไม่ได้อยู่ในรายการที่เชื่อถือ เพิ่มด้วย
sudo docker compose exec -u www-data app php occ config:system:set trusted_domains 1 --value="cloud.example.com"
อัปโหลดไฟล์ใหญ่ไม่ได้
ตรวจสามชั้น client_max_body_size ใน Nginx ค่า upload_max_filesize และ post_max_size ของ PHP ในคอนเทนเนอร์ และพื้นที่ดิสก์ที่เหลือ
หน้าเว็บช้ามาก
ตรวจว่า Redis ทำงานและถูกใช้จริงด้วย occ config:list system | grep -A5 memcache และตรวจว่าคอนเทนเนอร์ cron ทำงานอยู่
ไคลเอนต์เดสก์ท็อปซิงก์ไม่ได้
มักเป็นเรื่อง header ที่ Proxy ส่งไม่ครบ ตรวจว่ามี X-Forwarded-Proto และตั้ง OVERWRITEPROTOCOL: https แล้ว
ต้องการ Cloud VPS ที่ติดตั้งแอปให้พร้อมใช้งาน ดูบริการ Cloud VPS App Plus ได้ที่ https://thaidata.cloud/contact/
- Categories:
- Cloud
- Tags:
- Cloud
- Cloud Server
หมวดหมู่ที่น่าสนใจ
- 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
- เรื่องราวความประทับใจ
- โซลูชันสำหรับธุรกิจการผลิตและยานยนต์
- โซลูชันสำหรับธุรกิจการศึกษา
- โซลูชันสำหรับธุรกิจการเงิน
- โซลูชันสำหรับธุรกิจขนส่งและกระจายสินค้า
- โซลูชันสำหรับธุรกิจค้าปลีก
- โซลูชันสำหรับธุรกิจท่องเที่ยว
- โซลูชันสำหรับธุรกิจบริการสุขภาพและโรงพยาบาล
- โซลูชันสำหรับธุรกิจประกันภัย
- โซลูชันสำหรับธุรกิจพลังงานและสาธารณูปโภค
- โซลูชันสำหรับธุรกิจสื่อสารมวลชนและเอ็นเตอร์เทนเมนท์
- โซลูชันสำหรับธุรกิจอสังหาริมทรัพย์
- โซลูชันสำหรับธุรกิจเทคโนโลยี








