目录

Docker部署Typecho博客+Xray

加密文章,输入密码浏览

前言

前文以caddy方案部署v2ray+Typecho,本文以nginx+acme方案部署xray+Typecho

一键脚本

更新一下,最近不知是不是用chatGPT比较多的原因,443端口老是被封,借鉴wulabing大大的Nginx前置脚本自己简单制作了daocker+typecho的一键脚本,用VLESS+TCP+TLS+Nginx+WebSocket协议试验一段时间:

1
wget -N --no-check-certificate -q -O install-1.sh "https://raw.githubusercontent.com/weiwuji1/docker-xray-typecho/main/install-1.sh" && chmod +x install-1.sh && bash install-1.sh

脚本以cloudflare解析域名为例,按提示输入相关参数即可,如果不喜欢docker和PHP可直接使用wulabing大大的脚本:

1
wget -N --no-check-certificate -q -O install.sh "https://raw.githubusercontent.com/wulabing/Xray_onekey/nginx_forward/install.sh" && chmod +x install.sh && bash install.sh

后面步骤为手动安装,较为繁琐,可阅读了解原理

部署前准备

宿主机安装 docker, docker-compose,拥有正确解析的域名和相应的证书

先克隆文件

1
git clone https://github.com/weiwuji1/docker-xray-web.git

切换到 docker-xray-web 目录下,共有 3 处配置文件需要用户自行修改:

./docker-compose.yml :

db 一节中的数据库用户名、数据库用户密码、数据库名都可以由用户自定义;

每一节都有环境变量 TZ ,可供设置容器时区;

./nginx/conf.d :

需要将文件中所有 yourdomain.com 替换为用户自己的域名;

./xray/config/config.json :

需要自行填写 UUID 和邮箱。

将域名对应的证书放入 ./cert,fullchain 文件保存为 xray.crt,key 文件保存为 xray.key;

部署

在 docker-xray-web 下执行

1
2
cd ~/docker-xray-web/
docker-compose up

正常情况下,所有容器都应能正常运行

使用 Ctrl-C 停止所有容器,然后执行:

1
2
sudo chmod -R 777 ./nginx
#更改权限以便稍后 Typecho 存取文件;

然后执行:

1
docker-compose start

重启容器,通过 docker ps -a命令记住nginx的容器ID,后面会用到

ssl 证书颁发与续期

借助acem.sh来迅速实现 let’s encrypt 的泛域名 ssl 证书颁发与续期。安装步骤为:

1. 登录VPS并切换root账号,我这里以 Centos 举例说明

1
sudo -i

2. 安装acme.sh

1
2
3
yum install socat -y # Ubuntu为:sudo apt-get install socat -y
curl https://get.acme.sh | sh -s email=my@example.com
cd ~/.acme.sh/

3. 申请密钥

到域名购买服务商,申请 api key,用于后期的 txt 记录验证

DNSPod

密钥申请完毕之后,如下操作导入命令

1
2
export DP_Id="id"
export DP_Key="key"

阿里云

1
2
3
4
5
6
ALY_KEY 和 ALY_TOKEN:阿里云 API key 和 Secrec 官方申请文档。

申请完毕之后,如下操作

export Ali_Key="key"
export Ali_Secret="secret"

其他

至于其他平台,应该如何导入 API key,可以参考下面的文档,这里不一一说明了

https://github.com/acmesh-official/acme.sh/wiki/dnsapi

4. 证书生成

请注意,--dns后面的参数,一般来讲后缀就是上面的导入key的前缀 如果不确定,到上面的github连接中去找

1
2
3
4
5
# 针对 1cc.top 域名生成证书
./acme.sh --issue --dns dns_he -d domain.com -d *.domain.com --debug 
# 出现错误提示可尝试加入--insecure(官方说可以用,但非常的不安全),即:
./acme.sh --issue --dns dns_he -d domain.com -d *.domain.com --debug --insecure
# 证书生成之后,会在.acme.sh目录下,新生成一个 domain.com文件夹,证书在里面

5. 安装证书

接下来将我们的证书安装到 nginx,下面的脚本除了安装之外,也添加了一个自动更新的任务(一般来说,60 天以后会自动更新,并会强制重启 nginx 使新的证书生效,可以通过 crontab -e看到对应的定时任务)

1
2
./acme.sh --installcert -d domain.com --key-file ~/docker-xray-web/cert/xray.key --fullchain-file ~/docker-xray-web/cert/xray.crt --reloadcmd "docker exec 容器id nginx -s reload"
#生成的证书名称和路径必须与上面xray要求的一致

安装 Typecho

证书加载成功后打开浏览器访问预先设置的域名,即可安装 Typecho 。安装时需要注意的是数据库地址要填你的数据库服务名称,本项目docker-compose配置文件里为db

本项目内置的 default.conf 已经配置为支持 Typecho 伪静态,但您可能需要在 Typecho 安装后,到网站后台中启用相关设置。

Typecho 安装后可能需要在程序自动生成的 ./nginx/www/typecho/config.inc.php 中加入一行:

1
define('__TYPECHO_SECURE__',true);

以启用全站 HTTPS 加密。

其它

Xray 的日志默认是输出在容器内的控制台中的,您可以按照 Xray 的文档要求,将 Xray 配置文件的 log 一节设置为

1
2
3
4
5
"log": {
        "loglevel": "warning",
        "access":"/var/log/xray/access.log",
        "error":"/var/log/xray/error.log"
}

默认的 Xray 配置不能通过 CDN,但您可以自定义 Xray 配置文件来实现这一功能。