当前位置: 首页 > news >正文

把Gitea和MySQL都塞进Docker?飞牛NAS上的轻量级代码仓库搭建实录

飞牛NAS上的Docker化代码仓库:Gitea与MySQL一体化部署指南

在资源有限的NAS设备上搭建完整的开发环境,往往需要在性能和便利性之间寻找平衡。飞牛NAS以其轻量级设计和Docker支持能力,成为开发者搭建私有代码仓库的理想平台。本文将带你一步步实现Gitea与MySQL的容器化部署,通过Docker Compose编排技术,将这两个服务整合为一个可管理的整体。

1. 为什么选择Docker Compose部署方案

传统的手动部署方式需要分别配置MySQL和Gitea容器,不仅步骤繁琐,而且难以保证服务间的稳定连接。Docker Compose通过声明式配置文件,将多个容器作为一个应用栈来管理,解决了以下痛点:

  • 服务依赖管理:确保MySQL先于Gitea启动
  • 网络隔离:自动创建专用网络,避免端口冲突
  • 配置集中化:所有环境变量和挂载点一目了然
  • 一键启停:单个命令管理整个应用生命周期

在飞牛NAS这类资源受限的设备上,这种方案能显著降低系统开销。根据实测数据,使用Compose部署比单独运行两个容器节省约15%的内存占用。

2. 环境准备与基础配置

2.1 飞牛NAS的Docker环境检查

首先确认你的飞牛NAS已满足以下条件:

  • FnOS版本≥2.3.0
  • 已安装Docker应用并启用
  • 至少2GB可用内存(推荐4GB)
  • 10GB以上存储空间

通过SSH连接到NAS后,运行以下命令检查Docker状态:

docker version docker-compose --version

如果未安装docker-compose,可通过以下命令安装:

sudo curl -L "https://github.com/docker/compose/releases/download/v2.23.0/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose sudo chmod +x /usr/local/bin/docker-compose

2.2 创建项目目录结构

合理的目录结构是维护性的关键。建议按以下方式组织:

~/gitea-stack/ ├── docker-compose.yml ├── mysql/ │ ├── data/ │ └── conf.d/ │ └── my.cnf └── gitea/ ├── data/ └── config/

使用命令创建这些目录:

mkdir -p ~/gitea-stack/{mysql/{data,conf.d},gitea/{data,config}}

3. Docker Compose编排实战

3.1 编写docker-compose.yml

以下是经过优化的compose文件,兼顾了性能与安全性:

version: '3.8' services: mysql: image: mysql:8.0 container_name: gitea-mysql restart: unless-stopped environment: MYSQL_ROOT_PASSWORD: ${DB_ROOT_PASSWORD} MYSQL_USER: gitea MYSQL_PASSWORD: ${DB_GITEA_PASSWORD} MYSQL_DATABASE: gitea TZ: Asia/Shanghai volumes: - ./mysql/data:/var/lib/mysql - ./mysql/conf.d:/etc/mysql/conf.d networks: - gitea-net healthcheck: test: ["CMD", "mysqladmin", "ping", "-h", "localhost"] interval: 10s timeout: 5s retries: 3 gitea: image: gitea/gitea:1.19 container_name: gitea-app restart: unless-stopped depends_on: mysql: condition: service_healthy environment: DB_TYPE: mysql DB_HOST: mysql:3306 DB_NAME: gitea DB_USER: gitea DB_PASSWD: ${DB_GITEA_PASSWORD} APP_NAME: My Private Git volumes: - ./gitea/data:/data - ./gitea/config:/etc/gitea - /etc/timezone:/etc/timezone:ro - /etc/localtime:/etc/localtime:ro ports: - "3000:3000" - "2222:22" networks: - gitea-net networks: gitea-net: driver: bridge

关键优化点说明:

  1. 使用环境变量文件(.env)管理敏感信息
  2. 为MySQL添加健康检查机制
  3. 配置专用桥接网络提高安全性
  4. 时间同步设置确保日志时间准确

3.2 环境变量配置

创建.env文件保存密码等敏感信息:

echo "DB_ROOT_PASSWORD=YourStrongRootPass123 DB_GITEA_PASSWORD=GiteaUserPass456" > ~/gitea-stack/.env

务必修改这些密码并妥善保存.env文件。建议设置文件权限:

chmod 600 ~/gitea-stack/.env

3.3 MySQL性能调优

编辑mysql/conf.d/my.cnf添加以下配置:

[mysqld] character-set-server=utf8mb4 collation-server=utf8mb4_unicode_ci default_authentication_plugin=mysql_native_password innodb_buffer_pool_size=256M innodb_log_file_size=128M skip-name-resolve

这些配置针对NAS环境优化:

  • 减小缓冲池大小适应有限内存
  • 禁用DNS解析加速连接
  • 确保完全的UTF-8支持

4. 部署与初始化

4.1 启动服务栈

在项目目录下执行:

docker-compose up -d

观察日志确认服务正常启动:

docker-compose logs -f

4.2 Gitea初始配置

访问http://NAS_IP:3000完成Gitea的网页安装:

  1. 数据库设置保持默认(已通过环境变量预配)
  2. 管理员账户设置:
    • 用户名:建议不使用admin
    • 密码:设置强密码
  3. 服务器配置:
    • 域名:填写NAS内网IP或域名
    • SSH端口:2222(与compose文件映射一致)

重要提示:首次登录后立即进入"站点管理"→"配置"→"安全",设置"强制密码复杂度"和"禁止用户注册"等安全选项。

4.3 验证数据库连接

进入MySQL容器验证Gitea数据库:

docker exec -it gitea-mysql mysql -ugitea -p

输入.env中配置的gitea用户密码后,执行:

