保姆级教程:在CentOS Stream 9上从零搭建开源镜像站(Tunasync + Nginx + Fancy Index)
从零构建企业级开源镜像站CentOS Stream 9实战指南在数字化协作时代高效的软件分发体系已成为技术团队的基础设施刚需。本文将手把手带您基于CentOS Stream 9打造一个具备自动同步、美观展示的企业级镜像站整合Tunasync的智能同步引擎与Nginx的高性能分发能力特别针对国内网络环境优化配置流程。1. 环境准备与系统调优1.1 最小化系统部署全新安装CentOS Stream 9时建议选择Minimal Install基础环境。完成后立即执行系统更新dnf update -y dnf install -y epel-release关键系统参数调整# 禁用不必要的服务 systemctl disable --now firewalld # 优化文件描述符限制 echo * soft nofile 65535 /etc/security/limits.conf # 关闭透明大页THP提升性能 echo never /sys/kernel/mm/transparent_hugepage/enabled1.2 存储规划方案建议采用LVM逻辑卷管理便于后期扩容。以下为典型分区方案挂载点建议容量文件系统用途说明/50GBxfs系统根目录/data剩余空间xfs镜像存储池swap内存1.5倍swap交换分区创建存储目录结构mkdir -p /data/{mirrors,logs/tunasync} chmod -R 755 /data2. Tunasync同步系统部署2.1 编译安装最新版Tunasync官方二进制版本可能缺少某些特性推荐从源码构建dnf install -y golang git rsync git clone https://github.com/tuna/tunasync.git cd tunasync make build cp bin/* /usr/local/bin/2.2 多实例配置策略大型镜像站建议采用多worker架构创建差异化配置文件# /etc/tunasync/worker-1.conf [global] name worker-1 log_dir /data/logs/tunasync/worker1 mirror_dir /data/mirrors concurrent 8 interval 60 [[mirrors]] name centos provider rsync upstream rsync://rsync.mirrors.ustc.edu.cn/centos/提示不同worker可配置不同的同步周期和并发数关键镜像建议缩短同步间隔2.3 Systemd高级配置创建带资源限制的service单元# /etc/systemd/system/tunasync-worker.service [Unit] DescriptionTUNA sync worker %i [Service] CPUQuota200% MemoryLimit4G ExecStart/usr/local/bin/tunasync worker -c /etc/tunasync/worker-%i.conf Restarton-failure启动三个worker实例systemctl enable --now tunasync-worker{1..3}3. Nginx性能优化实战3.1 定制化编译Nginx针对镜像站特性优化编译参数./configure \ --with-http_gzip_static_module \ --with-http_sub_module \ --with-stream \ --add-module../ngx-fancyindex-0.5.2 \ --add-dynamic-module../njs/nginx \ --with-openssl-optenable-ktls常见依赖解决方案# 解决GD库报错 dnf install -y gd-devel libpng-devel # 解决XSLT报错 dnf install -y libxslt-devel libxml2-devel3.2 智能缓存配置在/etc/nginx/nginx.conf的http块中添加proxy_cache_path /var/cache/nginx levels1:2 keys_zonemirror_cache:100m inactive7d; server { location / { proxy_cache mirror_cache; proxy_cache_valid 200 302 12h; proxy_cache_use_stale error timeout updating; fancyindex on; } }3.3 安全加固措施# 禁用敏感信息 server_tokens off; # 限制HTTP方法 if ($request_method !~ ^(GET|HEAD)$ ) { return 405; } # 防盗链配置 valid_referers none blocked server_names ~\.example\.com; if ($invalid_referer) { return 403; }4. 运维监控体系搭建4.1 实时状态监控集成Prometheus exporter收集指标wget https://github.com/nginxinc/nginx-prometheus-exporter/releases/download/v0.11.0/nginx-prometheus-exporter_0.11.0_linux_amd64.tar.gz tar -xzf nginx-prometheus-exporter*.tar.gz mv nginx-prometheus-exporter /usr/local/bin/创建systemd服务[Unit] DescriptionNGINX Prometheus Exporter [Service] ExecStart/usr/local/bin/nginx-prometheus-exporter \ -nginx.scrape-urihttp://localhost:80/stub_status Restartalways [Install] WantedBymulti-user.target4.2 日志分析方案使用GoAccess生成实时报表dnf install -y goaccess goaccess /var/log/nginx/access.log --log-formatCOMBINED --real-time-html --port7890关键监控指标看板指标名称采集方式告警阈值同步失败率Tunasync日志5%持续1小时下载带宽Nginx stub_status90%带宽上限存储使用率df命令85%5. 高级功能扩展5.1 智能路由优化基于GeoIP模块实现就近分发load_module modules/ngx_http_geoip2_module.so; http { geoip2 /usr/share/GeoIP/GeoLite2-Country.mmdb { $geoip2_country_code country iso_code; } map $geoip2_country_code $mirror_host { default global-mirror.example.com; CN cn-mirror.example.com; JP jp-mirror.example.com; } }5.2 自动证书管理使用Certbot配置HTTPSdnf install -y certbot python3-certbot-nginx certbot --nginx -d mirrors.yourdomain.com --email adminexample.com设置自动续期(crontab -l 2/dev/null; echo 0 3 * * * /usr/bin/certbot renew --quiet) | crontab -在实际运维中我们发现凌晨3-5点进行全量同步能最大限度减少对用户的影响。对于超过10TB的大型镜像建议采用rsync的--bwlimit参数限制带宽占用。