业务背景
当前gitea版本比较老,且数据库用的sqllite3,当前sqllite3的db文件增长到了800多M,当前git访问性能越来越低,为提高性能,计划将gitea-v1.17.1升级到当前最新版本v1.22.1,并将数据库从sqllite3迁移到mariadb-v11.4.2。
解决方案
将gitea从v1.17.1升级到当前最新版本v1.22.1;将数据库从sqllite3迁移到mariadb-v11.4.2;采用docker-compose.yaml快速部署。
实现步骤
- 用docker-compose.yaml快速部署mariadb。
cd /data
mkdir mariadb
cd mariadb
vim docker-compose.yaml
version: '3'
services:
mariadb:
image: mariadb:11.4.2
container_name: mariadb
restart: always
environment:
- MYSQL_ROOT_PASSWORD=gitea_root_passwd # root密码
- MYSQL_USER=gitea # 数据库用户
- MYSQL_PASSWORD=gitea_passwd # 数据库密码
- MYSQL_DATABASE=gitea # 数据库名称
ports:
- "3306:3306"
volumes:
- ./data:/var/lib/mysql
- ./conf:/etc/mysql/mariadb.conf.d
启动mariadb
docker-compose up -d
- 安装sqlite3-to-mysql
pip install sqlite3-to-mysql
- 停止gitea服务,备份gitea后,将sqllite3迁移到mariadb
cd /data
tar -cvf gitea_bak.tar ./gitea
sqlite3mysql --sqlite-file ./gitea/gitea.db --mysql-database gitea --mysql-user root --mysql-password "gitea_root_passwd" --mysql-collation utf8mb4_bin
迁移完成,检查mariadb中gitea库。
- 修改gitea配置app.ini文件中,并启动gitea
cd /data/gitea/
vim ./gitea/conf/app.ini
修改[database]、[log]如下参数,其余保持不变
[database]
DB_TYPE = mysql # 修改为mysql
HOST = 192.168.3.3:3306 # 修改为mariadb地址
NAME = gitea # 修改为mariadb中gitea库名
USER = gitea # 修改为mariadb中gitea用户名
PASSWD = gitea_passwd # 修改为mariadb中gitea用户密码
[log]
# ROUTER = console
logger.router.MODE = console
启动gitea进行验证。
cd /data/gitea/
docker-compose up -d
- 拉取gitea最新版本,并启动gitea。
cd /data/gitea
vim docker-compose.yaml
version: "3"
networks:
gitea:
external: false
services:
server:
image: gitea/gitea:1.22.1 # 修改为最新版本1.22.1
container_name: gitea
environment:
- USER_UID=1000
- USER_GID=1000
restart: always
networks:
- gitea
volumes:
- ../gitea:/data
- /etc/timezone:/etc/timezone:ro
- /etc/localtime:/etc/localtime:ro
ports:
- "3000:3000"
- "2000:22"
启动gitea和mariadb
docker-compose up -d
- 迁移完成,也可以将两个yaml整合到一个文件中。
version: "3"
networks:
gitea:
external: false
services:
server:
image: gitea/gitea:1.22.1 # 修改为最新版本1.22.1
container_name: gitea
environment:
- USER_UID=1000
- USER_GID=1000
# - GITEA__database__DB_TYPE=mysql
# - GITEA__database__HOST=192.168.3.3:3306 #若db不映射端口,此处改成db:3306
# - GITEA__database__NAME=gitea
# - GITEA__database__USER=gitea
# - GITEA__database__PASSWD=gitea_passwd
restart: always
networks:
- gitea
volumes:
- ../gitea:/data
- /etc/timezone:/etc/timezone:ro
- /etc/localtime:/etc/localtime:ro
ports:
- "3000:3000"
- "2000:22"
depends_on:
- db
db:
image: mariadb:11.4.2
container_name: mariadb
restart: always
environment:
- MYSQL_ROOT_PASSWORD=root_passwd # root密码
- MYSQL_USER=gitea # 数据库用户
- MYSQL_PASSWORD=gitea_passwd # 数据库密码
- MYSQL_DATABASE=gitea # 数据库名称
volumes:
- ../mariadb/data:/var/lib/mysql
- ../mariadb/conf:/etc/mysql/mariadb.conf.d
ports:
- "3306:3306" #可以不映射端口,保持映射为了在宿主机上可用脚本来备份数据库
参考:
https://docs.gitea.com/zh-cn/installation/install-with-docker