原创文章,转载请注明出处
https://qiedd.com/

前前言

这东西看着很多,其实并不难,就是有点耗时间

开启FreeNAS的SSH

进入FreeNAS的webUI,服务->SSH->编辑


选择允许以root用户登陆,然后保存

开启允许SSH,并选择自动启动

通过SSH连接FreeNAS

windows下
按“win+R”键打开“运行”,输入cmd,然后输入

ssh root@你FreeNAS的IP -p SSH端口          //默认22的不用加-p

然后进入Nextcloud的shell,请确认你的jail 的名称是否nextcloud

iocage console nextcloud

申请证书

前言

建议配合acme.sh 的readme来食用
https://github.com/acmesh-official/acme.sh

由于家宽可能不开放80端口,而SSL证书的文件验证需要用到80端口

所以这里使用DNS验证,acme.sh支持的DNS API种类比较多,支持的Linux/Unix发行版也多

你可以在https://github.com/acmesh-official/acme.sh/wiki/dnsapi 查看所有支持的API

FreeNAS的jail中默认只有3个shell,你可以通过查看 /etc/shells 这个文件查看,nextcloud的jail默认使用csh

//查看所有shell
cat /etc/shells

//查看当前所用的shell
echo $SHELL

准备安装

如果你的域名服务商在acme.sh DNS验证的支持列表里,你需要去你的域名服务商申请API,由于教程众多,我就不重复造轮子了,需要的请自行查找

我这里以阿里云作为例子

由于需要用export将API KEY,由于默认使用csh,当使用export时会报command not found 的错误,所以我们需要先改变默认SHELL

这里我不用sh,我用bash,首先需要更新源

//更新源
pkg update -f

//安装bash
pkg install bash

//查看现在所有的SHELL
//bash的路径应该是这个/usr/local/bin/bash
cat /etc/shells

//更改默认SHELL
chsh -s /usr/local/bin/bash

//退出Nextcloud的终端
exit

//重新进入
iocage console nextcloud

//检查默认SHELL
//没有问题的话输出是bash的路径
echo $SHELL

使用acme.sh 申请证书

各类api的使用方法在这里,我只是举例
https://github.com/acmesh-official/acme.sh/wiki/dnsapi

//安装acme.sh
//此脚本会把定时任务写入crontab
//可以使用 crontab -l 查看
curl https://get.acme.sh | sh

//可能会看到 It is recommended to install socat first.
//那就安装socat
pkg -f install socat

//导入阿里的API,请自行替换“   ”内的内容
export Ali_Key="sdfsdfsdfljlbjkljlkjsdfoiwje"
export Ali_Secret="jlsdflanljkljlfdsaklkjflsa"

//Ali_Key和Ali_Secret将保存在〜/ .acme.sh / account.conf中,并在需要时重新使用。

//然后申请证书,等待
//alias可能会不生效,因此我们需要acme.sh的绝对路径
/root/.acme.sh/acme.sh --issue --dns dns_ali -d example.com 

//如果三个月后续签失败,可以使用命令强制续签
/root/.acme.sh/acme.sh --issue --dns dns_ali -d example.com --force

copy/安装 证书

默认生成的证书都放在安装目录下:~/.acme.sh/, 请不要直接使用此目录下的文件,

例如: 不要直接让 nginx/apache 的配置文件使用这下面的文件. 这里面的文件都是内部使用, 而且目录结构可能会变化.

正确的使用方法是使用 --install-cert 命令,并指定目标位置, 然后证书文件会被copy到相应的位置

/root/.acme.sh/acme.sh --install-cert -d example.com \
--key-file      /usr/local/etc/ssl/key.pem  \
--fullchain-file /usr/local/etc/ssl/cert.pem

这时候,你的 /usr/local/etc/ssl 目录下就会生成两个文件 key.pemcert.pem

自动更新acme.sh这个脚本

/root/.acme.sh/acme.sh   --upgrade  --auto-upgrade

配置Nginx

我们需要配置一下Nginx才能使它使用证书

//Nextcloud的SSL配置
cp /usr/local/etc/nginx/conf.d/nextcloud.conf /usr/local/etc/nginx/conf.d/nextcloud-ssl.conf

//原本的配置备份一下
mv /usr/local/etc/nginx/conf.d/nextcloud.conf /usr/local/etc/nginx/conf.d/nextcloud.conf.old

修改 nextcloud-ssl.conf

我们还需要修改一下nextcloud的配置文件,这里我使用winscp(下载)

通过sftp连上freenas,进入
/mnt/(你的储存池名称)/iocage/jails/nextcloud/root/usr/local/etc/nginx/conf.d

重点

从server开始
复制所有配置,然后粘贴到最下面

server {
  listen 80;
  server_name _;
........................
}

然后修改粘贴出来的那一段,改成下面这样

server {
    listen 443 ssl http2;
    server_name example.com “你的NextCloud IP”;
    ssl_certificate /usr/local/etc/ssl/cert.pem;
    ssl_certificate_key /usr/local/etc/ssl/key.pem;
.......................

往下找,找到 (可以用ctrl+f)找

#fastcgi_param HTTPS on;

然后把#去掉

fastcgi_param HTTPS on;

保存文件,重启一下Nginx

service nginx restart

然后从外网访问的时候记得加上 HTTPS://

其他

端口转发和ddns的教程网上大把了,自己找

不过注意转发的内网端口是443不是80哈

分类: FreeNAS

0 条评论

发表回复

Avatar placeholder

您的电子邮箱地址不会被公开。 必填项已用 * 标注

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据