GitHub Actions 自动打包 python 项目到 Docker 并推送
  1. 在项目根目录下新建 .github/workflows/publish.yml 文件。
  2. 内容如下:
name: Build and Publish Docker Image

on:
  push:
    branches: [ main ]
  workflow_dispatch:

jobs:
  build-and-publish:
    runs-on: ubuntu-latest
    permissions:
      contents: read
      packages: write
    steps:
      - name: Checkout code
        uses: actions/checkout@v4

      - name: Set up Docker Buildx
        uses: docker/setup-buildx-action@v3

      - name: Log in to GitHub Container Registry
        uses: docker/login-action@v3
        with:
          registry: ghcr.io
          username: ${{ github.actor }}
          password: ${{ secrets.GHCR_PAT || secrets.GITHUB_TOKEN }}

      - name: Build and push Docker image
        uses: docker/build-push-action@v5
        with:
          context: .
          push: true
          tags: ghcr.io/${{ github.repository_owner }}/local-monitor:latest

      - name: Show published image
        run: echo "Published to ghcr.io/${{ github.repository_owner }}/local-monitor:latest"
  1. 提交并推送到 main 分支,GitHub Actions 会自动构建并推送镜像。

二、为什么需要 permissions 配置?

在组织仓库或部分个人仓库中,GitHub Actions 默认的 GITHUB_TOKEN 没有推送容器包(package)的权限。如果 workflow 没有显式声明 permissions,会出现如下报错:

2025-08-23    
UTC时区和本地时间

local-monitor时,因为涉及到时间序列及序列查询,在转换UTC时间和本地时间的时候出现了一些BUG,记录如下。

