nextcloud

捣鼓

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
复制代码
#nextcloud#liunx#docker
头像

HaG_Cat

1分类数6文章数

该笔记已存活437 天 19 时 52 分 32 秒

QQQQ个人作品站个人作品站ArtStationArtStationBilibiliBilibili

哔哔

-

© 2025-2026 HaG_Cat‘Blog