Chrogeek's Blog

配置记录

发表 @ 2019-06-08

拿到了好的 IP 地址一定不要随便丢弃!血与泪的教训……

部署 VPS

这个就随便买啦,反正博客没几个人看,捡便宜的选就是了。

本来我部署了 Vultr 在 Seattle 的实例,后来觉得没太大用处就删了(顺带连 ping 值还不错的 IP 一起丢了),结果再次部署时连抽六个 IP 都上不去,最后拿到的(现在的)IP 倒是能上去了但是 ping 值非常难看……(关键是每抽一次 IP 都得付最低 1 小时的费用,银子啊。。。)

Apache 配置

反正我是对着搜来的教程慢慢调的,现在我的配置文件支持:

  • 强制 HTTPS 跳转
  • www 域名自动跳转到顶级域名
  • 二级域名泛解析
  • Isso 反向代理(后面会说)

SSL 证书

穷玩家显然要用 Let’s Encrypt 免费证书。

通配符证书签署和续期需要进行 Challenge,其中最便捷的是 DNS Challenge。不过这种方式需要添加指定的 DNS 记录,然而 Certbot 还没有官方的 Vultr DNS 的自动化插件。所以自己写了一个:(该脚本需要 PHP 支持)

cert.sh
#!/bin/bash
echo "CERTBOT_CHALLENGE: $CERTBOT_VALIDATION"
/usr/bin/php ./cert.php "$CERTBOT_VALIDATION"
cert.php
<?php

$api_key = array("API-Key: 你的 Vultr API Key");

// 查询现有的 DNS 记录

$ch = curl_init();
$url = "https://api.vultr.com/v1/dns/records?domain=你的顶级域名";
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_setopt($ch, CURLOPT_HTTPHEADER, $api_key);
curl_setopt($ch, CURLOPT_IPRESOLVE, CURL_IPRESOLVE_V4);
$op = curl_exec($ch);
curl_close($ch);
$output = json_decode($op, true);

print_r($op);
print_r($output);

// 删除现有的 ACME Challenge 记录(都是 TXT 类型;如果你有其他用途的 TXT 记录那么可能需要修改)

foreach ($output as $record) {
if ($record["type"] == "TXT") {
$post_data = array ("domain" => "你的顶级域名", "RECORDID" => $record["RECORDID"]);
$ch = curl_init();
$url = "https://api.vultr.com/v1/dns/delete_record";
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, $post_data);
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_setopt($ch, CURLOPT_HTTPHEADER, $api_key);
curl_setopt($ch, CURLOPT_IPRESOLVE, CURL_IPRESOLVE_V4);
curl_exec($ch);
curl_close($ch);
}
}

// 插入新的 ACME Challenge DNS TXT 记录

$post_data = array ("domain" => "你的顶级域名", "name" => "_acme-challenge", "type" => "TXT", "data" => ("\"" . $argv[1] . "\""));

$ch = curl_init();
$url = "https://api.vultr.com/v1/dns/create_record";
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, $post_data);
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_setopt($ch, CURLOPT_HTTPHEADER, $api_key);
curl_setopt($ch, CURLOPT_IPRESOLVE, CURL_IPRESOLVE_V4);
curl_exec($ch);
curl_close($ch);

?>

sudo certbot renew --manual-auth-hook /path/to/cert.sh 添加到 crontab 就可以自动续期证书了。

Isso 评论系统配置

过去两年我用过多说、网易云跟帖、友言这三个评论系统,但是现在它们都倒闭了。加上个人比较反感大肆收集信息的第三方服务,因此尝试寻找可以自主维护的评论服务,找到了 Isso。

但是安装 Isso 对我这样缺乏服务器维护经验的人来说比较困难。http://blog.pythonity.com/how-to-use-isso.html 这篇文章讲的比较详细,照着一步一步做基本上没有问题。

然后自己调了一下 Isso 自带的 CSS,就是现在这样了。