时区与 UTC

  • UTC(协调世界时):全球统一的时间标准,示例:不受时区影响。2025-09-11T04:44:02Z(Z 表示 UTC,注意如果没有Z,至少js会当作本地时间处理
  • 时区:地球划分的区域,每个区域有自己的标准时间。例如中国标准时间 CST(UTC+8)。示例:2025-09-11T12:44:02+08:00(带时区偏移)

BUG1:时间选择器与数据库时区不一致

现象:

  • 前端时间选择器选择的是本地时间(如东八区),但提交给后端的时间未做时区转换,直接传递本地时间。
  • 后端数据库统一存储为 UTC 时间,导致查询时出现偏差,

后端相关代码:

# db.py
# 插入数据时,要求 timestamp 必须为 UTC 格式字符串
def insert_ping_result(db_file, ip_address, response_time, timestamp):
    # timestamp 必须为 UTC 格式字符串
    ...
  • 查询历史时,后端也是用 datetime.datetime.utcnow() 作为基准时间:
# db.py
now = datetime.datetime.utcnow()

推测原因:

  • 前端时间选择器组件默认输出本地时间字符串。
  • 前端未将本地时间转换为 UTC 格式再提交。
  • 后端收到的时间与数据库实际存储的 UTC 时间不一致,查询结果异常。

解决建议:

  • 前端提交前,统一将选择器得到的本地时间转换为 UTC 时间字符串(如 ISO 8601 格式)。
  • 后端所有时间字段统一用 UTC 存储和查询。

BUG2:字符串格式导致 JS 解析错误

现象:

  • 后端返回 2025-09-11 04:44:02,前端用 JS 解析后,发现本地时间和原始时间一致,没有加上时区偏移。

原因分析

2025-08-23    
用 Cloudflare Workers 部署 Hugo 静态博客

起因

今天本来打算用 Cloudflare Pages 跑一个静态博客,但在新建项目时看到提示:

我们建议在新项目中使用 Cloudflare Workers
请在我们的兼容性矩阵中查看 Workers 与 Pages 的比较。

于是我就研究了一下,发现其实 Cloudflare Workers 也能直接部署 Hugo 静态博客,而且过程非常简单。

1. 安装 Hugo

首先需要在本地安装 Hugo

sudo apt install hugo

安装好后检查一下版本:

hugo version

2. 初始化博客项目

创建一个新的 Hugo 站点:

hugo new site blog
cd blog

接下来挑选一个主题,例如 Diary。 把主题拉到本地:

git init
git submodule add -b main https://github.com/AmazingRise/hugo-theme-diary.git themes/diary

然后复制主题的 exampleSite 配置文件:

cp -r themes/diary/exampleSite/* .

这样站点就具备了可运行的配置和示例内容。

本地启动预览:

hugo server -D

浏览器打开 http://localhost:1313,可以看到主题示例站点。

3. 配置 wrangler.jsonc 部署设置文件

{
  "name": "example-com",
  "compatibility_date": "2025-07-20",
  "assets": {
    "directory": "./public",
    "html_handling": "auto-trailing-slash",
    "not_found_handling": "404-page",
    "run_worker_first": false
  },
  "build": {
    "command": "hugo build --gc --minify"
  },
  "workers_dev": true,
  "preview_urls": true
}

4. 推送到 GitHub

接下来把项目推送到 GitHub 仓库(Workers 会直接拉取这个仓库进行构建):

2025-08-23    

华为云 2025.8 开发者活动攻略 考试资料

成本:每门认证(优惠券后)需要1元购买;需要参与线上结业考试,超过 70 分合格,获取证书后才能兑换积分;

积分 兑换: 4分 200元云资源券 / 8分 400元云资源券 / 12分 600元云资源券 400元云资源券+开发者定制帆布包 14分 700元云资源券 1099元工作级开发者认证券—限量50 16分 800元云资源券 600元云资源券+云宝盲盒—限量100

首先在 https://edu.huaweicloud.com/signup/8a8472ec5f054f1596747afbe3e219f5?medium=share_kfzlb 报名

领取优惠券(改成 表格形式) (1)活动报名后,每个账户共可以领取6张微认证代金券:点此领取3张27元微认证代金券(满28元可用)点此领取2张37元微认证代金券(满38元可用)点此领取1张47元微认证代金券(满48元可用)

兑换

(2)开发者认证代金券满700可用,仅在购买700元入门级开发者认证时可抵扣。

六、积分兑换好礼(点此填写积分兑换问卷-仅可兑换1次,兑换后不可更改!填写时间截止到10月8日24:00,请及时填写

积分数

奖品(2选1)-奖品限量,必须足够积分再填写兑换问卷

4分

200元云资源券

/

8分

400元云资源券

/

12分

600元云资源券

400元云资源券+开发者定制帆布包

14分

700元云资源券

1099元工作级开发者认证券—限量50

16分

800元云资源券

600元云资源券+云宝盲盒—限量100

以下是您第二次发送的图片压缩相关题目的答案整理(格式为 ​​题目: 答案​​),基于搜索结果中的信息:

​​判断题​​ 1. ​​代码运行时需要的资源,在函数工作流创建时就始终存在,不是动态调配。: B(错误)​​

函数工作流采用动态资源调配,按需分配资源,不使用时释放。

​​实现图片压缩的步骤是:输入源图片-后台处理-输出压缩后图片。: A(正确)​​

标准流程为上传源图至OBS→函数处理→输出压缩图至目标桶。

​​函数工作流FunctionGraph采用按需付费的方式,不使用不收费。: A(正确)​​

FunctionGraph按实际执行资源计费,无请求时不产生费用。

​​复杂场景下,IAM委托可以跨账号或跨AZ调用,方便更大范围内的资源调度和权限管理。: A(正确)​​

IAM委托支持跨账号授权及跨区域资源调度。

​​华为云上不同云服务默认可以互相调用。: B(错误)​​

0001-01-01    

local-monitor 本地节点延迟监控

一、项目简介

起源:xxx

本项目用于本地到服务器的 Ping 延迟监控,支持多节点批量采集、历史曲线可视化,并可自动从哪吒面板拉取服务器列表。

三、文件结构

  • run.py:主程序,负责数据采集和 Web 服务
  • db.py:数据库操作,延迟数据存储与查询
  • nezha.py:哪吒面板交互,自动生成 server.csv
  • template.html:前端页面,数据展示与交互
  • data/server.csv:节点列表配置
  • requirements.txt:依赖包列表
  • Dockerfile:容器构建文件
  • .github/workflows/publish.yml:自动构建并推送 Docker 镜像的 workflow

## 四、环境变量说明
- `NEZHA_API_URL`:哪吒面板 API 地址
- `NEZHA_USER`:哪吒面板用户名
- `NEZHA_PASSWORD`:哪吒面板密码(如有特殊字符建议加引号)

# local-monitor 本地节点延迟监控

## 一、项目简介

本项目用于本地到服务器的 Ping 延迟监控,支持多节点批量采集、历史曲线可视化,并可自动从哪吒面板拉取服务器列表。

## 二、配置

1. 编辑 `data/server.csv`,格式如下:
  ```csv
  ip,name,desc
  1.2.3.4,节点A,描述A
  5.6.7.8,节点B,描述B
  ...
  1. 或配置 .env 后直接使用 python nezha.py 从哪吒面板拉取服务器数据。

三、文件结构

  • run.py:主程序,负责数据采集和 Web 服务
  • db.py:数据库操作,延迟数据存储与查询
  • nezha.py:哪吒面板交互,自动生成 server.csv
  • template.html:前端页面,数据展示与交互
  • data/server.csv:节点列表配置
  • requirements.txt:依赖包列表
  • Dockerfile:容器构建文件
  • .github/workflows/publish.yml:自动构建并推送 Docker 镜像的 workflow

四、命令行运行

  1. 安装依赖:
pip install -r requirements.txt
  1. 采集服务器列表(如需自动生成 server.csv):
python nezha.py
  1. 启动服务:
python run.py
  1. 浏览器访问 http://localhost:5000 查看监控界面。

五、Docker 运行

1. 拉取最新镜像

docker pull ghcr.io/vpslog/local-monitor:latest

2. 生成/更新服务器列表(server.csv)

docker run --rm \
  -v $(pwd)/local-monitor:/app/data \
  -e NEZHA_API_URL='XXXX' \
  -e NEZHA_USER='XXX' \
  -e NEZHA_PASSWORD='XXXX' \
  ghcr.io/vpslog/local-monitor:latest python3 nezha.py

说明:

0001-01-01