在飞牛NAS上运行MySQL和Gitea时,合理的资源分配是确保服务稳定性的第一步。许多用户往往忽视了Docker容器的资源限制设置,导致在高负载时系统资源被耗尽,影响整体性能。
CPU优先级设置:通过--cpus参数可以限制容器使用的CPU核心数。对于MySQL这类对计算资源敏感的服务,建议分配至少1个完整CPU核心:
bash复制docker update --cpus=1.0 mysql_container
内存限制策略:内存不足会导致MySQL频繁交换到磁盘,严重影响性能。一个实用的经验法则是:
| 服务类型 | 推荐内存限制 | 备注 |
|---|---|---|
| MySQL | 2GB+ | 根据数据库大小调整 |
| Gitea | 1GB | 小型团队使用足够 |
注意:设置内存限制时,务必留出至少20%的余量给NAS系统和其他服务
IO优先级调整:在存储密集型场景下,可以通过--blkio-weight参数优化磁盘IO分配:
bash复制docker update --blkio-weight=500 mysql_container
MySQL在容器环境中的默认配置往往不适合生产环境。以下是几个需要重点调整的参数:
innodb_buffer_pool_size: 设置为可用内存的70-80%innodb_log_file_size: 建议256M-1G之间max_connections: 根据实际用户数调整,避免过高将这些参数写入自定义配置文件my-custom.cnf:
ini复制[mysqld]
innodb_buffer_pool_size=1G
innodb_log_file_size=256M
max_connections=100
query_cache_size=0
然后通过卷映射应用到容器:
bash复制docker run -v /path/to/my-custom.cnf:/etc/mysql/conf.d/custom.cnf mysql
即使配置了合适的参数,不良的查询仍可能导致性能问题。定期检查慢查询日志:
sql复制-- 启用慢查询日志
SET GLOBAL slow_query_log = 'ON';
SET GLOBAL long_query_time = 2;
SET GLOBAL slow_query_log_file = '/var/log/mysql/mysql-slow.log';
对于Gitea,特别关注以下表的索引情况:
repositoryissuepull_requestuser飞牛NAS提供了多种存储选项,为Docker卷选择正确的类型至关重要:
绑定挂载:直接映射到NAS文件系统
Docker卷:由Docker管理
推荐目录结构:
code复制/volume1/docker/
├── mysql/
│ ├── data/
│ └── conf/
└── gitea/
├── data/
└── conf/
结合飞牛NAS的任务计划功能,可以创建全自动的备份方案:
bash复制#!/bin/bash
# MySQL备份
docker exec mysql_container mysqldump -u root -p"$MYSQL_ROOT_PASSWORD" --all-databases > /backup/mysql_$(date +%Y%m%d).sql
# Gitea数据备份
tar -czvf /backup/gitea_$(date +%Y%m%d).tar.gz /volume1/docker/gitea/data
将此脚本设置为每周运行一次,并保留最近4个备份。
永远不要使用root账户运行应用服务。为Gitea创建专用数据库用户:
sql复制CREATE USER 'gitea'@'%' IDENTIFIED BY 'complex-password-here';
GRANT SELECT, INSERT, UPDATE, DELETE, CREATE, INDEX, DROP, ALTER ON gitea.* TO 'gitea'@'%';
FLUSH PRIVILEGES;
在Docker中创建专用网络,隔离MySQL和Gitea服务:
bash复制docker network create gitea_network
docker network connect gitea_network mysql_container
docker network connect gitea_network gitea_container
这样配置后,Gitea可以通过容器名直接访问MySQL,无需暴露MySQL端口到宿主机。
设置定期任务检查:
可以使用以下命令检查MySQL用户权限:
sql复制SELECT user, host FROM mysql.user;
SHOW GRANTS FOR 'gitea'@'%';
飞牛NAS自带的资源监控可以满足基本需求,但对于深入分析,建议:
sql复制UPDATE performance_schema.setup_instruments SET ENABLED = 'YES', TIMED = 'YES';
UPDATE performance_schema.setup_consumers SET ENABLED = 'YES';
docker stats实时监控容器资源使用:bash复制watch -n 5 docker stats --no-stream mysql_container gitea_container
集中管理容器日志对于故障排查至关重要:
bash复制# 查看MySQL错误日志
docker logs -f mysql_container 2>&1 | grep -i error
# Gitea访问日志分析
docker exec gitea_container tail -f /data/gitea/log/access.log
考虑使用飞牛NAS的日志服务器功能集中收集和分析这些日志。
虽然飞牛NAS是单节点系统,但仍可以采取一些措施提高可用性:
对于关键业务数据,可以考虑以下架构:
code复制主飞牛NAS (生产环境) → 定期备份 → 备用服务器 (可快速激活)
在一次为20人开发团队部署的Gitea优化中,通过以下调整使性能提升了3倍:
innodb_buffer_pool_size从默认的128M增加到1.5Grepository表添加了复合索引具体参数变化:
| 参数 | 调整前 | 调整后 | 效果 |
|---|---|---|---|
| innodb_buffer_pool | 128M | 1.5G | 查询速度提升 |
| git.timeout | 60s | 300s | 大仓库操作成功 |
| max_connections | 50 | 100 | 并发能力提升 |
这些调整都是通过修改Gitea的app.ini和MySQL配置文件实现的。