之前已经在服务器上装过gogs了,但由于VPS的硬盘空间较小,所以,准备的是在自己的mac mini上也装一个,由于已经dmz,所以可以进行穿透访问(网址就不透露了)
mac下面安装gogs,没有想象中的那么难,因为已经有人做过教程了,但为了能够自启动则需要做一个plist文件,以便用launchctl load一下
教程来自:http://ju.outofmemory.cn/entry/128521,如果你用sqlite来处理的话,则更简单,上述网页中,可以直接跳过前面的postgresql的安装直接进行gogs那一块(gogs直接从网上下载二进制的安装包就行,放到你的目录里,比如~/software/gogs)
进入~/software/gogs 目录,运行 ./gogs web,如果能够正常输出,OK,我们就开始下一步,创建plist文件:
XML/HTML代码
- <?xml version="1.0" encoding="UTF-8"?>
- <!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
- <plist version="1.0">
- <dict>
- <key>Label</key>
- <string>io.gogs.web</string>
- <key>ProgramArguments</key>
- <array>
- <string>sh</string>
- <string>-c</string>
- <string>cd /Users/fundon/services/gogs; ./gogs web</string>
- </array>
- <key>RunAtLoad</key>
- <true/>
- <key>KeepAlive</key>
- <true/>
- <key>WorkingDirectory</key>
- <string>/Users/fundon/services/gogs</string>
- </dict>
- </plist>
修改其中的两个地方:
1、sh 的路径
2、WorkingDirectory的路径,改成你gogs软件所在的路径
改完后,launchctl load一下即可(自从装了homebrew,它一般会在你的~/Library/下创建LaunchAgents目录,将这些plist文件扔过去,以后备份/Users/的时候就相当于备份下来了 ,超级方便 )
这是一个备份,起因是由于我现在使用的gogs不能使用ssh的方式连接,主要是不方便,所以目前我是使用了HTTP的方式。
看了这篇文章后对我有启发,但是我没有使用,所以只是先做个备份。原文在:http://www.luxingmin.com/archives/278.html
XML/HTML代码
- 一直想实现指定git访问的私钥,网上资料给出来的都是通过ssh_config来实现,这种方法很繁琐,另外想实现git webhook部署时,使用这种方法也比较不灵活。
-
- 切入正题
-
- 建立git_ssh文件,内容如下
-
- #!/bin/bash
- ssh -i $SSH_KEY_FILE $1 $2
- 然后增加执行权限
-
- chmod 755 git_ssh
- 然后就可以通过如下命令指定git访问时使用的ssh私钥
-
- SSH_KEY_FILE=/root/git/id_rsa GIT_SSH=/root/git/git_ssh git clone git@xxx
---EOF---
gogos 默认是 3000端口,如果你本身已经有了其他WEB服务,比如apache,当然不可能同时占用80端口,这时候就可以利用apapche的proxy功能。如果你是apt-get 安装 的apache,就方便了,debian/ubuntu 都支持a2ensiate,a2enmod这样的小脚本。你只要打开a2enmod proxy proxy_http就行了,然后新建一个site加入以下配置
XML/HTML代码
- <VirtualHost *:80>
- ServerAdmin test@test.com
- ServerName yoursitename
- ProxyRequests off
- ProxyPass / http://127.0.0.1:3000/
- ProxyPassReverse / http://127.0.0.1:3000
- <Proxy *>
- Order Deny,Allow
- Allow from all
- </Proxy>
- ErrorLog ${APACHE_LOG_DIR}/yoursitename.log
- LogLevel warn
- </VirtualHost>
是不是很简单,这时候你用supervisor启动后就可以通过WEB访问了.不过这时候有具小缺点,那就是如果你killall gogs进程的话,你会发现再也启动不了了.看启动的LOG会告诉你3000端口被占用,用netstat -an|grep 3000,发现有N个进程都是在CLOSE_WAIT的情况,这时候用: echo $(netstat -anp|grep 127.0.0.1:3000 |awk '{print $7}') 发现,全是apache2占着这些进程.
怀疑刚才在强杀gogs进程的时候,apache因为开着proxy导致刚刚向3000端口发起请求就挂起,导致异常关闭所以一直卡住(以前用nginx的做反代的时候也有类似问题,只要客户机挂了,nginx必须 重启),所以我重启了一下apache,立刻发现gogs启动成功.
至此,如果要 重启gogs最好是/etc/init.d/supervisor restart ,如果不正常就再重启一下apache...
OK,问题全部解决
在gogs的release包中,linux_amd64.zip这个包里,scripts目录下没有start.sh这个文件,因此在 执行./scripts/gogs_supvisor.sh文件的时候会直接后/usr/local/bin/gogs_start文件不存在
打开这个gogs_supvisor.sh文件后,发现他会判断/usr/local/bin/gogs_start文件是否存在,如果不存在就将./scripts/start.sh文件复制 过去并改为为gogs_start
然而,scripts目录下并没有这个start.sh文件,这个问题在官方的issue中已经提出并有解决方案:https://github.com/gogits/gogs/issues/1198
解决方案就是:
XML/HTML代码
- oh man sorry for that.
-
- I would suggest install supervisor as init.d somehow doesn't worked for me after trying lot of diffrent combinations. to do that,
-
- sudo apt-get -y install supervisor
-
- and edit its file via
-
- sudo nano /etc/supervisor/supervisord.conf
-
- [program:gogs]
- directory=/home/git/go/src/github.com/gogits/gogs/
- command=/home/git/go/src/github.com/gogits/gogs/gogs web
- autostart=true
- autorestart=true
- startsecs=10
- stdout_logfile=/var/log/gogs/stdout.log
- stdout_logfile_maxbytes=1MB
- stdout_logfile_backups=10
- stdout_capture_maxbytes=1MB
- stderr_logfile=/var/log/gogs/stderr.log
- stderr_logfile_maxbytes=1MB
- stderr_logfile_backups=10
- stderr_capture_maxbytes=1MB
- environment = HOME="/home/git", USER="git"
-
- change directory's to match your installation and user to your git user. and restart the supervisor via,
- sudo service supervisor restart
-
- that's all you need to make gogs start automatically on boot.
看上述内容,修改一下supervisor的配置,加入gogs的配置,注意修改成你自己的路径即可
因为安装gogs遇到了一些奇怪的问题,所以我不得不尝试换个方式,于是我想,我是不是可以用apt来安装 ,毕竟官方在这一页有说明:http://gogs.io/docs/installation/install_from_packages.html,于是我到 https://packager.io/gh/pkgr/gogs/install?bid=190#debian-7-gogs 进行了查看,按照上面写的进行操作:
XML/HTML代码
- wget -qO - https://deb.packager.io/key | sudo apt-key add -
- echo "deb https://deb.packager.io/gh/pkgr/gogs wheezy pkgr" | sudo tee /etc/apt/sources.list.d/gogs.list
- sudo apt-get update
- sudo apt-get install gogs
执行到第三步就报错了:
XML/HTML代码
- E: The method driver /usr/lib/apt/methods/https could not be found.
这,这搞什么?google了一下,原来有这个问题的人很多,但也很好解决,先把刚才的gogs.list中的内容注释掉,运行一下:
XML/HTML代码
- apt-get install apt-transport-https
然后就OK了。上面的帮助内容来自:http://unix.stackexchange.com/questions/166917/etc-apt-sources-list-wont-accept-urls-with-https-connection,我还以为是stackfollow呢。结果居然不是。。。