上上周把腾讯云的环境搞坏了,之前搭建的 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

  1. 准备配置文件~/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

  1. 安装 nginx
  2. 配置 ssl 证书
  3. 配置端口转发

# 部署 hexo

  1. 本地创建自己的 hexo 项目
  2. 部署到 github
  3. 在服务器上拉去项目并 hexo g
  4. 将 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 的接口:

  1. 登录
    http://110.42.182.92:port/api/user/login
    post 请求
    参数:username password
    返回的数据:
{
	code:
	message:
	data:{
		is_admin: 1,
		token: ""
		uid:,
		username:""
	}
}
  1. 运行任务
    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