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服務