双穿透架构:Docker 部署 Nextcloud 、CoderServer、使用cpolar 辅助+frp主导的个人开发环境环境解决方案

双穿透架构:Docker 部署 Nextcloud 、CoderServer、使用cpolar 辅助+frp主导的个人开发环境环境解决方案
28.7的博客NextCloud 使用cpolar 辅助+frp主导的个人开发环境解决方案
为什么有这个文章
在使用飞牛Nas时候,出现了很多不方便的地方,他的功能很全,但是存在一个占用高,然后存储管理不够灵活,而且太依靠web,有一个本人安装php,不小心把apache2附带进去了,造成web无法打开,想了很多办法,才发现可能是apache的问题,果然关了就没问题了,还有各种小问题用在不舒服,总之,我需要的是网盘,也仅仅是网盘,很多功能我用不上,反而累赘,但是这个对新手很友好,这个没话说,所以最终是需求的问题
优势
这个项目的优势在与,如果你在电脑旁边,你可以使用局域网地址访问你的项目进行开发,在外面可以使用穿透地址,而不需要依靠飞牛的环境,并且拓展性强,比如你可以拓展Minlo等对象存储器,作为网盘而言,NextCloud占用低,明确了他作为Cloud的地位,占用低
Docker 部署 Nextcloud 完整教程(含 MySQL/Redis/内网穿透/扩展功能)
目录
- 前置准备:创建共享网络
- 部署 MySQL 8.0 数据库
- 部署 Redis 缓存服务
- 部署 Nextcloud 核心服务
- Nextcloud 初始化配置
- 内网穿透方案
- 常见问题与解决方案
- 扩展功能部署
- 注意事项
1. 前置准备:创建共享网络
Nextcloud、MySQL、Redis 需通过共享网络实现容器间通信,优先创建自定义桥接网络(避免端口冲突和网络隔离):
1 | docker network create nextcloud_shared |
2. 部署 MySQL 8.0 数据库
采用 Docker Compose 部署,支持外部连接(方便管理和扩容),强制 UTF-8 字符集避免中文乱码。
2.1 编写 docker-compose.yml
创建专属目录并编写配置文件:
1 | mkdir -p /nextcloud/mysql && cd /nextcloud/mysql |
1 | version: '3.8' |
2.2 启动 MySQL 容器
1 | docker-compose up -d # 后台启动容器 |
2.3 验证启动状态
1 | docker ps | grep nextcloud_mysql # 查看容器是否运行 |
正常启动示例:
提示:若启动失败,可通过
docker logs nextcloud_mysql查看错误日志。
3. 部署 Redis 缓存服务
Redis 用于优化 Nextcloud 读写性能、会话存储,配置持久化避免缓存丢失。
3.1 准备配置文件和目录
1 | # 创建 Redis 专属目录 |
3.2 编写 docker-compose.yml
在 /nextcloud/redis 目录下创建:
1 | version: '3.8' |
3.3 启动 Redis 容器
1 | cd /nextcloud/redis && docker-compose up -d |
3.4 验证启动状态
1 | # 查看容器状态 |
返回 PONG 表示启动成功,容器状态示例:
4. 部署 Nextcloud 核心服务
通过共享网络连接 MySQL 和 Redis,数据持久化到宿主机,避免容器删除丢失文件。
4.1 拉取 Nextcloud 镜像
1 | docker pull nextcloud # 拉取最新稳定版 |
4.2 创建并启动容器
1 | docker run -d \ |
4.3 验证启动状态
1 | docker ps | grep nextcloud |
正常启动示例:
提示:首次启动需初始化镜像,可能需要 30 秒左右,耐心等待。
5. Nextcloud 初始化配置
通过浏览器访问控制台,完成管理员账号和数据库关联。
5.1 访问控制台
打开浏览器,输入 http://服务器内网IP:8080(如 http://192.168.20.191:8080),进入初始化页面。
5.2 配置管理员账号和数据库
- 设置管理员账号:输入用户名和密码(建议强密码)。
- 选择存储与数据库:点击「存储与数据库」→ 选择「MySQL/MariaDB」,配置如下:
- 数据库用户:
nextcloud(步骤 2.1 配置的专用账号) - 数据库密码:
202019.Lv(步骤 2.1 配置的密码) - 数据库名称:
nextcloud(步骤 2.1 自动创建的数据库) - 数据库主机:
nextcloud_mysql(MySQL 容器名称,通过共享网络自动解析)
- 数据库用户:
- 高级选项(可选):可修改数据存储目录(默认已通过
-v挂载,无需修改)。
5.3 完成初始化
点击「安装完成」,等待 1-3 分钟(取决于服务器性能),自动跳转至 Nextcloud 主界面。
初始化页面示例:
6. 内网穿透方案
6.1 cpolar 公网访问(无公网 IP 适用)
无需公网 IP、无需路由器端口映射,适合个人/小型团队使用(免费版满足基础需求)。
6.1.1 安装 cpolar(Linux 一键安装)
1 | curl -L https://www.cpolar.com/static/downloads/install-release-cpolar.sh | sudo bash |
6.1.2 注册并登录 cpolar
- 访问 cpolar 官网注册 账号(免费版支持随机域名)。
- 安装完成后,访问
http://服务器内网IP:9200,使用注册账号登录 cpolar 本地控制台。
cpolar 登录页面示例:
6.1.3 配置公网映射
- 登录后,点击左侧「隧道管理」→「创建隧道」,配置如下:
- 隧道名称:
nextcloud(自定义,便于识别) - 协议:
HTTP - 本地地址:
8080(Nextcloud 暴露的主机端口) - 端口类型:
随机域名(免费版)/固定域名(付费版) - 其他默认即可,点击「创建」。
- 隧道名称:
- 创建成功后,点击左侧「状态」→「在线隧道列表」,复制生成的公网域名(如
https://4eba9c49.r9.cpolar.top)。
6.1.4 验证公网访问
打开浏览器,输入复制的公网域名,成功进入 Nextcloud 登录页即表示穿透生效。
公网访问示例:
cpolar 隧道列表示例:
注意:免费版公网域名 24 小时随机变化,带宽限制 1GB/月,如需固定域名和更大带宽,可升级付费版。
6.2 FRP 公网访问(有公网 VPS 适用)
需自备公网 VPS(如阿里云、腾讯云),配置稍复杂,但稳定性更高、无带宽限制。
6.2.1 服务端(公网 VPS)配置
- 下载 FRP 压缩包(选择对应系统版本,如 Linux amd64):
1
2wget https://github.com/fatedier/frp/releases/download/v0.54.0/frp_0.54.0_linux_amd64.tar.gz
tar -zxvf frp_0.54.0_linux_amd64.tar.gz && cd frp_0.54.0_linux_amd64 - 编写服务端配置文件
frps.ini:1
vim frps.ini
1
2
3
4
5
6
7[common]
bind_addr = 0.0.0.0 # 监听所有网卡(公网 VPS 需配置)
bind_port = 7002 # FRP 通信端口(自定义,需开放 VPS 防火墙)
token = 202019 # 连接口令(需与客户端一致,建议修改)
dashboard_port = 7502# 管理面板端口(便于查看状态)
dashboard_user = adm1n# 面板用户名
dashboard_pwd = 13228283746.Lvjin# 面板密码(建议修改) - 启动服务端(后台运行):
1
nohup ./frps -c ./frps.ini > frps.log 2>&1 &
- 验证服务端:访问
http://公网VPS_IP:7502,输入面板账号密码,能正常登录即表示启动成功。
服务端启动示例:
6.2.2 客户端(Nextcloud 服务器)配置
- 下载 FRP 压缩包(与服务端版本一致):
1
2wget https://github.com/fatedier/frp/releases/download/v0.54.0/frp_0.54.0_linux_amd64.tar.gz
tar -zxvf frp_0.54.0_linux_amd64.tar.gz && cd frp_0.54.0_linux_amd64 - 编写客户端配置文件
frpc.ini:1
vim frpc.ini
1
2
3
4
5
6
7
8
9
10[common]
server_addr = 公网VPS_IP # 你的 VPS 公网 IP
server_port = 7002 # 与服务端 bind_port 一致
token = 202019 # 与服务端 token 一致
[nextcloud_tcp]
type = tcp # 协议类型
local_ip = 127.0.0.1 # 本地地址(Nextcloud 服务器内网 IP)
local_port = 8080 # Nextcloud 暴露的主机端口
remote_port = 1000 # 公网访问端口(VPS 开放的端口,自定义) - 启动客户端(后台运行):
1
nohup ./frpc -c ./frpc.ini > frpc.log 2>&1 &
- 验证客户端:查看日志
tail -f frpc.log,无报错即表示连接成功。
客户端启动示例:
6.2.3 验证公网访问
打开浏览器,输入 http://公网VPS_IP:remote_port(如 http://123.45.67.89:1000),成功进入 Nextcloud 登录页即生效。
FRP 访问示例:
注意:需在 VPS 防火墙开放
bind_port(7002)和remote_port(1000),否则无法连接。
7. 常见问题与解决方案
7.1 Nextcloud 信任域名限制(核心问题)
Nextcloud 默认仅允许内网 IP 访问,公网域名需手动添加到信任列表,否则会提示「访问被拒绝」。
解决方案:
- 复制容器内的配置文件到宿主机:
1
2# 替换容器 ID 为你的 Nextcloud 容器 ID(通过 docker ps 查看)
docker cp d7a9fac73a9c:/var/www/html/config/config.php ./ - 编辑配置文件,添加公网域名/IP:找到
1
vim config.php
trusted_domains数组,添加公网域名/IP(按顺序递增索引):1
2
3
4
5
6
7'trusted_domains' =>
array (
0 => '192.168.20.191:8080', # 内网 IP:端口
1 => '4eba9c49.r9.cpolar.top', # cpolar 公网域名
2 => '123.45.67.89:1000', # FRP 公网 IP:端口
3 => 'pan.kong.college', # 自定义域名(如有)
), - 复制配置文件回容器并修复权限:
1
2
3
4# 替换容器 ID 为你的 Nextcloud 容器 ID
docker cp -a config.php d7a9fac73a9c:/var/www/html/config/config.php
docker restart d7a9fac73a9c # 重启容器生效
docker exec d7a9fac73a9c chown www-data:www-data /var/www/html/config/config.php # 修复权限
7.2 容器启动失败
- 查看错误日志:
docker logs 容器名称(如docker logs nextcloud)。 - 常见原因:端口被占用(修改主机端口,如
8081:80)、目录权限不足(重新执行chown授权命令)、配置文件语法错误(检查 yaml/ini 格式)。
7.3 MySQL 连接失败
- 确认 MySQL 容器已启动:
docker ps | grep nextcloud_mysql。 - 确认数据库配置正确:用户名、密码、数据库名与
docker-compose.yml一致。 - 确认 Nextcloud 容器已加入共享网络:
docker network inspect nextcloud_shared,查看Containers下是否包含nextcloud。
8. 扩展功能部署
8.1 CodeServer 线上代码开发环境
基于 Docker 部署在线 IDE,可通过公网编辑宿主机代码文件,适配远程开发场景。
8.1.1 编写 docker-compose.yml
1 | mkdir -p /nextcloud/code-server && cd /nextcloud/code-server |
1 | version: '3.8' |
8.1.2 启动并访问
1 | docker-compose up -d |
访问地址:http://服务器IP:8443(或公网域名+端口),输入密码即可登录。
CodeServer 界面示例:
8.2 Gitea 私有代码仓库
基于 MySQL 数据库部署 Gitea(轻量版 Git 仓库),可与 Nextcloud 共用同一 MySQL 服务,无需额外部署数据库。
8.2.1 前置准备:创建 Gitea 数据库
- 进入 MySQL 容器:
1
docker exec -it nextcloud_mysql mysql -u root -p
- 输入 MySQL root 密码(步骤 2.1 配置的
202019.Lv),执行以下 SQL 创建 Gitea 数据库:1
2
3
4CREATE DATABASE gitea CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
GRANT ALL PRIVILEGES ON gitea.* TO 'nextcloud'@'%' IDENTIFIED BY '202019.Lv';
FLUSH PRIVILEGES;
EXIT;
8.2.2 编写 docker-compose.yml
1 | mkdir -p /nextcloud/gitea && cd /nextcloud/gitea |
1 | version: '3.8' |
8.2.3 启动并初始化
1 | docker-compose up -d |
访问地址:http://服务器IP:3005,按照页面提示设置管理员账号、仓库路径等,完成初始化。
Gitea 界面示例:
9. 注意事项
- 安全建议:
- 修改所有默认密码(MySQL、Redis、Nextcloud、cpolar/FRP),避免弱密码泄露。
- 公网环境下,关闭不必要的端口暴露(如 Redis 6379、MySQL 3306,仅通过共享网络通信)。
- 启用 Nextcloud 两步验证(管理员 → 安全设置)。
- 数据备份:
- 定期备份持久化目录:
/nextcloud/mysql/data(数据库)、/root/nextcloud(Nextcloud 数据)、/nextcloud/redis/data(Redis 缓存)。
- 定期备份持久化目录:
- 性能优化:
- 给服务器分配至少 2GB 内存(Nextcloud + MySQL + Redis 同时运行需占用较多内存)。
- 开启 Nextcloud 缓存:在
config.php中添加 Redis 缓存配置(参考 Nextcloud 官方文档)。
- 版本更新:
- 定期更新容器镜像:
docker pull 镜像名(如docker pull nextcloud),然后重启容器。
- 定期更新容器镜像:









