tuna/mirror-web

基于README的下一步快速使用指南交流(包含使用tunasync脚本、目录挂载、模板渲染)

xx-zhang opened this issue · 20 comments

rt

不一定,一般我们的处理方法是将 _site 目录单独放置,软连接到存放镜像的目录下。

@shankerwangmiao 怎么让我的子页面也用到首页的模板啊。
image

这个需要配合 nginx 的 njs 模块和 fancy_index 模块。

参考配置如下:

load_module modules/ngx_http_js_module.so;
load_module modules/ngx_http_fancyindex_module.so;

map $http_user_agent $isbrowser {
 default 0;
 "~*validation server" 0;
 "~*mozilla" 1;
}

fancyindex_header /fancy-index/before;
fancyindex_footer /fancy-index/after;
fancyindex_exact_size off;
fancyindex_time_format "%d %b %Y %H:%M:%S +0000";
fancyindex_name_length 256;

error_page 404 /404.html;

location /fancy-index {
 internal;
 root /path/to/mirror-web/_site;
 subrequest_output_buffer_size 100k;
 location = /fancy-index/before {
   js_content fancyIndexBeforeRender;
 }
 location = /fancy-index/after {
   js_content fancyIndexAfterRender;
 }
}

js_path /path/to/mirror-web/static/njs;
js_include /path/to/mirror-web/static/njs/all.njs;

location / {
 root /path/to/mirrors;
 fancyindex on;
}

@shankerwangmiao 非常感谢,我自个儿研究一下

@shankerwangmiao 不好意思,再打扰您一个问题。
就是我想更新自己的 static/status, static/tunasync.json等文件,而不是使用默认tsingahua的,应该触发哪个脚本进行替换呢,worker.conf 我是使用的自己定义的,也增加了自己的 /home/script/xxxx.sh 脚本更新了_site下的目录。
再就是worker下有个server 6000的服务,这个不知道做什么的。

  • static/tunasync.json 请反代到 tunasync manager 的 /jobs 接口
  • static/tunet.json 无用,可以去掉
  • static/status/disk.json 磁盘占用情况,请自行定期生成
  • static/status/isoinfo.json 首页“获取下载链接”功能的数据,使用 mirror-web 下的 geninfo/genisolist.py 定期扫描镜像目录生成
  • static/status/{cpu,memory,diskstats_iops,service_traffic_IPv4,diskstats_throughput,service_traffic_IPv6}-day{,-dark}{,@2x,@3x,@4x}.png 是相应数据的统计图,对于每个数据都有浅色和深色两种主题,以及 1 倍到 4 倍分辨率的图像。该图像需要自行渲染。

@shankerwangmiao 非常感谢,fancy_index这个我已经解决了; 您这个 json 配置的说明对我帮助很大,现在使用 ngx插件后界面后跟之前差别不大,是不是代表着可以不起 jelley serve的的服务了

image

@shankerwangmiao 我刚才去看了您 tuna/status 的请求,发现了png是渲染后的,我发现这个必须监控,因为是一个有时序的状态变更表,而且这个功能有必要,所以我想问问您,有没有快速简介的方案,比如 snmp/promethus + grafana 还是 netdata之类的能直接生成这个 png 或者容易调用相关的接口数据接着自己用pyechart渲染,这个方案您之前调研过吗。

@shankerwangmiao 非常感谢,fancy_index这个我已经解决了; 您这个 json 配置的说明对我帮助很大,现在使用 ngx插件后界面后跟之前差别不大,是不是代表着可以不起 jelley serve的的服务了

image

Jekyll 本来就是静态页面渲染器,用 jekyll build 渲染好了就可以了。

@shankerwangmiao 我刚才去看了您 tuna/status 的请求,发现了png是渲染后的,我发现这个必须监控,因为是一个有时序的状态变更表,而且这个功能有必要,所以我想问问您,有没有快速简介的方案,比如 snmp/promethus + grafana 还是 netdata之类的能直接生成这个 png 或者容易调用相关的接口数据接着自己用pyechart渲染,这个方案您之前调研过吗。

用 grafana 的 image renderer 即可。API 是 /render/dashboard-solo/db/ <dashboard-name>,参数可以使用 GET 请求传入,具体参数有:

  • fromto:要渲染的时间段,语法与 Grafana 正常观看 Dashboard 的参数一致
  • panelId:要渲染的 panel 的 ID
  • widthheight:渲染的图片宽高(逻辑大小)
  • theme:可以有 lightdark
  • scale:缩放倍数

@shankerwangmiao 多谢,懂了。祝您生活愉快。

@shankerwangmiao 我今天调用 http://127.0.0.1:12345/jobs 时候除了错l;
{"error":"failed to list all mirror status: NOAUTH Authentication required."}

  • 问题1. /jobs 状态是500,请求错误,是什么原因。
  • 问题2. two-stage-rsyncrsync 两个provider 的区别
  • 问题3. pypi 通过 rsync 会失败

