今天搭建了个局域网的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访问
上一段的配置方式用的是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,配置。
搞定。仓库用户信息都保留了。