怎么用香港服务器上网不想把数据放云端?教你搭建一台的Nextcloud私有网盘(含HTTPS)

云服务器安全策略 很多人不放心把照片、文档全部交给大厂云盘,又想要「随时随地、多端同步」的体验。其实,你完全可以在家里或一台小云服务器上,部署一套属于自己的Nextc···

云服务器安全策略

很多人不放心把照片、文档全部交给大厂云盘,又想要「随时随地、多端同步」的体验。其实,你完全可以在家里或一台小云服务器上,部署一套属于自己的Nextcloud 私有网盘

数据完全掌握在自己手里支持 Web 页面、手机 App、桌面客户端访问能安装插件扩展网盘功能

本文演示如何在一台Ubuntu 服务器上,使用Docker + Docker Compose部署:

NextcloudMariaDB 数据库Nginx 反向代理(HTTPS)

并通过一个自定义 HTTPS 端口 1507对外提供访问,特别适合:

家用宽带 / 小型 VPS不能直接对公网开放 80/443 接口(如:未备案的国内云服务器)希望数据完全掌握在自己手里

如果你的服务器已备案、可以直接开放 80/443,也可以根据文中说明做少量改动即可。

使用相关技术文档参考:Ubuntu安装Docker和加速免费拿到泛域名证书并自动续期

一、整体功能与方案概览

1. 客户端支持

Nextcloud 提供官方客户端,覆盖常见平台:

桌面:Windows / macOS / Linux移动端:Android / iOSWeb:Chrome / Firefox / Edge / Safari 等浏览器

2. 部署方案关键点

使用Docker Compose 一键编排:Nextcloud + MariaDB + NginxSSL 证书 由宿主机上的Let’s Encrypt获取,然后挂载进 Nginx 容器使用Nextcloud 文件、数据库等全部做本地持久化存储,方便备份与迁移使用自定义 HTTPS 端口(示例:1507),绕开国内对 80/443 的常见限制

二、环境准备

正式部署前,请确认以下条件已经满足。

1. 服务器与网络

一台Ubuntu 服务器(物理机 / 家里 NAS / VPS 均可)计划使用的对外端口(本文示例:1507)已经放行,包括:服务器防火墙(如 ufw、安全组)家用路由器端口转发(如果是家宽)

2. 域名与解析

准备一个已经注册好的域名,例如:nextcloud.example.cn将该域名的A 记录指向你的服务器公网 IP

3. Docker 环境

在 Ubuntu 上提前安装好:

DockerDocker Compose(Docker 的 compose 插件也可以)

安装完成后,确保命令可以正常运行:

dockerversiondockercompose version

4. SSL 证书(Let’s Encrypt)

推荐直接使用Let’s Encrypt免费证书,可以通过 certbot 或 acme.sh 获取。确保你已经拿到以下两份文件:

fullchain.pemprivkey.pem

假设证书存放路径为:

etc/letsencrypt/live/example.cn/

后面 Nginx 配置会用到这个路径,注意根据自己实际的域名与路径进行替换。

5. 端口规划(示例)

Nginx 对外暴露:1507(HTTPS)容器内部通信:MariaDB:3306Nextcloud:80内部端口只在容器网络中访问,不直接暴露到公网。

如果在国内使用未备案云服务器,不建议直接对外开放 80/443,可以像本文一样用 1507 等自定义端口,更稳妥。

三、编写 docker-compose.yml

在服务器上创建项目目录:

sudomkdir -p /srv/nextcloudcd/srv/nextcloudsudovim docker-compose.yml

在 docker-compose.yml 中写入以下内容(可按需改密码、路径、端口):

services:db:image:mariadbrestart:alwaysenvironment:- MYSQL_ROOT_PASSWORD=Test123456 - MYSQL_DATABASE=nextcloud - MYSQL_USER=nextcloud - MYSQL_PASSWORD=Test123456volumes:-/srv/nextcloud/db:/var/lib/mysqlnextcloud:image:nextcloudrestart:alwaysdepends_on:- dbenvironment:- MYSQL_PASSWORD=Test123456 - MYSQL_USER=nextcloud - MYSQL_DATABASE=nextcloud - MYSQL_HOST=db - PHP_UPLOAD_MAX_FILESIZE=2G - PHP_POST_MAX_SIZE=2G - PHP_MEMORY_LIMIT=2Gvolumes:-/srv/nextcloud/www/html:/var/www/htmlnginx:image:nginx:alpinerestart:alwaysdepends_on:- nextcloudports:-"1507:1507"volumes:-/srv/nextcloud/nginx/nginx.conf:/etc/nginx/nginx.conf:ro -/srv/nextcloud/www/html:/var/www/html:ro-/etc/letsencrypt:/etc/letsencrypt:ro

