最新消息更新在: https://q58.club/t/topic/127?u=wood
仓库地址
https://github.com/woodchen-ink/random-api-go
示例和使用链接
https://random-api.czl.net
前景提要
原来的nodejs和worker版本: https://q58.club/t/topic/20
之所以使用go重构, 还是因为性能和并发问题. 使用go重构后, 单个处理速度一般在5微秒, 内存占用低至4M
 
  
特性
- 动态加载和缓存 CSV 文件内容
- 支持图片和视频随机分发
- 可自定义的 URL 路径配置
- Docker 支持,便于部署和扩展
- 详细的日志记录
部署方法
docker compose:
https://github.com/woodchen-ink/random-api-go/blob/main/docker-compose.yml
解释:
- public目录放 index.htmlindex.mdcss文件等, 如果刚创建容器, 会自动复制一份项目里的过去, 按需修改即可
- data目录里放 server.logstats.json, 分别是日志和统计数据
- BASE_URL是- url.json里csv文件的请求前缀, 自动适配https, 支持路径
详细步骤
- 
新建你的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
- 
新建你的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
- 
部署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
- 
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"; }
- 
访问 域名/pic/ecy即会302重定向到图片链接.
- 
访问 域名会显示首页, 相关内容自行在public/index.html,public/index.md调整.
注意
- 现在版本取消了定期清理csv缓存重新获取的机制, 因为没有必要, 并且会速度变慢. 修改文件后重启容器就会重新获取文件;
- 如果有问题, 记得看容器日志, 日志已经很详细, 并且是中文日志;
- 如果不想单独放静态文件, 那么可以把url.json和pic/ecy.csv放在public目录下, 然后不配置BASE_URL即可, 在不配置的情况下, 请求域名为当前项目访问域名, 也就是会请求https://random.com/url.json和https://random.com/pic/ecy.csv;
- 其他疑问请留言
多路径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"
  }
}
评论区