捣鼓
nextcloud VPS服务器docker部署
Nextcloud 私有云VPS Docker-Compose部署
- 架构
用户访问 → 域名(DNS) → 服务器(Nginx + SSL) → Docker Nextcloud + MySQL → 数据存储
- 部署步骤
阶段一:服务器环境准备
1.1 服务器基础检查
# 检查系统信息
uname -a
cat /etc/os-release
# 检查网络连通性
ping -c 4 google.com
# 检查要使用的端口占用
sudo ss -tulpn | grep ':80\|:443\|:9090\|:9091'
复制代码
1.2 安装 Docker 引擎
# 更新系统包
sudo apt update && sudo apt upgrade -y
# 安装依赖
sudo apt install -y ca-certificates curl gnupg lsb-release
# 添加 Docker 官方 GPG 密钥
sudo mkdir -p /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
# 添加 Docker 软件源
echo "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
# 安装 Docker
sudo apt update
sudo apt install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
# 验证安装
sudo docker --version
复制代码
1.3 安装 Docker Compose
# 如果上面没有安装 docker-compose-plugin,单独安装
sudo apt install -y docker-compose-plugin
# 验证
sudo docker compose version
复制代码
1.4 域名解析配置
将域名的DNS解析添加一条A记录指向公网IP地址
阶段二:创建 Docker Compose 项目
2.1 创建项目目录
# 创建项目目录
sudo mkdir -p /opt/nextcloud-docker
cd /opt/nextcloud-docker
复制代码
2.2 创建 docker-compose.yml配置文件
sudo nano docker-compose.yml
复制代码
version: '3.8'
services:
database:
image: mariadb:10.11
container_name: nextcloud-db
restart: unless-stopped
command: --transaction-isolation=READ-COMMITTED --binlog-format=ROW --innodb-read-only-compressed=OFF
volumes:
- db_data:/var/lib/mysql
environment:
- MYSQL_ROOT_PASSWORD=你的root密码
- MYSQL_PASSWORD=你的nextcloud数据库密码
- MYSQL_DATABASE=nextcloud
- MYSQL_USER=nextcloud
networks:
- nextcloud-net
app:
image: nextcloud:latest
container_name: nextcloud-app
restart: unless-stopped
ports:
- "9091:80"
volumes:
- nextcloud_data:/var/www/html
environment:
- MYSQL_HOST=database
- MYSQL_USER=nextcloud
- MYSQL_PASSWORD=你的nextcloud数据库密码
- MYSQL_DATABASE=nextcloud
- NEXTCLOUD_TRUSTED_DOMAINS=你的域名 你的服务器IP
depends_on:
- database
networks:
- nextcloud-net
volumes:
db_data:
nextcloud_data:
networks:
nextcloud-net:
driver: bridge
复制代码
重要提示:
-
将
你的root密码、你的nextcloud数据库密码替换为强密码 -
将
你的域名、你的服务器IP替换为实际值
2.3 启动服务
# 启动服务
sudo docker-compose up -d
# 检查服务状态
sudo docker-compose ps
# 查看日志
sudo docker-compose logs -f
复制代码
2.4 等待数据库初始化
# 等待数据库完全启动(30-60秒)
sleep 60
# 验证数据库连接
sudo docker-compose exec database mysql -u nextcloud -p你的nextcloud数据库密码 -e "SHOW DATABASES;"
复制代码
阶段三:Nginx 反向代理配置
3.1 安装 Nginx
sudo apt install -y nginx
复制代码
3.2 通过certbot获取 SSL 证书
# 安装 Certbot
sudo apt install -y certbot python3-certbot-nginx
# 获取证书
sudo certbot --nginx -d 你的域名
复制代码
证书获取过程:
-
输入邮箱(用于安全通知)
-
接受服务条款
-
选择是否订阅邮件(建议选 No)
-
重要:选择选项 2(强制 HTTPS 重定向)
3.3 配置反向代理
创建 Nginx 配置文件:
sudo nano /etc/nginx/sites-available/你的域名
复制代码
server {
listen 80;
server_name 你的域名;
return 301 https://$server_name$request_uri;
}
server {
listen 443 ssl;
server_name 你的域名;
# SSL 证书路径(由 Certbot 自动设置)
ssl_certificate /etc/letsencrypt/live/你的域名/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/你的域名/privkey.pem;
# SSL 安全配置
ssl_protocols TLSv1.2 TLSv1.3;
ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384;
ssl_prefer_server_ciphers off;
# 核心:反向代理配置
location / {
proxy_pass http://127.0.0.1:9091;
# 传递必要的头部信息
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_set_header X-Forwarded-Host $host;
# 文件上传大小限制
client_max_body_size 20G;
# 解决可能的头部大小问题
proxy_buffer_size 128k;
proxy_buffers 4 256k;
proxy_busy_buffers_size 256k;
}
}
复制代码
3.4 启用 Nginx 配置
# 创建符号链接
sudo ln -s /etc/nginx/sites-available/你的域名 /etc/nginx/sites-enabled/
# 移除默认配置(避免冲突)
sudo rm -f /etc/nginx/sites-enabled/default
# 测试配置语法
sudo nginx -t
# 重启 Nginx
sudo systemctl enable nginx
sudo systemctl restart nginx
复制代码
阶段四:Nextcloud 初始配置
4.1 通过 Web 界面完成安装
访问 https://你的域名
安装步骤: 1.创建管理员账户:
-
用户名:例如 admin
-
密码:设置强密码
2.数据库配置:
-
数据库用户:nextcloud
-
数据库密码:你在 docker-compose.yml 中设置的密码
-
数据库名:nextcloud
-
数据库主机:database:3306
3.点击"安装完成"
4.2 验证安装
# 检查 Nextcloud 状态
cd /opt/nextcloud-docker
sudo docker-compose exec app php occ status
# 检查信任域名配置
sudo docker-compose exec app php occ config:system:get trusted_domains
复制代码
4.3 添加信任域名(如果需要)
sudo docker-compose exec app php occ config:system:set trusted_domains 2 --value="你的域名"
复制代码
阶段五:验证与测试
5.1 功能测试
-
访问 https://你的域名
-
使用管理员账户登录
-
上传和下载文件测试
-
创建其他用户账户测试
5.2 网络测试
# 测试 HTTPS 访问
curl -I https://你的域名
# 检查 SSL 证书
openssl s_client -connect 你的域名:443 -servername 你的域名 < /dev/null
复制代码
5.3 服务状态检查
# 检查所有服务状态
sudo docker-compose ps
sudo systemctl status nginx
# 查看日志
sudo docker-compose logs
sudo tail -f /var/log/nginx/error.log
复制代码
常见问题
-
SSL 证书如果有问题
# 重新申请证书
sudo certbot --nginx -d 你的域名
# 测试证书续期
sudo certbot renew --dry-run
复制代码
-
大文件传输限制问题
Docker环境中的PHP配置调整 通过环境变量调整
在您的 docker-compose.yml 文件中,为 Nextcloud 容器添加 PHP 环境变量:
cd /opt/nextcloud-docker
sudo nano docker-compose.yml
复制代码
在 app 服务部分添加以下环境变量:
services:
app:
image: nextcloud:latest
container_name: nextcloud-app
restart: unless-stopped
ports:
- "9091:80"
volumes:
- nextcloud_data:/var/www/html
environment:
- MYSQL_HOST=database
- MYSQL_USER=nextcloud
- MYSQL_PASSWORD=你的nextcloud数据库密码
- MYSQL_DATABASE=nextcloud
- NEXTCLOUD_TRUSTED_DOMAINS=你的域名 你的服务器IP
# === 新增的 PHP 配置环境变量 ===
- PHP_MEMORY_LIMIT=2048M
- PHP_UPLOAD_LIMIT=16G
- PHP_MAX_EXECUTION_TIME=3600
- PHP_MAX_INPUT_TIME=3600
- PHP_POST_MAX_SIZE=16G
depends_on:
- database
networks:
- nextcloud-net
复制代码
完整的配置更新流程
步骤 1:更新 Docker Compose 配置
cd /opt/nextcloud-docker
# 备份当前配置
sudo cp docker-compose.yml docker-compose.yml.backup
# 编辑配置
sudo nano docker-compose.yml
复制代码
使用以下完整配置(替换您实际的密码和域名):
version: '3.8'
services:
database:
image: mariadb:10.11
container_name: nextcloud-db
restart: unless-stopped
command: --transaction-isolation=READ-COMMITTED --binlog-format=ROW --innodb-read-only-compressed=OFF
volumes:
- db_data:/var/lib/mysql
environment:
- MYSQL_ROOT_PASSWORD=你的root密码
- MYSQL_PASSWORD=你的nextcloud数据库密码
- MYSQL_DATABASE=nextcloud
- MYSQL_USER=nextcloud
networks:
- nextcloud-net
app:
image: nextcloud:latest
container_name: nextcloud-app
restart: unless-stopped
ports:
- "9091:80"
volumes:
- nextcloud_data:/var/www/html
environment:
- MYSQL_HOST=database
- MYSQL_USER=nextcloud
- MYSQL_PASSWORD=你的nextcloud数据库密码
- MYSQL_DATABASE=nextcloud
- NEXTCLOUD_TRUSTED_DOMAINS=nc.hkjcloud.cc 154.222.24.148
# PHP 配置
- PHP_MEMORY_LIMIT=2048M
- PHP_UPLOAD_LIMIT=16G
- PHP_MAX_EXECUTION_TIME=3600
- PHP_MAX_INPUT_TIME=3600
- PHP_POST_MAX_SIZE=16G
depends_on:
- database
networks:
- nextcloud-net
volumes:
db_data:
nextcloud_data:
networks:
nextcloud-net:
driver: bridge
复制代码
步骤 2:重启服务
# 重新创建容器
sudo docker-compose down
sudo docker-compose up -d
# 等待服务启动
sleep 30
# 检查状态
sudo docker-compose ps
复制代码
步骤 3:验证 PHP 配置
# 检查 PHP 配置是否生效
sudo docker-compose exec app php -i | grep -E "memory_limit|upload_max_filesize|post_max_size|max_execution_time"
# 或者在 Nextcloud 网页界面查看
# 登录 Nextcloud → 设置 → 管理 → 系统信息 → PHP
复制代码
步骤 4:同时更新 Nginx 配置
确保 Nginx 配置也更新了:
sudo nano /etc/nginx/sites-available/nc.hkjcloud.cc
复制代码
确认包含:
server {
# ... 其他配置
location / {
proxy_pass http://127.0.0.1:9091;
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;
# 大文件上传配置
client_max_body_size 20G;
client_body_timeout 7200s;
proxy_send_timeout 7200s;
proxy_read_timeout 7200s;
send_timeout 7200s;
}
}
复制代码
重新加载 Nginx:
sudo nginx -t
sudo systemctl reload nginx
复制代码
日常维护命令
服务管理
# 启动服务
sudo docker-compose up -d
# 停止服务
sudo docker-compose down
# 重启服务
sudo docker-compose restart
# 查看服务状态
sudo docker-compose ps
# 查看日志
sudo docker-compose logs -f
复制代码
备份与恢复
# 备份数据库
sudo docker-compose exec database mysqldump -u nextcloud -p nextcloud > backup.sql
# 备份数据卷
sudo tar -czf nextcloud_backup.tar.gz /opt/nextcloud-docker/
复制代码
更新服务
# 拉取最新镜像
sudo docker-compose pull
# 重启使用新镜像
sudo docker-compose up -d
# 清理旧镜像
sudo docker image prune
复制代码
