主机资讯与使用指南
Nextcloud Docker 部署:个人文件、域名与后台任务
使用 Nextcloud Apache 镜像与 MariaDB 部署个人文件服务,配置持久化、HTTPS、可信代理和定时任务。
文件库与数据库分别保存
本文采用 Nextcloud 社区维护的 Apache 镜像,程序与 MariaDB 分开运行。已经安装 Docker Compose,并准备 files.example.com 域名;域名改成自己的实际地址。
文件容量按现有资料和增长量选择,内存按用户、应用和并发决定。数据库、配置与上传目录都需要持久化;容器存在不等于文件已经备份。
建立配置与密码
sudo mkdir -p /opt/nextcloud
sudo chown "$(id -u):$(id -g)" /opt/nextcloud
cd /opt/nextcloud
umask 077
printf "DB_PASSWORD=%s\nDB_ROOT_PASSWORD=%s\n" "$(openssl rand -hex 24)" "$(openssl rand -hex 24)" > .env创建 compose.yml。示例使用 33 系列镜像,并按该系列文档配置;后续大版本升级按官方顺序逐版进行,不直接跳过多个大版本。
services:
db:
image: mariadb:10.11
restart: unless-stopped
command: --transaction-isolation=READ-COMMITTED --binlog-format=ROW
environment:
MARIADB_DATABASE: nextcloud
MARIADB_USER: nextcloud
MARIADB_PASSWORD: ${DB_PASSWORD:?set DB_PASSWORD}
MARIADB_ROOT_PASSWORD: ${DB_ROOT_PASSWORD:?set DB_ROOT_PASSWORD}
volumes:
- ./database:/var/lib/mysql
app:
image: nextcloud:33-apache
restart: unless-stopped
ports:
- "127.0.0.1:8080:80"
environment:
MYSQL_HOST: db
MYSQL_DATABASE: nextcloud
MYSQL_USER: nextcloud
MYSQL_PASSWORD: ${DB_PASSWORD:?set DB_PASSWORD}
NEXTCLOUD_TRUSTED_DOMAINS: files.example.com
OVERWRITEPROTOCOL: https
OVERWRITECLIURL: https://files.example.com
volumes:
- ./nextcloud:/var/www/html
depends_on:
- db启动并建立 HTTPS 入口
docker compose config --quiet
docker compose up -d
docker compose ps
docker compose logs --tail=100 app数据库首次初始化需要时间。应用出现数据库连接错误时,先看 db 日志,初始化完成后再查看 app 状态。示例端口只对本机开放,由宿主机 Caddy 接收域名请求。
files.example.com {
redir /.well-known/carddav /remote.php/dav/ 301
redir /.well-known/caldav /remote.php/dav/ 301
reverse_proxy 127.0.0.1:8080
}域名指向 VPS,开放 80、443,并按 Caddy 教程检查与重载配置。Caddy 在容器中运行时,应另建共享网络并连接 app:80,不能照用宿主机 localhost。
建立管理员与可信代理
通过 HTTPS 域名完成初始化,创建管理员。打开管理概览,检查域名、后台任务和代理提示。
Nextcloud 需要明确可信代理地址。宿主机经 Docker 端口映射访问时,可先查看 app 所在网络的网关,并结合访问日志确认来源,再将实际代理地址写入 trusted_proxies;不要信任整个公网。
docker inspect "$(docker compose ps -q app)" --format '{{range .NetworkSettings.Networks}}{{.Gateway}}{{end}}'确认后执行下列命令,把示例地址换成刚确认的代理来源。
docker compose exec -u www-data app php occ config:system:set trusted_proxies 0 --value='172.18.0.1'安排后台任务与备份
先将后台任务模式改为 Cron:
docker compose exec -u www-data app php occ background:cronNextcloud 需要定期运行 cron.php。在可以执行 Docker 的系统用户 crontab 中添加下面任务;确认 docker 的实际路径,示例为 /usr/bin/docker。
*/5 * * * * cd /opt/nextcloud && /usr/bin/docker compose exec -T -u www-data app php -f /var/www/html/cron.php任务运行后,在管理页检查最近执行时间。上传一个文件,通过另一台设备下载,再测试分享链接。
备份保存 nextcloud 目录、数据库逻辑导出、compose.yml 和 .env。数据库不能只复制运行中的 ./database;恢复时先建立对应版本环境,再导入数据库和文件。