开源实践系列是为了记录笔者的每一个开源项目的实践过程,希望能给一些准备入门开源实践的小伙伴一些浅浅的帮助。
因为偶然间了解到Caddy,回想起被Nginx配置折磨的夜晚,我决定试试Caddy,试了之后,它真的我哭死!
为了试试caddy,再加上国内的原因,访问我的站点很不方便,所以我索性用vitepress迁移了我的站点,刚好了多了一篇素材。
我自己是用的腾讯的轻量应用服务器:
选购时需要注意以下2点:
sudo su
sudo apt update
sudo apt install lua5.3
curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.38.0/install.sh | bash
source ~/.bashrc
nvm install node --lts
npm install -g pm2
[!TIP] 如果你在腾讯购买了服务器,请尽量不要到其他平台去购买域名,相对比较麻烦,特别当你想要进行icp备案等操作时。
[!TIP] 我必须迁移,而你可以直接根据Vitepress官方文档开始新项目。
先创建package.json
npm init -y
安装glob和vitepress
pnpm add -D glob vitepress@latest
根据向导初始化vitepress
pnpm vitepress init
把vitepress跑起来
pnpm docs:dev
services:
caddy:
image: caddy:2.7.6-alpine
restart: unless-stopped
ports:
- "80:80"
- "443:443"
- "443:443/udp"
volumes:
- ./Caddyfile:/etc/caddy/Caddyfile
- ./docs/.vitepress/dist:/srv
- caddy_data:/data
- caddy_config:/config
volumes:
caddy_data:
caddy_config:
Caddyfile
配置文件,配置如下:vesper.host
file_server
vesper.host
file_server
搞一个lua部署脚本
#!/usr/bin/env lua
local os = require("os")
local repo_path = "~/newObjectccc.github.io"
local repo_url = "https://github.com/newObjectccc/newObjectccc.github.io.git"
if os.execute("cd " .. repo_path .. " 2>/dev/null") then
-- 如果仓库存在,拉取最新的代码
os.execute("cd " .. repo_path .. " && git pull origin main")
else
-- 如果仓库不存在,克隆仓库
os.execute("git clone " .. repo_url .. " " .. repo_path)
end
os.execute("cd " .. repo_path .. " && npm install && npm run docs:build")
os.execute("cd " .. repo_path .. " && docker-compose up -d")
.github/workflows/deploy.yml
name: Deploy
on:
push:
branches:
- main
jobs:
deploy:
runs-on: ubuntu-latest
steps:
- name: Send deploy request
run: curl -X POST -H "Content-Type application/json"
-d '{"secretKey":"$"}'
http://vesper.host:3000/deploy
Name(key)
和Secret(value)
即可 mkdir deploy_server
package.json
npm init -y
{
"name": "newobjectccc.github.io",
"version": "1.0.0",
"main": "index.js",
"type": "module", // [!code focus]
}
import { createServer } from 'http';
import { exec } from 'child_process';
const SECRET_KEY = 'your-secret-key'; // 替换成你自己的 secret key(github上那个)
const server = createServer((req, res) => {
if (req.url === '/deploy' && req.method === 'POST') {
let body = '';
req.on('data', chunk => {
body += chunk.toString();
});
req.on('end', () => {
const postBody = JSON.parse(body);
if (postBody.secretKey === SECRET_KEY) {
// 下面的路径请替换成你自己的
exec('lua ~/newObjectccc.github.io/deploy.lua', (error, stdout, stderr) => {
if (error) {
console.error(`exec error: ${error}`);
return;
}
console.log(`stdout: ${stdout}`);
console.error(`stderr: ${stderr}`);
});
res.end('Deployment script has been executed.\n');
} else {
res.end('Invalid secret key.\n');
}
});
} else {
res.end('Invalid request.\n');
}
});
server.listen(3000, '0.0.0.0', () => {
console.log('3000 listening!')
});
pm2 start index.js
okk~ 已经可以开始尝试写完文章提交你的文章了~ 这套简易的cicd能够帮你自动部署到你的个人服务器。
[!WARNING] 其实上述流程中,直接node部署就可以,不用lua,但是我之前考虑caddy直接cgi的,后来因为一些问题换node的方案了,lua文件还能用,就直接杂交了。
[!WARNING] 并且因为这个杂交的缘故,你还不得不先
cd ~
再git clone
你的项目,之后才能真正的cicd起来。所以我建议你直接在deploy_server/index.js
中,撸完lua脚本中的部署逻辑。
Caddy 真的非常的方便~ 尽快去试试吧~ 你都不需要为你的服务器购买SSL服务,下载CA证书,安装CA证书等,因为Caddy都给你解决了,并且自动续订~ 完全免费!