Gogs搭建git服务器

今天搭建了个局域网的git服务器,记录下操作过程和遇到的问题。

安装Ubuntu

其实在Windows或者Mac OS下面也可以完成的,可以没必要装Ubuntu。

Ubuntu官网下载16.04 的Ubuntu iso镜像,用UltraISO制作启动U盘。

安装的时候选择的是默认的选项,与Windows系统共存。

安装完成后重启,遇到问题了,没有进入引导界面,直接进入了Win10,根据网上的方法,下载EasyBCD重建引导,能进入引导了。但是选择Ubuntu后,出现一行错误,shimx64.efi加载失败之类的提示。

后来了解到有两种引导方式,一种是用shimx64.efi,一种是grubx64.efi引导,于是参照这个改为用grubx64.efi的方式引导。

终于成功进入Ubuntu,安装完成。

安装MySQL和Git

Git服务采用Gogs,参照官网的说明安装MySQL安装Git,问题不大。

配置也比较顺利,没有出现花时间比较多的地方。

安装Gogs

  • 下载Gogs并解压
  • 给Gogs建数据库
  • mysql -u root -p登录mysql
  • 将gogs/scripts/里的mysql.sql里的命令复制到命令行运行,建立gogs数据库
  • 输入quit命令退出mysql
  • 在gogs的目录行运行gogs:./gogs web
  • 浏览器运行localhost:3000
  • 完成

在我关掉Gogs又重新运行的时候,返现运行不起来了,在Gogs的文件夹下查看log,提示*Fail to initialize ORM* engine : access denied passwor (NO)这样的错误。

经排查,发现问题在我把MySQL的密码设置为一个空格,这个配置在Gogs的配置文件中好像没有被识别出来。

于是用mysql> set password for 用户名@localhost = password('新密码');把MySQL的密码换成其他的,在把Gogs的app.ini里的配置改为相应的密码,就好了。

局域网内其他电脑访问

首先配置Ubuntu的防火墙,打开Gogs的3000端口,参考sudo ufw allow 3000

然后ifconfig查看本机ip。

gogs web启动gogs,局域网内其他电脑就可以通过192.168.x.x:3000访问本机的Gogs了。

如果要配置为80端口访问,需要root权限,Linux绑定1024以下的端口需要root权限。

在Gogs的app.ini里面设置好端口后,主要要记得把USER也设置为root,然后执行sudo ./gogs web就可以了。

接下来局域网内其他计算机只要访问192.168.x.x就可以访问到Gogs了。

2017年03月01日后记:

用sudo运行gogs后,生成的文件都在sudo用户下,以后的权限管理比较麻烦,还是不要瞎配置比较好,

今天重装Ubuntu,重启还是引导不了Ubuntu,之前的方式不行了,使用Boot Repair工具尝试,还是不行,后来无意中在选择的启动界面按下esc,居然就跳转到了grub2.。。。。。。由于我用了easyBCD修复,怀疑是easyBCD默认启动了他的启动程序。。。。。。按下esc后就退出了他的启动程序进入了grub2

致我逝去的两个小时。。

SSH访问

更新:。。刚刚发现,Gogs自带ssh访问管理,用下面的东西配置完后才看到的,,以后再尝试Gogs自带的ssh吧

由于公司局域网貌似限制了其他端口的访问,只能用22端口用SSH访问了

首先要安装openssh-server端,参考,启动ssh服务。

然后要配置用户、用户群组和他们的权限,参考 建立多人协作git仓库/git 仓库权限控制(SSH)。

通过useradd -g 用户组 用户名向指定的用户组添加用户。

通过passwd 用户名修改指定用户名的密码。

其他人就可以通过ssh 和用户名@你主机的IP访问主机了。

可通过git clone 用户名@主机地址:/git仓库完整路径/git仓库名.git来进行git操作。

为了安全,还需要禁用其他用户的shell登录:

出于安全考虑,你可以用 Git 自带的 git-shell 工具限制 git 用户的活动范围。这可以通过编辑 /etc/passwd 文件完成。找到类似下面的一行:

把 bin/sh 改为 /usr/bin/git-shell (或者用 which git-shell 查看它的实际安装路径)

git:x:1003:1003:,,,:/home/git:/bin/bash
改为:

git​:x:​1003:1003:,,,:/home/git:/usr/bin/git-shell
现在 git 用户只能用 ssh 连接来推送和获取 Git 仓库,而不能直接使用服务器的 shell。尝试普通 ssh 登录的话,会被拒绝登录。

搭建通过 ssh 访问的 Git 服务器

真·SSH访问

上一段的配置方式用的是linux的用户来管理权限。有很大的局限性。用Gogs自带的ssh来操作会方便很多。

在Gogs的配置文件里面开启ssh,设置好端口。

用命令命令行ssh-keygen -C '用户名' -t rsa建立密钥对,然后将id_rsa.pub,即公钥,用文本编辑器打开,复制到Gogs网页端对应的账号的设置项里面,该账号就可以用这个密钥登录了。账户参与的仓库和权限等都可以通过网页端配置。跟github一样

ssh://用户名@192.168.0.1:2000/xxx/xxx.git

迁移到另外一台电脑

最近需要换一台电脑运行。涉及数据库的迁移,也记录下操作过程。

在命令行下用mysqldump命令来导出数据库。

出现的问题:

提示Using a password on the command line interface can be insecure错误

-p后面不加密码就可以了,按完回车后再输入密码。

步骤:

  • 在命令行下输入mysqldump -uroot -p --opt gogs > /home/xxxx/xxx
  • 在新的电脑上,用前文的方式建立gogs数据库
  • 执行mysql gogs < [backup file name]

把home目录下的gogs-repositories复制到心的电脑上

运行Gogs,配置。

搞定。仓库用户信息都保留了。