📦 การติดตั้ง Nextcloud NAS
คู่มือนี้บันทึกขั้นตอนทั้งหมดในการติดตั้ง Nextcloud NAS จากศูนย์
ขั้นตอนที่ 1: สร้าง Directory Structure
bash
sudo mkdir -p /data/nextcloud/{db,redis,data,config,custom-apps}
sudo chown -R 33:33 /data/nextcloud/dataขั้นตอนที่ 2: Docker Compose
ไฟล์ docker-compose.yml ตั้งอยู่ที่ /data/nextcloud/docker-compose.yml:
yaml
services:
nextcloud-db:
image: postgres:16-alpine
container_name: nextcloud-db
restart: unless-stopped
environment:
- POSTGRES_DB=nextcloud
- POSTGRES_USER=nextcloud
- POSTGRES_PASSWORD=<DB_PASSWORD>
volumes:
- /data/nextcloud/db:/var/lib/postgresql/data
networks:
- nextcloud-net
nextcloud-redis:
image: redis:7-alpine
container_name: nextcloud-redis
restart: unless-stopped
command: redis-server --requirepass <REDIS_PASSWORD>
volumes:
- /data/nextcloud/redis:/data
networks:
- nextcloud-net
nextcloud-app:
image: nextcloud:29-apache
container_name: nextcloud-app
restart: unless-stopped
ports:
- "9090:80"
environment:
- POSTGRES_HOST=nextcloud-db
- POSTGRES_DB=nextcloud
- POSTGRES_USER=nextcloud
- POSTGRES_PASSWORD=<DB_PASSWORD>
- REDIS_HOST=nextcloud-redis
- REDIS_HOST_PASSWORD=<REDIS_PASSWORD>
- NEXTCLOUD_ADMIN_USER=admin
- NEXTCLOUD_ADMIN_PASSWORD=<ADMIN_PASSWORD>
- NEXTCLOUD_TRUSTED_DOMAINS=localhost cloudcdm.contentsdigital.us
volumes:
- /data/nextcloud/data:/var/www/html
- /data/nextcloud/config:/var/www/html/config
- /data/nextcloud/custom-apps:/var/www/html/custom_apps
- /data:/var/www/html/data/admin/files/ServerData:ro
networks:
- nextcloud-net
depends_on:
nextcloud-db:
condition: service_healthy
nextcloud-redis:
condition: service_healthy
nextcloud-cron:
image: nextcloud:29-apache
container_name: nextcloud-cron
restart: unless-stopped
entrypoint: /cron.sh
volumes:
- /data/nextcloud/data:/var/www/html
networks:
- nextcloud-net
networks:
nextcloud-net:
driver: bridge
ipam:
config:
- subnet: 172.30.0.0/16ขั้นตอนที่ 3: Deploy
bash
cd /data/nextcloud
sudo -u ccdev docker compose up -dขั้นตอนที่ 4: แก้ไข ACL Permissions
เนื่องจากไฟล์ใน /data/Company/ ใช้ ACL แบบจำกัดสิทธิ์ ต้องแก้ให้ www-data (uid 33) อ่านได้:
bash
sudo setfacl -R -m o::rX /data/Company/
sudo chmod -R o+rX /data/Company/ขั้นตอนที่ 5: ติดตั้ง Group Folders App
bash
sudo -u ccdev docker exec -u www-data nextcloud-app php occ app:install groupfolders
sudo -u ccdev docker exec -u www-data nextcloud-app php occ app:enable groupfoldersขั้นตอนที่ 6: สร้าง Group Folders
bash
# สร้างโฟลเดอร์สำหรับแต่ละแผนก
for name in "00_Admin" "01_Accounting" "02_Marketing" "03_Video" \
"04_AI_QCCAP" "05_Staff" "90_Archive" "99_Backup_Drop"; do
sudo -u ccdev docker exec -u www-data nextcloud-app \
php occ groupfolders:create "$name"
done
# กำหนดสิทธิ์
# ID 1 (00_Admin) → nas_admin
# ID 2 (01_Accounting) → nas_accounting
# ID 3 (02_Marketing) → nas_marketing
# ...เป็นต้น...ขั้นตอนที่ 7: Bind Mount Department Folders
bash
GFDIR="/data/nextcloud/data/__groupfolders"
sudo mkdir -p "$GFDIR/1/00_Admin" "$GFDIR/2/01_Accounting" \
"$GFDIR/3/02_Marketing" "$GFDIR/4/03_Video" \
"$GFDIR/5/04_AI_QCCAP" "$GFDIR/6/05_Staff" \
"$GFDIR/7/90_Archive" "$GFDIR/8/99_Backup_Drop"
sudo chown -R 33:33 "$GFDIR"
# Bind mounts
sudo mount --bind /data/Company/00_Admin "$GFDIR/1/00_Admin"
# ... (ทำซ้ำสำหรับทุกแผนก)ขั้นตอนที่ 8: ทำให้ Mount Persist
เพิ่มใน /etc/fstab:
/data/Company/00_Admin /data/nextcloud/data/__groupfolders/1/00_Admin none bind,ro 0 0
/data/Company/01_Accounting /data/nextcloud/data/__groupfolders/2/01_Accounting none bind,ro 0 0
# ... (ทำซ้ำสำหรับทุกแผนก)ขั้นตอนที่ 9: Scan Files
bash
sudo -u ccdev docker exec -u www-data nextcloud-app php occ files:scan admin
for id in 1 2 3 4 5 6 7 8; do
sudo -u ccdev docker exec -u www-data nextcloud-app \
php occ groupfolders:scan $id
doneขั้นตอนที่ 10: สร้าง Users และ Groups
bash
# Groups
sudo -u ccdev docker exec -u www-data nextcloud-app php occ group:add nas_admin
sudo -u ccdev docker exec -u www-data nextcloud-app php occ group:add nas_accounting
# ... (ทำซ้ำ)
# Users
sudo -u ccdev docker exec -u www-data nextcloud-app \
php occ user:add --password-from-env --group nas_admin nas_admin
# ... (ทำซ้ำ)
✅ ตรวจสอบการติดตั้ง
bash
curl -s https://cloudcdm.contentsdigital.us/status.php
# ควรได้: {"installed":true,"version":"29.0.16.1",...}