[Linux]基于PVE + Ubuntu 24.04 server 搭建Nextcloud网盘
搭建宿主机
硬件配置
CPU: 至少 4 核心(类别为 Host,以透传指令集加速 PHP 和数据库运算)。
内存: 至少 8GB
系统盘 (Disk 0): 32GB,总线 VirtIO Block 或 SCSI,用于部署 Ubuntu 24.04 OS 和容器镜像库。
数据盘 (Disk 1): 500GB+,总线 VirtIO SCSI。这是物理隔离的数据平面。
网络: vmbr0,模型 VirtIO。
载独立数据盘
# 创建文件系统 (推荐 xfs 处理海量小文件)
sudo mkfs.xfs /dev/sdb
# 创建挂载点
sudo mkdir -p /mnt/ncdata
# 写入 fstab 实现开机自动挂载
echo "UUID=$(sudo blkid -s UUID -o value /dev/sdb) /mnt/ncdata xfs defaults 0 0" | sudo tee -a /etc/fstab
sudo mount -a
Nextcloud
目录结构
# 1. 创建编排工作目录
sudo mkdir -p /opt/nextcloud-native
cd /opt/nextcloud-native
# 2. 预先在数据盘创建服务专属的持久化目录,并赋予基础权限
sudo mkdir -p /mnt/ncdata/{database,redis,app,data}
sudo chmod -R 770 /mnt/ncdata
docker compose
sudo vim docker-compose.yml
写入以下内容
services:
db:
image: postgres:15-alpine
container_name: nextcloud-db
restart: always
volumes:
- /mnt/ncdata/database:/var/lib/postgresql/data
environment:
- POSTGRES_DB=nextcloud
- POSTGRES_USER=nextcloud
- POSTGRES_PASSWORD=[YOUR_POSTGRES_PASSWORD]
redis:
image: redis:7-alpine
container_name: nextcloud-redis
restart: always
command: redis-server --requirepass [YOUR_REDIS_PASSWORD]
volumes:
- /mnt/ncdata/redis:/data
app:
image: nextcloud:apache
container_name: nextcloud-app
restart: always
ports:
- "80:80"
depends_on:
- db
- redis
volumes:
- /mnt/ncdata/app:/var/www/html
- /mnt/ncdata/data:/var/www/html/data
environment:
- POSTGRES_HOST=db
- POSTGRES_DB=nextcloud
- POSTGRES_USER=nextcloud
- POSTGRES_PASSWORD=[YOUR_POSTGRES_PASSWORD]
- REDIS_HOST=redis
- REDIS_HOST_PASSWORD=[YOUR_REDIS_PASSWORD]
# 预设信任域名,防止 AIO 时期的 Host 头拦截复现
- NEXTCLOUD_TRUSTED_DOMAINS=192.168.0.11 pan.yourdomain.com
cron:
image: nextcloud:apache
container_name: nextcloud-cron
restart: always
volumes:
# Cron 容器必须与 App 容器共享完全一致的卷挂载,以保证其能扫描到相同的物理文件
- /mnt/ncdata/app:/var/www/html
- /mnt/ncdata/data:/var/www/html/data
entrypoint: /cron.sh
depends_on:
- db
- redis
sudo docker compose up -d

初始化
访问http://192.168.99.11:8080 配置管理员用户密码
添加可信站点
后续若修改端口或配置了域名,可手动修改容器可信站点
# 1. 强制覆写索引 0 的白名单为纯 IP
sudo docker exec --user www-data nextcloud-app php occ config:system:set trusted_domains 0 --value="192.168.0.11"
# 2. 强制写入索引 1 的白名单为目标域名
sudo docker exec --user www-data nextcloud-app php occ config:system:set trusted_domains 1 --value="pan.yourdomain.com"
# 3. 验证内存与配置文件的最终一致性
sudo docker exec --user www-data nextcloud-app php occ config:system:get trusted_domains

浙公网安备 33010602011771号