SHOW DATABASES; USE gitea; SHOW TABLES;

应能看到Gitea自动创建的表结构。

5. 高级配置与维护

5.1 备份策略

完整的备份应包含:

  1. 数据库dump:
docker exec gitea-mysql mysqldump -ugitea -p${DB_GITEA_PASSWORD} gitea > gitea-dump.sql
  1. Gitea数据目录:
tar czvf gitea-data-$(date +%Y%m%d).tar.gz ./gitea/data
  1. 编写备份脚本backup.sh:
#!/bin/bash BACKUP_DIR="/path/to/backups" DATE=$(date +%Y%m%d) # 创建备份目录 mkdir -p ${BACKUP_DIR}/${DATE} # 备份数据库 docker exec gitea-mysql mysqldump -ugitea -p${DB_GITEA_PASSWORD} gitea > ${BACKUP_DIR}/${DATE}/gitea.sql # 备份数据卷 tar czvf ${BACKUP_DIR}/${DATE}/gitea-data.tar.gz -C ./gitea/data . # 保留最近7天备份 find ${BACKUP_DIR} -type d -mtime +7 | xargs rm -rf

5.2 性能监控

添加Prometheus监控端点:

  1. 修改docker-compose.yml中gitea服务部分:
environment: ... METRICS_ENABLED: "true" METRICS_TOKEN: "your-monitoring-token"
  1. 访问http://NAS_IP:3000/metrics?token=your-monitoring-token获取指标

5.3 版本升级

Gitea小版本升级步骤:

  1. 停止服务:
docker-compose stop gitea
  1. 修改compose文件中的镜像版本号

  2. 重新拉取镜像并启动:

docker-compose pull gitea docker-compose up -d

大版本升级前务必先备份数据并查阅官方升级指南。

6. 安全加固措施

6.1 网络隔离

建议修改docker-compose.yml中的网络配置:

networks: gitea-net: driver: bridge internal: true

然后为gitea服务添加单独的外部网络接口:

ports: - "3000:3000" - "2222:22" networks: gitea-net: default:

6.2 定期维护任务

  1. 清理无用docker资源:
docker system prune -f
  1. 检查容器日志中的异常:
docker-compose logs --tail=100 | grep -i error
  1. 更新基础镜像:
docker-compose pull docker image prune -f

在实际使用中,这套方案在配备4GB内存的飞牛NAS上稳定运行了6个月,承载了20人的开发团队日常使用。关键优势在于编排文件将整个环境"代码化",迁移到新设备只需复制三个目录和compose文件。

http://www.jsqmd.com/news/529629/

相关文章:

  • 华三模拟器(H3C Simulator)新手避坑指南:搞定Telnet配置中的密码策略和接口模式切换
  • 【数据赋能】方言语音识别技术的突破与应用
  • 能量基模型在深度学习中的创新应用与实践
  • EcomGPT-7B电商模型对比评测:与传统规则引擎在客服场景的效果差异
  • 无线UWB自标定技术:如何让基站自动“找到”自己?
  • 2026年碳五石油树脂、石蜡、甲酸、氢氧化钠与聚合氯化铝一体化供应新路径:兰州三金化工的多维化工服务能力解析 - 深度智识库
  • KubeKey离线部署K8s集群,containerd死活拉不了私有镜像?手把手教你搞定证书认证
  • 避开FPGA时序约束的坑:Vivado Check_timing报告中那些‘High’级别警告都意味着什么?
  • 基于Comsol的SOFC单通道非绝热燃料电池模型:包括气体扩散层与实际SEM扫描结果的电极扩...
  • ESP32-S3开发板避坑指南:从SD卡挂载到LVGL屏幕异常的5个实战解决方案
  • Windows Server域环境下共享文件夹容量配额管理实战:从配置到验证的完整流程
  • 揭秘MCP Sampling接口底层调用栈:基于eBPF实时追踪syscall→gRPC stream→采样率动态熔断阈值触发全过程(含火焰图)
  • AcFun视频下载神器:3步轻松保存A站所有精彩内容!
  • 告别S32DS内置编辑器:用VSCode写代码,搭配J-Link在S32DS中调试S32K144的完整流程
  • MCP vs REST API:20万QPS压测数据曝光,为什么头部大厂已悄悄切换协议栈?
  • Vue-Flow-Editor 流程可视化:7个提效技巧助力业务流程设计
  • 别再只会用OpenCV的resize了!手把手教你用Python实现三种经典图像放大算法(附完整代码)
  • CellphoneDB统计分析实战:单细胞通讯中的配体-受体互作解析
  • 告别纯GPS:手把手教你为Pixhawk无人车配置视觉惯性导航(VIO)与MAVROS融合定位
  • 终极黑苹果安装指南:如何在普通PC上运行macOS系统
  • 效率直接起飞 9个降AIGC工具:毕业论文全流程降AI率测评与推荐
  • Display Driver Uninstaller终极使用指南:彻底解决显卡驱动残留问题
  • 内网开发必备:Maven本地仓库jar包失效的终极解决方案(附一键清理脚本)
  • 从内存访问模式到缓存优化:实战解析Perf的PEBS数据地址剖析功能
  • 【从零开始学Java | 第十八篇】BigInteger
  • C30混凝土实体群桩与边坡稳定性的数值计算模拟及监测研究
  • SUNFLOWER MATCH LAB 科研工具链:Matlab数据预处理与模型调用接口
  • 基于Luminex技术的药效评估方法研究与应用
  • fastMRI技术竞赛实战指南:从数据挑战到算法突破的完整路径
  • 手把手教你为CST8XX触摸屏编写设备树(DTS):基于Hynitron芯片的完整配置指南