gogs迁移
windows->linux
之前gogs放在windows server2016中,需要迁移至linux docker中。
首先拉取gogs镜像
docker pull gogs/gogs
然后挂载卷,运行docker容器。
docker run -p 3000:3000 --name gogs -v /mnt/gogs/data/:/data/gogs/data -v /mnt/gogs/cert/:/app/gogs/cert -v /mnt/gogs/public/:/app/gogs/public -v /mnt/gogs/scripts/:/app/gogs/scripts -v /mnt/gogs-repositories:/app/gogs/repositories -v /mnt/gogs/custom/conf/:/data/gogs/conf -d gogs/gogs
其中/mnt/gogs目录是原windows server中放置gogs的磁盘目录,换为linux后挂载到了/mnt下。可替换为自己的gogs目录所在路径
挂载进docker 的目录只需要data public scripts custom/conf 和 仓库所在目录repositories,如果有ssl证书也需要挂载进去。
启动完毕后进入docker容器中修改配置文件
docker exec -it gogs /bin/bash
vi /data/gogs/conf/app.ini
批量替换所有仓库的配置路径
定位到仓库所在根目录。
find 查找update pre-receive和post-receive文件, sed替换掉gogs可执行程序和配置文件路径,替换格式为s#old#new#g, old 和new是原字符串和新字符串,有特殊符号需要加\进行取消转义
替换gogs所在路径
find . -type f \( -name "update" -o -name "pre-receive" -o -name "post-receive" \) -exec sed -i s#D:\/gogs\/gogs\/gogs.exe#\/app\/gogs\/gogs#g {} \;
替换配置文件所在路径
find . -type f \( -name "update" -o -name "pre-receive" -o -name "post-receive" \) -exec sed -i s#D:\/gogs\/gogs\/custom\/conf\/app.ini#\\/data\/gogs\/conf\/app.ini#g {} \;
其中 D:\/gogs\/gogs\/gogs.exe 是gogs可执行程序在源本windows中的路径,/都加了\来取消转义。 即D:/gogs/gogs/gogs.exe
\/app\/gogs\/gogs 是gogs在docker目录中的路径,即 /app/gogs/gogs
修改完毕后执行./gogs web启动即可,然后就可以关掉终端接着访问gogs了。无缝迁移,完美。
PS: 从一台windows服务器迁移到另一台windows服务器也大同小异,
- 备份gogs目录和仓库目录,备份还原gogs数据库
- 修改配置文件中的各种目录路径
- 修改每个仓库中hooks目录下的update pre-receive和post-receive文件中关于gogs路径和配置文件路径
- 重启gogs服务