1. 背景
在单位局域网下的计算机设备由于没有连接到Internet,每次要安装什么软件的时候都很麻烦,需要手动下载安装包再上传,当安装包有众多依赖包的时候,很是麻烦。国内有多家单位都建设了镜像站,为国内开发人员提供了很大便利,但是对于不能访问Internet的局域网服务器来说,还是用不了。那么为何不自己建设一个镜像站呢。
2. 准备工作
2.1. 硬件设备
- 一台局域网中可以连接Internet的计算机
- 足够大的存储磁盘
根据自己要同步的镜像大小选择合适大小的磁盘,镜像大小详情参见:http://mirrors.ustc.edu.cn/status/
我有个剩余不足2T空间的磁盘,可以用来作为Centos的镜像站了
2.2. 软件准备
后端准备
tunasync是清华大学TUNA镜像源目前使用的镜像方案,github地址:https://github.com/tuna/tunasync前端准备
如果只简单的要个html页面的话, 可以看 https://github.com/weyo/mirrors,它风格类似于163镜像站
如果想要些美化以及配置生成工具的话可以参考哈工大镜像前端项目 https://github.com/hitlug/mirror-web,界面样式如下
3. 开始部署
1、安装依赖
1 | yum install rsync wget |
2、下载tunasync
1 | wget https://github.com/tuna/tunasync/releases/download/v0.3.7/tunasync-linux-bin.tar.gz |
3、创建仓库目录
1 | mkdir -p /data/mirrors |
4、创建日志目录
1 | mkdir -p /data/logs/tunasync |
5、创建tunasync配置文件
1 | mkdir /etc/tunasync |
6、创建manager.conf配置文件
1 | vi /etc/tunasync/manager.conf |
1 | [server] |
manager部分参数说明:
addr:manager服务监听地址
port:manager服务监听端口
ssl_cert和ssl_key:证书配置
db_file:数据库文件位置
7、创建worker.conf配置文件
1 | vi /etc/tunasync/worker.conf |
1 | [global] |
注:更多worker.conf配置参见 https://github.com/tuna/tunasync/blob/master/docs/zh_CN/workers.conf
worker部分参数说明:
log_dir:tunasync日志路径
mirror_dir:镜像的路径
concurrent:线程数
interval:同步周期,单位分钟
api_base:manager地址
name:镜像名称
upstream:upstream同步地址
8、下载tunasync启动停止脚本
1 | wget -P /etc/init.d/ https://raw.githubusercontent.com/whsir/tunasync-bin/master/tunasync-manager |
9、启动服务
1 | /etc/init.d/tunasync-manager start |
10、查看同步状态
此处12345为manager的端口
1 | tunasynctl list -p 12345 --all |
11、添加计划任务
1 | wget -q http://127.0.0.1:12345/jobs -O /data/mirrors/jobs.json |
jobs.json中记录着当前的镜像列表和状态
12、配置前端web
安装nginx
采用nginx来实现,docker镜像或yum安装包都可
1)yum安装
1 | yum install nginx |
2)docker 安装
1 | docker pull nginx:1.23.2 |
修改配置文件nginx.conf
1 | # For more information on configuration, see: |
配置文件中,我们同时启用了http和https
13、设置前端web
下载哈工大开源镜像站前端项目,根据我们的实际情况稍作修改
这里的获取镜像列表,而我们再服务器上生成的是名为jobs.json的文件,需要将原来的jobs改为jobs.json,通过读取本地文件来获取jobs信息。
为了从网页看到每个镜像的大小信息,在这里添加一列显示镜像大小
原来的下载链接生成器和配置生成器的数据位于/public/static/下的json文件
修改这些json文件,适配实际环境
如果要添加新的镜像说明文档,在docPage目录下,添加md,js文件,并在menu.json中添加
目录结构
.
├── doc
│ ├── …
│ ├── js
│ │ ├── docHome.js
│ │ └── …
│ └── markdown
│ ├── docHome.md
│ └── …
├── …
└── menu.json
结构说明
./doc/markdown: 存放所有 Markdown 文档
./doc/js: 存放所有 JavaScript 代码
命名规则: 请检查 ./menu.json 文件中对应的 path 项。若 path 为 /doc/MyDoc ,则 js 文件应命名为 MyDoc.js
请在 js 中引入您的 Markdown 文档,方式为:
1 | import doc from "../markdown/YourMarkdown.md"; |
- 调用方式:
1 | <DocTemplate doc={doc}/> |
./menu.json: 目录文件,存放文档页面左侧的导航栏相关信息
key: 可选,会将提供 key 的项目排序后置顶;若不提供,则按照 title 的字典序显示在下面
title: 将作为导航栏 MenuItem 的标题
name: 镜像名称,应与主页的对应项目和对应的 js 文件名相同,用于在主页添加帮助文档的链接及帮助文档的路由路径
编译运行
1 | npm run build |
上传build目录下内容到服务器的/data/mirrors路径下
启动nginx服务
1) 系统安装启动
/etc/init.d/nginx restart
2) docker启动
1 | docker run --name mirrors-web -p 80:80 -p 443:443 -v /etc/nginx/:/etc/nginx/:ro -v /data/mirrors/:/data/mirrors/ -v /data/sdc1/epel/:/data/sdc1/epel/ -v /var/log/:/var/log/ -d nginx:1.23.2 |
将/etc/nginx映射到docker的相应目录下,镜像安装位置为/data/mirrors,镜像目录支持软连接指向,所以开源将其他磁盘链接进来增加空间
14、访问测试
小工具测试
配置文档测试
更新系统源
修改/etc/yum.repo.d下的CentOS-Base.repo,将域名换成nginx服务所在服务器域名或IP。
15、 配置更新
修改worker.conf文件,添加镜像
热重载 worker.conf
1 | tunasynctl reload -w <worker_id> |
更新镜像的大小
1 | tunasynctl set-size -w <worker_id> <mirror_name> <size> |
4. 配置网关服务器
虽然我搭建了镜像站,但是镜像站的IP是不能被其他集群的计算节点访问的,因为镜像站节点只和其他集群的登陆节点在一个网段,集群 计算节点的IP是集群内的IP,无法访问外部网络。但是集群的计算节点上要安装软件就要用到镜像站,所以需要给登录节点配置成网关服务器,让集群的计算节点以集群的登录节点为网关访问镜像站服务器。
大致的示意图就像这样,拥有外网访问能力的服务器作为网关服务器。
1. 网关服务器配置方法
1 | step 1:关闭并永久禁用firewalld服务 |
以上第step 4步骤中: MASQUERADE :它是用于动态获取IP地址连接的。
也可以静态指定外网IP:
1 | iptables -t nat -A POSTROUTING -s 10.10.0.0/16 -j SNAT --to 202.117.249.6 |
2.计算节点配置默认路由
将登录节点的集群内IP地址作为计算节点的默认网关地址
1 | route add default gw 10.10.10.253 |
路由表结果如下图所示
测试ping集群外IP地址
至此,集群的计算节点就可以配置为自建镜像站的软件源实现yum或apt安装软件了。
最后更新: 2023年06月05日 14:08