补充上 两个配置文件;

本内容属于 tunasync的问题,但是在这里,集中问下。

manager.py

debug = true

[server]
addr = "127.0.0.1"
port = 12345
ssl_cert = ""
ssl_key = ""

[files]
db_type = "redis"
#db_file = "/tmp/tunasync/manager.db"
#db_file = redis://user:password@host:port/db_number
db_file = "redis://sqsjywl123@127.0.0.1:6379/3"
ca_cert = ""

worker.conf

# /home/scripts in this example points to https://github.com/tuna/tunasync-scripts/

[global]
name = "mirror_worker_tsinghua"
log_dir = "/home/tunasync/log/tunasync/{{.Name}}"
mirror_dir = "/home/mirrors"
concurrent = 10
interval = 1

# ensure the exec user be add into `docker` group
[docker]
# in `command provider` can use docker_image and docker_volumes
enable = true

[manager]
api_base = "http://localhost:12345"
token = ""
ca_cert = ""

[cgroup]
enable = false
base_path = "/sys/fs/cgroup"
group = "tunasync"

[server]
hostname = "localhost"
listen_addr = "127.0.0.1"
listen_port = 6000
ssl_cert = ""
ssl_key = ""

[[mirrors]]
name = "centos"
provider = "rsync"
upstream = "rsync://mirrors.tuna.tsinghua.edu.cn/centos/"
use_ipv6 = false
rsync_options = [ "--delete-excluded"]
#exclude_file = "/home/scripts/excludes/centos-exclude.txt"
memory_limit = "1024M"

[[mirrors]]
name = "epel"
provider = "rsync"
upstream = "rsync://mirrors.tuna.tsinghua.edu.cn/epel/"
use_ipv6 = false
rsync_options = [ "--delete-excluded"]
#exclude_file = "/home/scripts/excludes/centos-exclude.txt"
memory_limit = "1024M"

[[mirrors]]
name = "pypi"
provider = "rsync"
upstream = "rsync://mirrors.tuna.tsinghua.edu.cn/pypi/"
use_ipv6 = false
rsync_options = [ "--delete-excluded"]
memory_limit = "1024M"

[[mirrors]]
name = "kali"
provider = "two-stage-rsync"
stage1_profile = "debian"
upstream = "rsync://mirrors.tuna.tsinghua.edu.cn/kali/"
rsync_options = [ "--delete-excluded" ] # delete .~tmp~ folders
memory_limit = "1024M"

[[mirrors]]
name = "kali-images"
provider = "rsync"
upstream = "rsync://mirrors.tuna.tsinghua.edu.cn/kali-images/"
rsync_options = [ "--delete-excluded" ] # delete .~tmp~ folders
memory_limit = "1024M"

关于上面的第一个 我修改了版本为 0.6.9 解决了 jobs获取。

two-stage-rsync 是用于同步 apt 仓库的,比如 debian 和 ubuntu 等, 为了保证一致性,apt 仓库有特殊的同步时序。

pypi TUNA 不开放 rsync 服务,你需要从上游同步

@shankerwangmiao 谢谢答疑。理解了。

kali,ubuntu,debian,ubuntukylin等等都是 aot结构的仓库,apt_sync获取的可以用这个。

pypi 我使用您的,pip3安装了bandersnatc后就这样了,在同步。

[[mirrors]]
name = "pypi"
provider = "command"
upstream = "https://pypi.python.org/"
command = "/data/scripts/pypi.sh"
# docker_image = "tunathu/bandersnatch:latest"
interval = 5

监控数据是用 telegraf 采集的,存储在 influxdb 里

  • static/tunasync.json 请反代到 tunasync manager 的 /jobs 接口
  • static/tunet.json 无用,可以去掉
  • static/status/disk.json 磁盘占用情况,请自行定期生成
  • static/status/isoinfo.json 首页“获取下载链接”功能的数据,使用 mirror-web 下的 geninfo/genisolist.py 定期扫描镜像目录生成
  • static/status/{cpu,memory,diskstats_iops,service_traffic_IPv4,diskstats_throughput,service_traffic_IPv6}-day{,-dark}{,@2x,@3x,@4x}.png 是相应数据的统计图,对于每个数据都有浅色和深色两种主题,以及 1 倍到 4 倍分辨率的图像。该图像需要自行渲染。

请问一下如何定期生成磁盘占用情况和网络带宽图的那几张图片,有没有参考的配置文件,非常感谢!

这个需要部署相应的监控数据采集体统,然后通过 grafana 进行可视化。然后定时从 grafana 里渲染图片出来。

这个需要部署相应的监控数据采集体统,然后通过 grafana 进行可视化。然后定时从 grafana 里渲染图片出来。

好的,我先试试,非常感谢。