侧边栏壁纸
博主头像
Wood Chen博主等级

独唱独酬,独行独坐还独卧

  • 累计撰写 233 篇文章
  • 累计创建 166 个标签
  • 累计收到 9 条评论

目 录CONTENT

文章目录

random-api-go GO重构版

wood
2024-10-28 / 0 评论 / 0 点赞 / 8 阅读 / 4186 字

最新消息更新在: https://q58.org/t/topic/127?u=wood

仓库地址

https://github.com/woodchen-ink/random-api-go

示例和使用链接

https://random-api.czl.net


前景提要

原来的nodejs和worker版本: https://q58.org/t/topic/20

之所以使用go重构, 还是因为性能和并发问题. 使用go重构后, 单个处理速度一般在5微秒, 内存占用低至4M

image|294x131 image|147x290


特性

  • 动态加载和缓存 CSV 文件内容
  • 支持图片和视频随机分发
  • 可自定义的 URL 路径配置
  • Docker 支持,便于部署和扩展
  • 详细的日志记录

部署方法

docker compose:

https://github.com/woodchen-ink/random-api-go/blob/main/docker-compose.yml

解释:

  1. public目录放 index.html index.md css文件等, 如果刚创建容器, 会自动复制一份项目里的过去, 按需修改即可
  2. data目录里放 server.log stats.json, 分别是日志和统计数据
  3. BASE_URLurl.json里csv文件的请求前缀, 自动适配https, 支持路径

详细步骤

  1. 新建你的csv文件, 在里面放图片链接, 一行一个, 比如 ecy.csv, 然后访问路径是https://file.example.com/random/pic/ecy.csv ;
    CSV 文件应包含每行一个 URL。例如:

    https://example.com/image1.jpg
    https://example.com/image2.jpg
    https://example.com/image3.jpg
    
  2. 新建你的url.json, 访问链接是https://file.example.com/random/url.json比如:

    {
      "pic": {
        "ecy": "pic/ecy.csv"
      }
    }
    

    如果你不用pic, 改了其他的前缀名称, 那么你需要在下面代码处添加一下, 按照示例即可

https://github.com/woodchen-ink/random-api-go/blob/cbeadf2e48892c37278f7a5d00ed047cb9f04968/main.go#L61

  1. 部署docker, 按照这个docker-compose.yml

    services:
      random-api-go:
        container_name: random-api-go
        image: woodchen/random-api-go:latest
        ports:
          - "5003:5003"
        volumes:
          - ./public:/root/public
          - ./data:/root/data
        environment:
          - TZ=Asia/Shanghai
          - BASE_URL=https://file.example.com/random
        restart: unless-stopped
    
  2. nginx反代5003接口, 示例配置:

    location ^~ / {
        proxy_pass http://127.0.0.1:5003; 
        proxy_set_header Host $host; 
        proxy_set_header X-Real-IP $remote_addr; 
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; 
        proxy_set_header REMOTE-HOST $remote_addr; 
        proxy_set_header Upgrade $http_upgrade; 
        proxy_set_header Connection "upgrade"; 
        proxy_set_header X-Forwarded-Proto $scheme; 
        proxy_http_version 1.1; 
        add_header X-Cache $upstream_cache_status; 
        add_header Cache-Control no-cache; 
        proxy_ssl_server_name off; 
        add_header Strict-Transport-Security "max-age=31536000"; 
    }
    
  3. 访问域名/pic/ecy即会302重定向到图片链接.

  4. 访问域名会显示首页, 相关内容自行在public/index.html, public/index.md调整.

注意

  1. 现在版本取消了定期清理csv缓存重新获取的机制, 因为没有必要, 并且会速度变慢. 修改文件后重启容器就会重新获取文件;
  2. 如果有问题, 记得看容器日志, 日志已经很详细, 并且是中文日志;
  3. 如果不想单独放静态文件, 那么可以把url.jsonpic/ecy.csv放在public目录下, 然后不配置BASE_URL即可, 在不配置的情况下, 请求域名为当前项目访问域名, 也就是会请求https://random.com/url.jsonhttps://random.com/pic/ecy.csv;
  4. 其他疑问请留言

多路径url.json示例:

{
  "pic": {
    "all": "url/pic/all.csv",
    "fj": "url/pic/fj.csv",
    "czlwb": "url/pic/czl-website-background.csv",
    "truegirl": "url/pic/truegirl.csv",
    "truegirl1": "url/pic/truegirl1.csv",
    "truegirl2": "url/pic/truegirl2.csv",
    "girl-gif": "url/pic/girl-gif.csv",
    "ecy": "url/pic/ecy.csv",
    "ecy1": "url/pic/ecy1.csv",
    "ecy2": "url/pic/ecy2.csv",
    "ai": "url/pic/ai.csv",
    "loading": "url/pic/loading.csv"
  },
  "video": {
    "all": "url/video/all.csv"
  }
}
0

评论区