MENU

gitlab迁移至搭建于树莓派的gogs

September 5, 2019 • Environment阅读设置

背景

如上篇博文所述,我的服务器主板坏了,而git又是生产学习中必不可少的服务,所以只能考虑尽快将其搭建起来。因为希望将git放在内网,所以考虑使用树莓派3b+搭建。同时,我希望git服务能够有WebUI方便浏览与管理,而gitlab的硬件要求又是树莓派无法满足的,故而尝试着搭建gogs。

在树莓派上搭建gogs

  1. 安装win32 disk imager
  2. 下载raspbian并解压得到.img文件
  3. 用win32 disk imager将.img文件写入tf卡
  4. 在内存卡根目录创建空文件'ssh'以开启ssh服务
  5. 各种方法查找树莓派ip地址,如路由后台或者nmap
  6. 更改/etc/ssh/sshd_config允许root登录

    PermitRootLogin yes
    service ssh restart
  7. 更新系统

    sudo apt-get update && sudo apt-get upgrade
  8. 安装并配置mysql数据库

    apt install mariadb-server
    systemctl enable mariadb.service
    
    mysql -u root
    
    MariaDB [(none)]> GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY 'password';
    Query OK, 0 rows affected (0.001 sec)
    MariaDB [(none)]> flush privileges;
    Query OK, 0 rows affected (0.001 sec)
    MariaDB [(none)]> CREATE DATABASE IF NOT EXISTS gogs COLLATE utf8_general_ci;
    Query OK, 1 row affected (0.001 sec)
    MariaDB [(none)]> quit
    Bye
  9. 安装git

    apt install git
  10. dl.gogs.io下载对应版本的gogs包

    [email protected]:~# uname -a
    Linux raspberrypi 4.19.57-v7+ #1244 SMP Thu Jul 4 18:45:25 BST 2019 armv7l GNU/Linux

    此处我安装的版本是[0.11.91_raspi_armv7](https://dl.gogs.io/0.11.91/gogs_0.11.91_raspi_armv7.tar.gz

  11. 解压并移动至合适的位置(如我移动至/gogs)
  12. 授权gogs二进制文件的BIND操作

    [email protected]:/gogs# setcap CAP_NET_BIND_SERVICE=+eip /gogs/gogs
  13. 安装screen

    apt install screen
  14. 启动gogs

    [email protected]:/gogs# screen ./gogs web
    2019/09/01 08:41:33 [ WARN] Custom config '/gogs/custom/conf/app.ini' not found, ignore this if you're running first time
    2019/09/01 08:41:33 [TRACE] Custom path: /gogs/custom
    2019/09/01 08:41:33 [TRACE] Log path: /gogs/log
    2019/09/01 08:41:33 [TRACE] Build Time: 2019-08-12 02:38:47 UTC
    2019/09/01 08:41:33 [TRACE] Build Git Hash: c154721f4a8f3e24d2f6fb61e74b4b64529255c2
    2019/09/01 08:41:33 [TRACE] Log Mode: Console (Trace)
    2019/09/01 08:41:33 [ INFO] Gogs 0.11.91.0811
    2019/09/01 08:41:33 [ INFO] Cache Service Enabled
    2019/09/01 08:41:33 [ INFO] Session Service Enabled
    2019/09/01 08:41:33 [ INFO] Run Mode: Development
    2019/09/01 08:41:35 [ INFO] Listen: http://0.0.0.0:3000
  15. 访问gogs web http://xxx.xxx.xxx.xxx:3000
  16. 扩展swap大小

    vim /etc/dphys-swapfile
    
    CONF_SWAPSIZE=8192

    由于swap默认被硬编码为2047mb上限,如果要大于2gb还需要修改

    vim /etc/dphys-swapfile
    CONF_MAXSWAP=8192
  17. 重启swap

    /etc/init.d/dphys-swapfile stop
    /etc/init.d/dphys-swapfile start
  18. 查看新swap大小

    [email protected]:~# free -m
                  total        used        free      shared  buff/cache   available
    Mem:            926         142         123          11         660         708
    Swap:          8191           0        8191

迁移数据库

一开始我以为将gitlab的仓库文件拷贝到gogs对应的目录下,重启gogs即可自动识别,但是发现并不能,于是只能用最笨的手动导入方法,还好仓库不是很多,不然还需要写个脚本。

  • 在gogs创建新的仓库
  • 添加远程仓库

    git remote add origin https://git.sailark.com/User/Project.git
  • mirror push

    git push --mirror

未尝试的迁移方法

在发现gogs无法自动导入拷贝的git仓库文件后,我逛了逛gogs的数据库,感觉可以写个脚本将仓库名字等信息直接写入数据库,但是感觉这方法有点脏,怕把gogs搞得一塌糊涂,最后没有进行尝试

上线

在将装了padavan的路由搭上nginx做反代后,将git服务连上了公网,但是发现居然无法访问了,还以为是防火墙规则没配好,但是琢磨了下发现,我家连443端口都被电信封了,据说是需要备案后才能申请解封。。。
那就只能改下端口然后用外网的服务器进行转发了,在外网服务器的nginx上再套一层跳到我家里,然后再套个cloudflare的cdn,一番操作之后果然外网可以了,虽然速度有些慢。
等等,我都这样做了为什么不干脆直接放在外网服务器上啊???