上上周把腾讯云的环境搞坏了,之前搭建的 halo 博客站数据也丢了,好在基本都有备份,有些垃圾文章就直接扔掉了。 重新部署了一下云服务器,包括 rss 阅读、hexo 博客、gocron 定时任务等等。这篇文章记录一下我的部署流程。
# 安装 docker
略
# 安装 docker-compose
sudo curl -L "https://get.daocloud.io/docker/compose/releases/download/2.17.3/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
sudo chmod +x /usr/local/bin/docker-compose
docker-compose --version
# 部署 rsshub
https://docs.rsshub.app/
docker pull diygod/rsshub
docker run -d --name rsshub -p 1200:1200 diygod/rsshub
# 部署 mysql
- 感谢 chatgpt 的指导
docker volume create mysql_data | |
docker run --name mysql8 -p 3307:3306 -e MYSQL_ROOT_PASSWORD=******** | |
-e MYSQL_DATABASE=mydb -e MYSQL_USER=myuser -e MYSQL_PASSWORD=******** | |
-d mysql:8.0 --default-authentication-plugin=mysql_native_password | |
mysql -h 127.0.0.1 -P 3307 -u root -p |
# 部署 rssant
https://github.com/anyant/rssant
- 准备配置文件~/rssant/rssant.env
# 默认关闭DEBUG,请勿在开发测试之外开启DEBUG
RSSANT_DEBUG=0
# 请随机生成一个字符串
RSSANT_SECRET_KEY=********
# 应用的访问地址
RSSANT_ROOT_URL=http://localhost:6789
# 检查订阅的时间间隔,默认30分钟
RSSANT_CHECK_FEED_MINUTES=30
# 请前往GITHUB设置页面申请,不需要Github登录可留空
# GitHub OAuth callback:
# http://<你的域名>/api/v1/accounts/github/login/callback/
RSSANT_GITHUB_CLIENT_ID=
RSSANT_GITHUB_SECRET=
# SMTP邮件功能,不需要注册功能可留空
RSSANT_ADMIN_EMAIL=
RSSANT_SMTP_ENABLE=false
RSSANT_SMTP_HOST=smtp.qq.com
RSSANT_SMTP_PORT=465
RSSANT_SMTP_USE_SSL=true
RSSANT_SMTP_USERNAME=
RSSANT_SMTP_PASSWORD=
# RSS代理功能,可留空
# 参考项目 cloudflare_worker/rssant 目录下的说明部署代理
RSSANT_RSS_PROXY_ENABLE=false
RSSANT_RSS_PROXY_URL=
RSSANT_RSS_PROXY_TOKEN=
# 以下配置保持不动
RSSANT_SCHEDULER_NETWORK=rssant
RSSANT_PG_DB=rssant
RSSANT_PG_HOST=localhost
RSSANT_PG_USER=rssant
RSSANT_PG_PASSWORD=rssant
#!/bin/bash
docker volume create rssant-data || true
docker volume create rssant-postgres-data || true
docker volume create rssant-postgres-logs || true
docker rm -f rssant || true
docker run -ti --name rssant -d \
-p 8050:80 \
--env-file ~/rssant/rssant.env \
-v rssant-data:/app/data \
-v rssant-postgres-data:/var/lib/postgresql/11/main \
-v rssant-postgres-logs:/var/log/postgresql \
--log-driver json-file --log-opt max-size=50m --log-opt max-file=10 \
--restart unless-stopped \
guyskk/rssant:latest
docker logs --tail 1000 -f rssant
# 部署 nginx
- 安装 nginx
- 配置 ssl 证书
- 配置端口转发
# 部署 hexo
- 本地创建自己的 hexo 项目
- 部署到 github
- 在服务器上拉去项目并 hexo g
- 将 nginx location 根目录设置到 hexo 生成目录下
生成页面为空文件
# 主题调整
使用这个主题 https://github.com/amehime/hexo-theme-shoka
- 修改配置信息等等
- 修改语言
- 修改标题
- 修改 loading
- 修改图片函数
- 修改图片列表
- 添加备案信息
- …
一开始配置出了问题,代码没有高亮,重新创建、配置就行了
# 部署文件服务器
选择 filebrowser https://filebrowser.org/installation
按照文档进行安装、启动、很方便,但是它不能作为图床使用,只是一个文件管理器。
# 图床
还需要部署图床吗?
本来想搭建图床、提供给博客使用,但是自己的服务器带宽和存储实在太有限,就使用了第三方的图床
从 wallhaven 下载的图片太大了,就用图压先压缩了一下,再上传到图床。
# gocron 定时任务
https://github.com/ouqiang/gocron
先用 docker 安装服务
再启动一个本地节点
# 节点安装
gocron-node
创建用户
注意:有些后安装的命令,节点无法识别。需要重启一下节点。
# 自动部署 blog
- github 添加 action
- 服务器上部署 gocron 服务
- 想办法实现 gocron 的 http 接口触发
- 调用部署脚本
gocron 的接口:
- 登录
http://110.42.182.92:port/api/user/login
post 请求
参数:username password
返回的数据:
{
code:
message:
data:{
is_admin: 1,
token: ""
uid:,
username:""
}
}
- 运行任务
http://110.42.182.92:port/api/task/run/1
get 请求
header 中携带 Auth-Token
github 中 Action 可以带着 secret,可以先登录在调用任务运行部署脚本;
脚本需要调整,git 失败时需要不断重试;
github 脚本:
name: Deploy On My server | |
on: | |
push: | |
branches: | |
- main # 更改为你要触发的分支 | |
jobs: | |
login: | |
runs-on: ubuntu-latest # 可以根据需要更改操作系统 | |
steps: | |
- name: Checkout code | |
uses: actions/checkout@v2 | |
- name: Login and Fetch Token | |
run: | | |
# 在这里编写登录请求的代码,使用适当的语言和库发送 POST 请求,获取并提取出令牌 | |
# 将令牌存储在一个变量中 | |
# 示例(使用 cURL 发送请求): | |
token=$(curl -X POST -d 'username= $<!--swig0-->&password= $<!--swig1-->' http://110.42.182.92:*port*/api/user/login | jq -r '.data.token') | |
echo "Token: $token" | |
# 将令牌存储为一个 GitHub Actions 的环境变量,以便在后续的步骤中使用 | |
echo "TOKEN=$token" >> $GITHUB_ENV | |
- name: Start Deploy Task | |
run: | | |
# 在这里编写发送下一个请求的代码,使用适当的语言和库 | |
# 将上一步获取的令牌放置在请求标头中 | |
# 示例(使用 cURL 发送请求): | |
token=$TOKEN # 获取上一步中存储的令牌 | |
curl -H "Auth-Token: $token" http://110.42.182.92:*port*/api/task/run/1 |
命令脚本:
#!/bin/bash | |
cd ~/code/Blog | |
git reset --hard HEAD | |
max_retries=10 | |
retry_count=0 | |
success=false | |
while [ $retry_count -lt $max_retries ] && [ "$success" = false ] | |
do | |
echo "Attempting to pull Git code (Attempt: $((retry_count+1)))" | |
git pull | |
if [ $? -eq 0 ]; then | |
success=true | |
echo "Git pull successful" | |
else | |
retry_count=$((retry_count+1)) | |
echo "Git pull failed. Retrying..." | |
fi | |
done | |
if [ "$success" = false ]; then | |
echo "Git pull failed after $max_retries attempts" | |
exit 1 | |
fi | |
hexo g |