新建用户

假设我们要跑自己的博客,则考虑新建一个用户叫做blog来专门运行blog的相关程序

1
2
3
4
5
6
7
8
# 新建用户
useradd -d /home/blog -m blog
# 设置密码
passwd blog
# 新建.ssh
mkdir /home/blog/.ssh
# 把root可以的所有可以控制机器的key复制给新用户,这样可以通过blog@x.x.x.x 来直接访问用户
chown blog:blog /home/blog/.ssh/authorized_keys

默认这个用户是不在sudoer里面的,也即是不能通过sudo来安装全局的程序
如果需要安装需要root运行的程序,需要用root用户进去安装后,给这个用户用,也就是如果你开一个用户给某个独立项目,可以让他们随意折腾,但是需要root权限的时候,需要他们来找你

ssh-keygen && git

一般来说,你还需要去git服务器上拉代码,那么可以就需要把blog这个用户给创建一个密钥对,然后把公钥交给git托管服务器作为deploy key使用

1
ssh-keygen

是否设置密码随你自己需要

设置好后,登录这个用户ssh blog@x.x.x.x的终端后,就可以直接执行

1
git clone ...

通过certbot来自动申请证书

1
2
3
4
5
6
sudo add-apt-repository ppa:certbot/certbot
sudo apt install certbot
certbot --version # 查看安装的certbot version
sudo apt-get install python-certbot-nginx # 安装nginx插件
certbot plugins # 查看plugin安装结果
certbot --nginx -d blog.domain.com # 申请blog.domain.com这个域名的证书

正常如果申请成功会有一个选择题,要求我们选择是否把所有的这个域名的流量全部redirect到https,如果是的话,那么certbot会在/etc/nginx/conf.d/blog.domain.com.conf的配置文件里面增加相关配置,包括ssl证书的配置和redirect的配置

生成的证书3个月的有效期,到期后,要自己更新,

1
certbot certonly --nginx -d blog.domain.com

如果维护多个证书的话,也可以直接更新全部

1
certbot renew

为了更加自动化,我们用crontab来定期执行更新.

我们先试一下要定期运行的命令,测试一下是否ok

1
certbot renew --dry-run > /var/log/letsencrypt/renew.log

–dry-run 不会执行结果,但是会模拟获取证书的过程

下面打开crontab的配置界面(一般第一次打开还需要自己选择编辑器,可以选择自己喜欢的编辑器,比如vim)

1
crontab -e

然后下面定义位没半个月(1号和15号)的凌晨6点,尝试去更新

1
0 6 1,15 * * certbot renew > /var/log/letsencrypt/renew.log

注意,默认情况下证书只会在过期前30天可以更新,所以以上命令并不一定会更新证书

参考: