gogs迁移服务器记录 | 我的日常分享

gogs迁移服务器记录

gogs迁移服务器记录

一、前期工作

  1. 备份旧服务器gogs-repositories仓库目录。使用scp拷贝或rsync备份至新服务器目录。

image-20230103114740597

  1. 导出gogs数据库文件

sudo mysqldump -h localhost -u gogs -P 3306 --no-tablespaces -p gogs> /www/gogs.sql

  1. GitHub上下载新的软件包至新服务器。https://github.com/gogs/gogs/releases/tag/v0.12.6(避免出现问题,与原先版本保持一致)

二、新服务器

  1. 创建gogs数据库并导入数据。

  2. 解压gogs软件包,将备份的gogs-repositories仓库放到指定位置,默认在gogs软件根目录。

  3. 创建git用户,并修改目录所属权限为git

    1
    2
    3
    4
    sudo adduser git
    sudo su git

    sudo chown -R git:git /www/opt/gogs
  4. 运行gogs软件,./gogs web,浏览器运行安装程序,xxx.xxx.xx.xx:3000

    填写对应配置信息。

    123.60.163.64_3000_install

成功迁移:

image-20230103125059721

三、报错解决

  1. 无法识别 ‘git’ 命令:exec: “git”: executable file not found in $PATH

    安装git

    1
    yum install git -y
  2. 运行系统用户非当前用户:git -> root

    启动gogs软件服务时,必须切换到git用户。

    1
    su git
  3. 您不能够在未创建管理员用户的情况下禁止注册。关闭禁用用户自主注册,后期再打开,原先的数据库中已经有管理员用户了。

    image-20230103122545805

  4. 运行后直接结束

    image-20230103125226250

    查看日志:/gogs/log/gogs.log

在新旧服务器内核一致时,不需要更换gogs软件内核版本时,直接将旧服务器gogs相关文件全部拷贝至新服务器,进行数据库等相关配置后即可成功迁移。

  1. 更改了域名解析至新服务器ip,过了600秒,还是访问到旧服务器的服务。

    需要将旧服务器绑定的nginx域名删除,新服务才能够生效。

  2. 迁移成功后push报错`remote: hooks/pre-receive: line 2: /www/gogs/gogs: No such file or directory

    检查仓库下hooks文件夹下的 pre-receive 的内容,发现路径/www/gogs/gogs是错误的,于是修改错误的路径为迁移后gogs的目录,再测试push一次,竟然成功push。

    post-receive

    1
    2
    #!/usr/bin/env bash
    "/www/gogs/gogs" hook --config=' /www/gogs/gogs/custom/conf/app.ini' pre-receive

    但是这么多仓库一个个手动修改太浪费时间了。翻箱倒柜地找了一下,在管理员账号重新同步所有仓库的 pre-receive、update 和 post-receive 钩子。执行即可。

    image-20230104123826412

    image-20230104123300099

四、Systemd 系统服务运行

参考:https://yuencode.cn/2022/03/27/Gogs%E6%90%AD%E5%BB%BA%E6%80%BB%E7%BB%93/

gogs.service

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
[Unit]
Description=Gogs
After=syslog.target
After=network.target
After=mariadb.service mysqld.service postgresql.service memcached.service redis.service

[Service]
# Modify these two values and uncomment them if you have
# repos with lots of files and get an HTTP error 500 because
# of that
###
#LimitMEMLOCK=infinity
#LimitNOFILE=65535
Type=simple
User=root
Group=root
WorkingDirectory=/www/opt/module/gogs/
ExecStart=/www/opt/module/gogs/gogs web
Restart=always
Environment=USER=root HOME=/www/opt/module/gogs/

# Some distributions may not support these hardening directives. If you cannot start the service due
# to an unknown option, comment out the ones not supported by your version of systemd.
ProtectSystem=full
PrivateDevices=yes
PrivateTmp=yes
NoNewPrivileges=true

[Install]
WantedBy=multi-user.target

image-20230103133549688