首先还是给出 gitpitch 文档参考. 然后上次第一次使用gitpitch之后发现理念很不错,实测效果也还行.习惯了的话做代码review或者是短技术分享是很好的. 但是因为在线有很多蛋疼的原因,包括服务器缓存影响,安全问题. 所以这次来探索一下本地构建gitpitch服务运行在本地的gogs上..
注意,以下流程都是针对坑爹的windows,如果你是用mac/linux可能会好很多
0x00.准备工作
gitpitch是MIT开源项目,所以很友好的允许你本地自建的方式允许,那来试试看:
- jdk1.8版本(自行安装配置环境变量.高版本是否兼容不确定)
- 首先要安装scala的构建工具 ,选择最新版本安装.
git clone https://github.com/gitpitch/gitpitch.git下载源码项目. 在项目路径启动git或者bash(cmd或powershell可能没识别)- 路径目录下输入
sbt run,第一次初始化需要可能小时的时间去海外下载项目依赖并解析.(不开代理实测可能要40+分钟…如果实在太慢建议使用proxy) 而且极易超时报错,天坑 !! - 构建完成后尝试访问
localhost:9000/gitpitch/kitchen-sink测试一下自带是否能跑通
但是这只是很基本的允许环境,并且默认是与github企业版绑的,我们需要自行修改,并启动离线的功能(pdf,zip)
0x01.生产捆绑
在刚的基础上,我们输入
sbt dist. 完成后可以找到压缩包target/universal/server-{release}.zip修改配置文件,先
cp conf/application.conf /yourpath/production.conf备份一下修改/新增
production.conf文件中的以下部分: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
31
32
33#添加本地网络支持,如果ip是dhcp的可以不用添加最后的yourIP
hosts {
allowed = ["localhost", "127.0.0.1", ".local", "YOUR-HOST-OR-IP:9000"]
}
#更新原本gitpitch的配置,默认是localhost:9000 无需修改
gitpitch {
hostname = "YOUR-HOST-OR-IP:9000"
}
#删掉不需要的依赖,比如这里只留gogs,因为其他太重,下面是已经替换了的
#最后把你的api-token-key填进去
git {
repo {
services = [
{
name = "Gogs"
type = "gogs"
site = "https://gogs.io"
apibase = "http://localhost:3000/api/v1/"
apitoken = "token YOUR-GOGS-APP-TOKEN-HERE" #添加发现没有读取..
apitokenheader = "YourAuthorization"
rawbase = "http://localhost:3000/"
rawbase = "https://try.gogs.io/"
default = "false" #切忌要改为true,不然后面不会去读
}
]
}
}
#必须生成一个play私钥,生成方法参考
#这里真的是坑,直接在gitpitch项目下输入 sbt playGenerateSecret就行了
play.crypto.secret = "YOUR-GENERATED-SECRET-KEY"
#更新补充,看了一下源码发现这个secret其实内网只要随便写就行了。。但是不能是默认值
0x02.离线依赖
A.安装pdf离线依赖(Bug待解决)
安装
decktape依赖(是一个github项目),npm install -g decktape(同样建议配全局代理…)经过多次尝试(代理/全局…),发现
hummus这个库总是down失败,尝试单独先安装npm install -g --unsafe-perm hummus还是会失败…更新
production.conf中的decktape配置1
2
3
4
5
6# decktape的绝对路径
gitpitch {
decktape {
home = "/usr/local/bin/decktape" #修改为win或linux的安装路径
}
}
补:这个依赖库总是下不下来,非常蛋疼,核心原因是因为下载hummus的时候有个包已经被移除了导致404报错. 查看大量issue之后尝试先清空node_modules以及npm缓存还是不行.
B.安装zip运行环境依赖
因为它导出zip 的时候需要调用环境变量里面的zip执行文件…所以我估计理论上需要安装一下或者配置一下.你直接在命令行打zip不行就说明需要单独配置,常见的x压都是不可以的,因为命令不一样
- 按照windows下zip执行文件,地址参考待补
- 添加安装的位置的bin目录到环境变量,cmd输入zip测试
- 最后走完gogs环境搭建,运行程序,即可成功导出. (注意如果是后配置的zip需要退出当前的命令行再进.)
这样只会就可以在任何机器,非常轻松的离线通过python/go/nginx/apache等http服务器运行展示页面了.也是完全的内网操作,没有安全问题
0x03.gogs环境
本地如果是windows,搭gogs也很快了,但是要注意避开几个很容易踩的坑…首先从官网下载源码版. 提前需要的环境准备自行查看,这里要注意的是:
你会发现win下载的地方有两个版本,一个带了mws后缀. 然后官方提示:
mwsmeans builtin Windows service support. Please use the other one if you’re using NSSM.这里其实是说windows的gogs服务自启动管理… 因为你不可能每次跑一个后台cmd进程,开机也要手动启动. 就需要把gogs变为win的服务启动管理. (很方便) 而NSSM就是一个开源的服务添加,通过你手动管理员权限执行
gogs/script/windows/install-as-service.bat自动帮你注册gogs服务,所以推荐还是直接选mws版的自支持.
- 然后进入gogs根路径
./gogs web启动服务,然后打开默认的localhost:3000端口就可以看到安装页面了,数据库选择sqlLite3,因为不需要外置依赖而且更轻便. 然后特别注意的是 :- 勾上启用内置SSH服务器,不然windows下你是无法使用ssh服务的,只能走http
- 修改默认的SSH端口22,改成一个比较大(无冲突)的你喜欢的. 因为22端口很可能被内部禁了..而且本身也容易被扫到(就算是linux一般建议也修改默认的ssh22端口,效果非常显著…)
- 注意要设置git的
ssh-keygen路径到win的PATH里面,因为你到时候添加公钥需要用到这个. 路径是在git/usr/bin下. (相对路径) - 如果出现什么问题建议删掉gogs目录重装,但是需要先停止服务 . 不然会有很多端口占用的问题,并且依赖于
service父进程,强杀有风险. - 配置ssh连接,测试(如果反复失败先用http)
- 在账户设置里面授权应用,生成一个只显示一次的api-key.然后填到之前的配置文件gogs那
补充: 如果要重装gogs,首先结束进程gogs.exe ,然后尝试关闭gogs服务如果有. 如果ssh实在被ban,还是老实用http带账号密码记忆吧.
0x04.测试&补充
以上步骤全部完成后,执行下列操作使其生效.
1 | unzip target/universal/server-{release}.zip #解压release包,我这是2.0 |
然后你会发现启动了一个Netty server ,并且打印你配置过得gogs信息. 然后尝试访问localhost:9000:/gogsUsername/demo ,发现报500空指针错了…
- 然后检查gogs的api使用发现没有被调用… 我就不信这个邪…继续看官方issue,通读了一遍几乎:),然后发现是因为没有修改gogs的
defaut参数.. - 然后尝试访问,发现成功了…然后提示PITCHME.md没有被成功解析,继续看控制台的报错.发现是
Input length =1(尝试更换其他官方演示文档正常) - 待更新…..解决bug(如果你也在release版遇到同样的bug,建议直接使用
sbt run,然后直接修改application/conf即可使用这个版本,不过亲测启动速度要慢不少.原因未知)