前言

这一篇承接上一篇文章,上一篇将系统以及共享搭建完毕,这次主要是安装一些基础的应用:

  1. Docker安装

  2. IPv6 DDNS动态域名解析

  3. Nginx反向代理

说实话,到了这一步,对于新手来说可能会有点难度,不过还好的是学习成本不高,只需要简单学习一下就行。

Docker

Docker就不用过多介绍了,很简单,也很容易操作。在Ubuntu Server中也只需要简单输入几个命令就能安装:

1
2
3
4
5
6
sudo apt update
sudo apt install apt-transport-https ca-certificates curl software-properties-common gnupg lsb-release
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
sudo apt update
sudo apt install docker-ce docker-ce-cli containerd.io

IPv6 DDNS

第一步:域名

我们需要注册一个域名(最好是顶级域名),建议腾讯云、阿里云、华为云等等云服务器厂商都可以购买。

第二步:密钥

有两种类型的密钥:

  • AccessKey ID和AccessKey Secret

  • Token

各服务商获取地址:

阿里云地址:https://ram.console.aliyun.com/manage/ak?spm=5176.12818093.nav-right.dak.488716d0mHaMgg

腾讯云地址:https://console.dnspod.cn/account/token/apikey

华为云地址:https://console.huaweicloud.com/iam/?locale=zh-cn#/mine/accessKey

我这边就以 腾讯云 为例,使用 Token 方式:

点击【创建密钥】,密钥名称任意,将弹出界面的 IDToken 复制保存下来。

第三步:域名解析

比如我的顶级域名为 yydnas.com,然后NAS可以使用一个二级域名,为 nas.yydnas.com,那么到控制台的域名解析界面添加一条记录类型为 AAAA 的记录,主机记录可以为 * 或者 nas ,记录值任意,我们先随便填一个 ::1

接着访问DDNS-GO,下载此应用。

将其压缩文件中的 ddns-go 程序上传至Ubuntu NAS的任意文件夹内,我这边建了个文件夹为 /etc/ddns-go

通过命令运行:

1
2
3
cd /etc/ddns-go   #存放该程序的目录
sudo chmod +x ddns-go
sudo ./ddns-go -s install #安装服务

然后访问 http://IP:9876 页面。

服务商选择 DnsPodIDToken 填写之前得到的两个值:

IPv4不启用,IPv6勾选启用,选择【通过网卡获取】,选择对应的网卡,【Domains】填写你的域名,我这边为 nas.yydnas.com

点击保存后查看日志,显示更新成功即可。

Nginx反向代理

第一步:Nginx安装

也是简单的几个命令就行了:

1
2
add-apt-repository ppa:ondrej/nginx-mainline
apt install nginx-full nginx-extras #很重要,一定要安装这两项,确保可以使用ipv6

第二步:启动Nginx

1
2
systemctl enable nginx  #开机自动运行
systemctl start nginx

第三步:反向代理

这一步建议网上多看多学,很多配置上的东西慢慢了解,这边简单说明一下:

程序目录: /etc/nginx

网站目录(启用): /etc/nginx/sites-enabled/

网站目录(未启用): /etc/nginx/sites-available/

主程序配置文件: /etc/nginx/nginx.conf

我们先简单测试一下,这一步是基于上一步域名解析完成的情况下进行操作的,务必完成域名解析!

删除 /etc/nginx/sites-enabled/default 文件,在该目录新建一个 test.conf 的文件,内容为:

1
2
3
4
5
6
7
8
9
10
11
12
13
server {
listen [::]:80;
server_name nas.yydnas.com; #你的域名
index index.php index.html index.htm;

location / {
proxy_pass http://10.0.0.2; #需要反向代理的本地地址,这边10.0.0.2是我本地OpenWrt的地址
proxy_set_header Host $http_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;
}
}

重启 nginx: sudo systemctl restart nginx

然后试着访问域名 nas.yydnas.com ,能不能正常访问:

测试成功!

那么我们就可以系统的做第一个反向代理了,添加 SSL证书。

为这个域名在控制台申请一张免费的证书:

申请完成后,下载该证书,选择 Nginx类型,得到4个文件,将其上传至 Ubuntu NAS 的某个目录内,我放置在 /etc/nginx/cert 目录下:

再次修改 /etc/nginx/sites-enabled/test.conf 文件,完整内容为:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
server {
listen [::]:80;
server_name nas.yydnas.com; #你的域名
index index.php index.html index.htm;
return 301 https://$server_name$request_uri; #http跳转至https
}

server {
listen [::]:443 ssl;
http2 on;
server_name nas.yydnas.com; #你的域名
index index.php index.html index.htm;

ssl_protocols TLSv1.2 TLSv1.3;
ssl_ciphers TLS_AES_128_GCM_SHA256:TLS_AES_256_GCM_SHA384:TLS_CHACHA20_POLY1305_SHA256:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384;

ssl_certificate /etc/nginx/cert/nas.yydnas.com_nginx/nas.yydnas.com_bundle.pem; #pem证书
ssl_certificate_key /etc/nginx/cert/nas.yydnas.com_nginx/nas.yydnas.com.key; #key证书

add_header Strict-Transport-Security "max-age=31536000; includeSubDomains; preload" always;


location / {
proxy_pass http://10.0.0.2; #需要反向代理的本地地址,这边10.0.0.2是我本地OpenWrt的地址
proxy_set_header Host $http_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;
}
}

可以使用 nginx -t 查看是否有错误,没有问题的话再次重启 nginx:

最后,再次访问域名,可以看到网站还是能够正常访问并且正常开启https了:

举一反三

完成上述IPv6域名解析和Nginx反向代理之后,就可以举一反三完成很多很多需要反向代理外网访问的项目了。

通过Docker搭建的项目也是一样的流程。这边就不过多介绍了,相信Docker应该基本上都会,学习成本非常低。

其实也可以搭建个人网站,感兴趣的也自己学习一下。

最后

其实关于Docker也可以安装portainer,我个人觉得Docker就行了,图形管理界面倒不是很需要。

重点是在Nginx的配置上面,稍微花点时间把Nginx深入学习一下。

学完这些,Ubuntu Server NAS 90%已经完成了,各种应用可以通过Docker安装,比如Emby、Jellyfin、Home Assistant等等都可以自行搭建,还不用受限于各种NAS系统,剩下5% Docker没有的应用也可以通过PHP等搭建,还有其余5%都是一些比较偏门的东西。

当然,还有一点是相较于TrueNAS以及OMV等系统来说,Ubuntu的各种教程在网上还是比较多的,遇到问题也都能通过各种搜索解决。