本次部署基于 Ubuntu 系统(桌面版 / Server 版通用,核心操作一致),硬件配置参考如下,低配置主机可顺畅运行:
ubuntu服务器配置如下
硬件类型 | 具体型号/参数 |
---|---|
CPU | Intel Core i3-6100T |
内存条 | 8GB(DDR4 2400mhz) |
硬盘 | 东芝(Toshiba)机械硬盘 500GB |
Nextcloud 和 ZeroTier 部署方案
整套方案通过 Docker 实现 Nextcloud 容器化部署,搭配 ZeroTier 构建虚拟局域网,无需公网 IP 即可实现远程访问,步骤清晰且隔离性强。
1. 安装 Docker 和 Docker Compose
首先,我们需要在 Ubuntu 系统上安装 Docker 和 Docker Compose。
更新系统并安装必要工具:
sudo apt update && sudo apt upgrade -y sudo apt install -y curl ufw vim
安装 Docker:
官方的一键安装脚本非常方便:curl -fsSL https://get.docker.com | sh
将当前用户加入 docker 组(避免每次用
sudo
):sudo usermod -aG docker $USER newgrp docker # 刷新用户组,或注销后重新登录生效
安装 Docker Compose:
sudo curl -L "https://github.com/docker/compose/releases/download/v2.27.1/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose sudo chmod +x /usr/local/bin/docker-compose
Docke配置镜像源:
sudo vim /etc/docker/daemon.json
#daemon.json如下所示
{
"registry-mirrors": [
"https://proxy.1panel.live",
"https://docker.1panel.top",
"https://docker.m.daocloud.io",
"https://docker.1ms.run",
"https://docker.ketches.cn"
]
}
- 验证安装:
docker --version docker-compose --version
2. 部署 Nextcloud (Docker Compose方式)
使用 Docker Compose 可以通过一个配置文件管理所有服务,非常清晰方便。
创建一个专用目录(例如
nextcloud
)并进入:mkdir ~/nextcloud && cd ~/nextcloud
创建
docker-compose.yml
文件:
使用vim
或其他编辑器创建文件:sudo vim docker-compose.yml
将以下内容粘贴到文件中,然后保存退出( 输入
:wq
, 回车)。version: '3' services: nextcloud: image: nextcloud:latest container_name: nextcloud restart: unless-stopped ports: - "80:80" - "443:443" environment: - MYSQL_HOST=nextcloud-db - MYSQL_DATABASE=nextcloud - MYSQL_USER=nextcloud - MYSQL_PASSWORD=your_strong_db_password_here # 请修改为一个强密码! volumes: - nextcloud_data:/var/www/html - ./apps:/var/www/html/custom_apps - ./config:/var/www/html/config - ./data:/var/www/html/data depends_on: - nextcloud-db nextcloud-db: image: mariadb:10.6 container_name: nextcloud-db restart: unless-stopped environment: - MYSQL_ROOT_PASSWORD=your_strong_root_db_password_here # 请修改为一个强密码! - MYSQL_DATABASE=nextcloud - MYSQL_USER=nextcloud - MYSQL_PASSWORD=your_strong_db_password_here # 此处的密码要与上面nextcloud服务中的MYSQL_PASSWORD一致! volumes: - db_data:/var/lib/mysql command: --transaction-isolation=READ-COMMITTED --binlog-format=ROW --innodb-read-only-compressed=OFF volumes: nextcloud_data: db_data:
重要提示:
- 务必修改
MYSQL_PASSWORD
和MYSQL_ROOT_PASSWORD
的值,并使用强密码。 - 本例为了简单,直接将Nextcloud的80和443端口映射到了主机。如果你的主机有其他服务占用这些端口,需要修改前面的主机端口(例如
8080:80
)。
- 务必修改
启动 Nextcloud 服务:
在docker-compose.yml
文件所在目录运行:docker-compose up -d
-d
表示在后台运行。Docker 会自动下载镜像并启动容器。查看启动日志(可选):
docker-compose logs -f
初步访问:
启动完成后,在你同一局域网下的浏览器中,访问http://你的Ubuntu主机IP
(例如http://192.168.1.100
)。你应该能看到 Nextcloud 的初始化页面,创建管理员账户并配置数据库时,数据库用户、密码、数据库名等就填写你在docker-compose.yml
里设置的那些值。
3. 安装和配置 ZeroTier
Nextcloud 在本地局域网部署好后,我们用 ZeroTier 来实现远程访问。
安装 ZeroTier:
curl -s https://install.zerotier.com | sudo bash
注册 ZeroTier 并创建网络:
- 访问 ZeroTier 官网 注册一个账号。
- 登录后,在 “Networks” 页面,点击 “Create a Network”,这会生成一个新的网络。记住生成的 Network ID(一串16位的字符)。
将你的小主机加入网络:
sudo zerotier-cli join <你的Network ID>
例如:
sudo zerotier-cli join 1a2b3c4d5e6f7890
在官网授权设备:
- 回到 ZeroTier 官网的控制面板,找到你创建的网络。
- 在 “Members” 选项卡下,你应该能看到你的小主机(通过Node ID识别),勾选前面那个 “Auth?” 复选框,授权它加入网络。稍等片刻,它会获得一个虚拟局域网IP(例如
192.168.192.100
)。
在其他设备上安装并加入 ZeroTier:
- 在你需要访问 Nextcloud 的手机和电脑上也安装 ZeroTier 客户端,并加入同一个 Network ID。
- 同样地,回到官网控制面板,授权这些设备。
- 现在,你的所有设备都在同一个虚拟局域网里了。
通过 ZeroTier 访问 Nextcloud:
- 在你手机或电脑的浏览器中,直接输入小主机的 ZeroTier 虚拟IP地址,例如
http://192.168.192.100
,就可以远程访问到你的 Nextcloud 了。
- 在你手机或电脑的浏览器中,直接输入小主机的 ZeroTier 虚拟IP地址,例如
4. 可选优化与调整
- 数据目录迁移:如果你希望 Nextcloud 的数据存储在机械硬盘上,可以在
docker-compose.yml
的volumes
部分,将nextcloud_data
和db_data
的映射路径修改到机械硬盘的挂载点,例如/mnt/your_hdd/nextcloud_data:/var/www/html
。 - 防火墙设置:如果开启了 UFW(防火墙),记得放行所需端口:
sudo ufw allow 80/tcp sudo ufw allow 443/tcp sudo ufw allow 9993/udp # ZeroTier 的通信端口
常用管理和故障排除命令
- 查看容器状态:
docker-compose ps
- 停止服务:
docker-compose down
(在当前目录下运行,会停止并删除容器,但保留数据卷) - 重启服务:
docker-compose restart
- 查看日志:
docker-compose logs -f nextcloud
(查看Nextcloud容器的日志) - 进入容器内部(用于调试):
docker exec -it nextcloud bash
这套组合方案(Docker + Nextcloud + ZeroTier)的优点是高度集成、隔离性好、管理方便,并且通过 ZeroTier 实现了安全的点对点直连。
测试图如下
如果部署过程中遇到任何问题,欢迎在评论区留言讨论~