一、需求:
1、目前使用的是本地git,在windows上部署的gogs来管理开发代码。
2、需要迁移代码到阿里云的ECS服务器,并且可以通过web页面管理和TortoiseGit来拉取提交代码。
二、环境:
1、gogs在windows上安装,并存有原始代码
2、在阿里的ECS服务器上部署docker,并下载镜像gogs
三、步骤:
1、部署docker,登录ECS通过yum安装dokcer
yum -y install docker
systemctl start docker
systemctl enable docker
2、下载gogs的docker镜像
docker search gogs
docker pull gogs/gogs
docker images
3、创建本地存储目录,以便docker映射存储到本地
mkdir /var/gogs #也可以在其他目录下创建
4、启动镜像
备注:docker是依赖与firewalld的,所有firewall需要设置成宽松模式(命令行执行:firewall-cmd --set-default-zone=trusted)
docker run -d --name=gogs -p 10022:22 -p 10080:3000 -v /var/gogs:/data gogs/gogs
docker ps #显示当前运行的docker
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
9504e9b5e768 gogs/gogs "/app/gogs/docker/st…" 4 weeks ago Up 4 weeks 0.0.0.0:10022->22/tcp, 0.0.0.0:10080->3000/tcp gogs
5、配置
管理用户可以随意设置,主要用于web页面登录
登录后创建一个测试的仓库
这里有git的下载地址
6、在windows电脑上安装部署TortoiseGit(安装流程这里省略,在网上搜索TortoiseGit的包直接双击安装即可)
在D盘下创建一个git的目录;
进到git目录鼠标右键会有“Git克隆”
输入gogs里的账号密码
拉取成功
注意的地方:如果输错账号密码,那TortoiseGit会拉取失败,这时需要到控制面板里找到“凭证管理器”里的删除掉gogs地址对应的普通凭证,再次“克隆”就会弹出输入用户密码对话框。
四、从windows上的gogs里迁移git数据到centos里的gogs。
备注:gogs的迁移命令
./gogs backup 备份
./gogs backup --help
--config value, -c value 指定配置文件位置 path (default: "custom/conf/app.ini")
--verbose, -v 查看过程
--tempdir value, -t value 指定临时空间 (default: "/tmp")
--target value 备份文件存储位置 (default: "./")
--archive-name value 备份文件名字 (default: "gogs-backup-20200428143439.zip")
--database-only 是否只迁移数据库
--exclude-repos 不迁移那些仓库
./gogs restore 恢复
./gogs restore --help
OPTIONS:
--config value, -c value 指定配置文件位置(default: "custom/conf/app.ini")
--verbose, -v 查看过程
--tempdir value, -t value 指定临时空间 (default: "/tmp")
--from value 指定数据源(必须)
--database-only 只迁移数据库文件
--exclude-repos 不迁移那些仓库
1、在window里通过
gogs.exe backup #全备份数据,会生成一个gogs-backup-20201218181801.zip的文件
2、拷贝备份的zip到centos里/var/gogs目录下
[root@iZ2 log]# cd /var/gogs/
[root@iZ2 gogs]# ls
git gogs gogs-backup-20201218181801.zip ssh
3、进入docker,只恢复数据库
[root@iZ2 gogs]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
9504e9b5e768 gogs/gogs "/app/gogs/docker/st…" 4 weeks ago Up 4 weeks 0.0.0.0:10022->22/tcp, 0.0.0.0:10080->3000/tcp gogs
[root@iZ2 gogs]# docker exec -it 95 /bin/bash #进入到docker里
bash-5.0# cd /data/ #gogs的配置文件在此目录里的gogs/conf/下
bash-5.0# ls
git gogs gogs-backup-20201218181801.zip ssh
bash-5.0#
bash-5.0# su git #需要切换为git用户,因为windows里是用git用户备份的gogs数据,用root用户会报错(如果不知道windows里用的什么用户可以去windows的gogs配置文件里查看)
bash-5.0$ cd /app/gogs/ #进入docker里只能在此目录才能用./gogs的命令
bash-5.0$ ls
data docker gogs log
bash-5.0$ mkdir /data/tmp
bash-5.0$ cd /data/
bash-5.0$ mkdir tmp
bash-5.0$ ls
git gogs gogs-backup-20201218181801.zip ssh tmp
bash-5.0$ ./gogs restore --database-only --config /data/gogs/conf/app.ini --tempdir /data/tmp --from gogs-backup-20201218181801.zip
备注:
--config /data/gogs/conf/app.ini 指定导入仓库用到的配置文件,否则使用压缩包中的默认配置文件
--database-only 只导入数据库,这里我们只导入数据库的数据
--tempdir 指定一个临时空间,如果不指会在docker的根下创建,如果根的空间不够也会报错
4、迁移git数据
[root@iZ2 conf]# cd /var/gogs/gogs/conf/
[root@iZ2 conf]# ls
app.ini
[root@iZ2 conf]# vim app.ini
app.ini是web页面配置的gogs信息
BRAND_NAME = Gogs
RUN_USER = git
RUN_MODE = prod
[database]
TYPE = sqlite3 #gogs使用的数据库
HOST = 127.0.0.1:5432
NAME = gogs
USER = gogs
PASSWORD =
SSL_MODE = disable
PATH = data/gogs.db #gogs数据库文件存放位置
[repository]
ROOT = /data/git/gogs-repositories #git数据存放的数据位置,在windows的配置文件里也有同样的配置。
[server]
DOMAIN = http://47.108.16.11
HTTP_PORT = 3000
EXTERNAL_URL = http://http://47.108.16.11:10080/ #这里是登录web的公网地址,如果做了域名解析,这里也可以填写域名,项目里的http地址就会变成域名。
DISABLE_SSH = false
SSH_PORT = 10022
START_SSH_SERVER = false
OFFLINE_MODE = false
[mailer]
ENABLED = false
[auth]
REQUIRE_EMAIL_CONFIRMATION = false
DISABLE_REGISTRATION = false
ENABLE_REGISTRATION_CAPTCHA = true
REQUIRE_SIGNIN_VIEW = false
[user]
ENABLE_EMAIL_NOTIFICATION = false
[picture]
DISABLE_GRAVATAR = false
ENABLE_FEDERATED_AVATAR = false
[session]
PROVIDER = file
[log]
MODE = file
5、windows上找到gogs的配置文件app.ini查看git数据位置
[repository]
ROOT = D:/gitserver
把D盘的gitserver目录压缩为zip上传到centos服务器的/var/gogs/git/gogs-repositories目录下(centos里可以用unzip来解压zip包)
6、验证
登录web页面查看转移过来的创库代码
五、报错与排错
此为全量恢复(数据库和代码)没有指定临时存储空间,默认是在根目录里存储,因为是用docker启动的,所以空间不足,需要指定
[FATAL] [....io/gogs/internal/cmd/restore.go:58 runRestore()] Failed to extract backup archive: write /tmp/gogs-backup/repositories.zip: no space left on device
此为root用户恢复时会报gogs用户不对,需要切换为git用户
[FATAL] [gogs.io/gogs/gogs.go:40 main()] Failed to start application: init configuration: user configured to run Gogs is "git", but the current user is "root"
此为在/tmp下已经有gogs-backup目录,删除后再试即可
[FATAL] Failed to import 'custom': rename /tmp/gogs-backup/custom /data/gogs/gogs/custom: invalid cross-device link
此报错占时不知道原因,在用./gogs resore全量恢复时会报此错误,所以最后通过先daoru用户数据库数据,再拷贝windows下的gitserver数据的方式来迁移。
[FATAL] [....io/gogs/internal/cmd/restore.go:143 runRestore()] Failed to import 'data': rename /data/tmp/gogs-backup/data/attachments /app/gogs/data/attachments: no such file or directory
其他报错:
1、在恢复的git数据里有数据,但在仓库里会报505
解决:在windows里查看gitserver里是否有快捷方式,如果有,只能把数据的实际路径目录拷贝下来,再删除gogs里的对应报505的仓库,重新创建上传。
2、可以拉取数据,但不能在web页面里的仓库看到,那是因为gogs-repositories里有对应的项目数据,可能是gogs代码问题,这种情况也只能删除仓库,重新创建上传。
3、如果配置了nginx反向代理,注意需要配置server里添加一行
client_max_body_size 1024m; #主机是限制nginx上传单个文件大小的,默认100M