关键说明

所有数据都持久化在宿主机 /srv/nextcloud 下:/srv/nextcloud/db:MariaDB 数据/srv/nextcloud/www/html:Nextcloud 程序与配置、用户文件等Nginx 容器挂载:自定义配置:/srv/nextcloud/nginx/nginx.confNextcloud Web 根目录:/srv/nextcloud/www/html宿主机 SSL 证书目录:/etc/letsencrypt对外只暴露1507 端口,数据库与 Nextcloud 只在容器网络中通讯。

强烈建议:生产环境一定要修改数据库账号和密码,不要使用文中的演示密码。

四、配置 Nginx HTTPS 反向代理

创建 Nginx 配置文件目录与文件:

sudomkdir -p /srv/nextcloud/nginxsudovim /srv/nextcloud/nginx/nginx.conf

写入如下配置(注意替换为你的域名和证书路径):

worker_processes2;events{worker_connections4096; }http{server{listen1507ssl;server_namenextcloud.example.cn;SSL 证书(改成你的实际路径与域名)ssl_certificate/etc/letsencrypt/live/example.cn/fullchain.pem;ssl_certificate_key/etc/letsencrypt/live/example.cn/privkey.pem;ssl_protocolsTLSv1.2TLSv1.3;ssl_ciphersHIGH:!aNULL:!MD5;ssl_prefer_server_cipherson;client_max_body_size2G;安全相关 Header(建议保留)add_headerStrict-Transport-Security"max-age=15768000; includeSubDomains; preload;"always;add_headerX-Content-Type-Options nosniff;add_headerX-Frame-Options"SAMEORIGIN";add_headerX-XSS-Protection"1; mode=block";location/ {proxy_passhttp://nextcloud:80;proxy_set_headerHost$host;proxy_set_headerX-Real-IP$remote_addr;proxy_set_headerX-Forwarded-For$proxy_add_x_forwarded_for;proxy_set_headerX-Forwarded-Proto https; } } }

配置要点说明

listen 1507 ssl;只监听 HTTPS 的 1507 端口,对应我们在 docker-compose.yml 中的暴露端口。proxy_set_header X-Forwarded-Proto https;告诉后端 Nextcloud,前端是通过 HTTPS 访问的。client_max_body_size 2G;配合前文的 PHP 环境变量设置,支持单文件最高 2G 上传。SSL、HSTS、安全 Headers 等配置能提升基础安全性。

如果以后要改用 443 标准端口,只需:

把 listen 1507 ssl; 改为 listen 443 ssl;docker-compose.yml 中 ports 改为 "443:443"同时放行服务器与防火墙的 443 端口即可。

五、启动容器并完成 Nextcloud 初始化

1. 启动容器

云服务器配置表

进入 docker-compose.yml 所在目录,执行:

云服务器组

cd/srv/nextclouddockercompose up -dDocker 会自动拉取 mariadb、nextcloud、nginx 镜像启动后,大约需要等待 30–60 秒,等待数据库和 Nextcloud 完成初始化

可以用以下命令实时查看 Nextcloud 初始化日志:

dockercompose logs -f nextcloud

2. 首次访问并创建管理员账号

如果你使用自定义端口 1507,在浏览器中访问:

https://nextcloud.example.cn:1507

如果证书正确,浏览器会提示连接安全。首次进入时,Nextcloud 会引导你设置:

管理员账号管理员密码

如果使用的443按界面提示完成初始化就结束了。

如果是非443会跳转到:

这是没有问题的,需要进行下一步修改即可。

注意:如果你使用的是自签名证书,浏览器第一次访问时会提示不受信任,需要手动添加信任。

六、修改 Nextcloud 配置 config.php(适配自定义端口)

Nextcloud 的 config.php 会在首次初始化完成后自动生成,因此建议:

完成上一步管理员账号创建确认容器运行正常,再修改配置

1. 确认 config.php 文件存在

ls -l /srv/nextcloud/www/html/config/config.php如果文件存在,说明 Nextcloud 初始化完毕,可以修改。如果不存在:再等一会儿(初始化可能还没完成)检查 volume 映射是否正确检查宿主机目录权限是否足够

2. 编辑 config.php

sudo vim /srv/nextcloud/www/html/config/config.php

参考下面的示例配置,对关键字段进行调整(只要对照修改关键项即可,不一定要一模一样):

您好:云优数据云计算 www.yunyoushuju.cn 2核2G6M最低19.9元/月 欢迎开机

发表评论

评论列表
未查询到任何数据!