安装配置部署C4 Plugin到OpenShift上

snova官方也有介绍,点我去官方
一、注册OpenShift环境 到官方注册帐号。
二、安装OpenShift部署工具
开始之前请先安装git系统软件:RailsInstaller ,我共享的下载地址。安装时记得要勾选那个勾,要不然有些命令不能用。
railsntler安装好之后,开启你的cmd命令窗口,输入gem install rhc代码安装OpenShift Client 。如图rhc由于网络未知原因,安装可能需要挂代理,安装时间长短因人而异。
三、下载 snova-c4-server-0.16.0.war 文件 ,放到任意一个空目录里面比如d:\snova 文件夹里面然后用cd 命令进入该目录,执行下面的命令

rhc domain create -n lou -l xxx@gmail.com -p 123456
创建主域名。记得把 “lou” 改成你喜欢的名字,把 “xxx@gmail.com” 改成你注册的邮箱地址,并把 “123456” 改成你的 OpenShift 帐户密码。)注意如果以前在openshift 空间部署过,这步可以省略。

rhc app create -a qing -t jbossas-7 -p 123456
部署应用, 它的名称将会和前面所创建的域名一起构成应用程序的 OpenShift 域名 (例如 qing-lou.rhcloud.com)。 记得改应用名和密码。应用部署成功后会在目录里生成同名文件夹,如我的就是qing

cd qing
进入qing 目录


mv ../snova-c4-server-xxx.war deployments/ROOT.war
(该命令将把 “snova-c4-server-xxx.war” 文件移到 “qing” 文件夹的 “deployments” 目录里面并且重命名为 “ROOT.war”。)
注意路径,要不然会出错的。

git rm -r src pom.xml
(该命令将删除 “src” 文件夹和 “pom.xml” 文件。)


git init
初始化 qing文件夹


以上几步命令如图示。git


git add .
(该命令将添加 “ROOT.war” 文件。)


git commit -a –m “hello”
"hello"可以随意换,相关命令图示如下:
deploy

git push
(该命令将会把 “ROOT.war” 部署到你的 OpenShift 应用程序。)如果没有错误就可以访问http://qing-lou.rhcloud.com/ 然后看到Welcom to snova-c4 server xxx! 欢迎信息。就成功了。
push

部署c4 客户端
Snova(java) 客户端
修改snova 目录下/plugins/c4/conf/c4-client.conf文件
[C4]
#WorkerNode[0]=xyz.herokuapp.com
#WorkerNode[1]=xyz.cloudfoundry.com 修改后为 WorkerNode[0]=qing-lou.cloudfoundry.com

修改snova 目录下/conf/snova.conf,将C4改为默认proxy实现(可选)
[Framework]
.........
##Can choose in plugins, default is GAE
ProxyService=GAE 将GAE改C4 注意大写。

gsnova(Go)客户端

修改gsnova.conf中C4部分,填入之前创建的域名,重启gsnova生效
[C4]
#Enable改为1,C4才能生效,默认为0关闭
Enable=0 将0改为1
#修改domain为Step2创建的域名, 可加多个域名
WorkerNode[0]=qing-lou.cloudfoundry.com

修改gsnova.conf中SPAC下默认的Proxy实现为C4
[SPAC]
Enable=1
#默认Proxy实现,初始为GAE
Default=GAE 将GAE改为C4
可选[GAE]
Enable=1 改为0 就关闭GAE。从而只走c4。此步骤不是必须。

本文参考精品博客http://jingpin.org/snova-openshift/ (被强).实际操作整理。本人部署服务端貌似成功,但开网页空白,原因未知。成功部署到另外个空间而已。

安装配置部署C4 Plugin到OpenShift上 补充

上次部署C4 Plugin到OpenShift上,没有错误提示,然后打开网页是空白页。现在终于有了解决方案
官方wiki好像是冲突了。

解决方法有二
一、删掉冲突的jar 包
将snova-c4-server-0.16.0.war/WEB-INF/lib 下的 netty-3.2.6.Final.jar 删掉。war包可以用winrar或者7zip 软件打开,然后重新部署。war

二、部署到tomcat 容器里,可以参考这个。https://github.com/openshift/openshift-tomcat-quickstart
安装部署工具,配置主域名,因为上次已经弄好了,所以只要新建应用就可


rhc app create -a tomcat -t diy-0.1
注tomcat可以换成自己的


然后依次执行下面的命令
cd tomcat 
git remote add upstream -m master git://github.com/openshift/openshift-tomcat-quickstart.git
git pull -s recursive -X theirs upstream master
git push

然后访问http://tomcat-xxx.rhcloud.com/ 假设xxx为你的主域名。如果访问成功,意味者Apache Tomcat/7.0.29部署成功了。

三、然后就是部署war包上去了。http://tomcat-xxx.rhcloud.com/页面找到manager app,如图mangetg 点击登录进去。用户和密码默认是tomcat/openshift
登录进去就可以看到部署的界面了。deploy tom
点选择文件,找到snova-c4-server-0.16.0.war 包,传上去部署即可。也可以选择上面的那个,但是那个war包必须是先上传到服务器里,而且路径要选择对。 部署后能够成功访问http://tomcat-xxx.rhcloud.com/snova-c4-server-0.16.0/这个地址即可。snova c4
那个snova-c4-server-0.16.0.wa包的名字也可以改成好记点的,但访问地址也记得变更额。

服务端配置好了,就可以配置客户端
WorkerNode[0]=tomcat-xxx.rhcloud.com/snova-c4-server-0.16.0这样貌似也不行 ,等待作者解答,未果。

11月10日,作者更新客户端1.82可以支持路径了,至此openshift 上c4 插件部署成功。
WorkerNode[0]=tomcat-xxx.rhcloud.com/snova-c4-server-0.16.0

11月19,终于知道如何把war包部署到根目录了。即通过“http://tom-xxx.rhcloud.com”直接访问应用了。不是以前默认的tomcat页面了。
方法很简单,通过winscp 链接到服务器,然后进入如下目录/app-root/data/tomcat/webapps/把原来的ROOT目录删除或者重命名,接着把ROOT.war包传进去即可,就会看到自动生成一个新的ROOT目录,刷新地址,成功。如图snova auto

将应用部署到Tomcat根目录的方法

所谓根目录就是直接输入地址即可,不带路径的那种。
方法一:(最简单直接的方法)
删除原 webapps/ROOT 目录下的所有文件,将应用下的所有文件和文件夹复制到ROOT文件夹下。前提是war包你已经用路径部署好了

方法二: 删除原 webapps/ROOT 目录下的所有文件,修改文件“conf/server.xml”,在Host节点下增加如下Context的内容配置:
<Host name=”localhost” appBase=”webapps”unpackWARs=”true” autoDeploy=”true”>

....省略....
<Context path=”” docBase=”路径” /></Host>

注意:
1)path 的值设置为空;
2)应用不要放到tomcat的webapps目录下,可自己新建个,否则访问时路径很有问题;
3)docBase指定到绝对路径 ,如/var/lib/openshift/xx/app-root/data/tomcat/xx.war

部署Snova C4的服务端到Heroku

最近作者很给力的更新了。以前的部署方式需要单独为heroku build一个zip包,现在所有snova在除GAE外PaaS统一为一个war包。于是试了下,成功部署。原本是想在ubuntu下部署的,但好像是网络不给力,连接超时。无奈的用上了windows平台部署。

1.安装Heroku Toolbelt 官方下载链接话说我下载2次都由于网络异常而失败,于是果断在ownclound网盘里http离线下载,然后在网盘里下载下来,有需要的联系我。

2.下载snova-c4-server-[version].war, 放在任意地方 我这里演示地址是e:\snova\目录下
在命令行下war文件所在目录,依次顺序执行以下的命令,每一行单独执行


heroku login



heroku logoin


heroku plugins:install https://github.com/heroku/heroku-deploy



只需执行一次,以后不用执行


heroku apps:create



--此步创建一个app,名字随机,记住此步的appname ,例如我的就是nameless-fjord-5479


heroku deploy:war --war e:\snova\snova-c4-server-0.16.0.war --app nameless-fjord-5479



中间那个路径e:\snova\snova-c4-server-0.16.0.war要写对,换成你自己的路径。以上命令相关图示如下:herok config

然后访问你的应用地址就可以看到服务端成功部署了,客户端配置不在本文讨论范围之内。

是不是觉得随机生成的app 不好记,你也可以去后台更名,也可以用命令行。
应用改名的官方说明,我的改名了,图示如下,被涂掉部分是我的app 名称。要记得更新git,否则會發生 remote 的名稱和目前的 master 不相符合,no such app错误了。
rename

ps:heroku 如何更新app (2013.2.18更新)
依次执行如下命令
heroku login (登录)
heroku apps (列出所有的app名称)
heroku deploy:war --war e:\snova\ROOT.war --app xx-yy
其中e:\sonva\Root.war 为war包所在路径。 xx-yy为app名称,替换成你自己的就可以了。当然你也可以删掉曾经部署的app,然后重新部署次也可以。

部署snova到appFog 云空间

在wiki那里看到有人提到这个空间,于是试了下,成功,特此记录分享下。ps:此空间部署c4后效果不怎么理想

1.windows用户下载安装Ruby Installer for Windows,这个安装包里包含了 RubyGems 。这个工具因为我在部署其他的云平台上,已经安装过了,所以不重复安装。

2.安装af 开始-->所有程序-->RailsInstaller-->Command Prompt with Ruby and Rails 进入命令行。输入以下命令,每行单独执行,安装时间长短因网络而异
gem update --system
gem install af



3.登录空间 执行命令 af login 输入邮箱和密码。

4.下载snova.war服务端文件到一个空目录,本例是e:\snova ,然后命令模式进入此目录,部署app 并上传。相关配置,如图1appfogg
其中af push [appname] 是生成一个新的app,其他的就是一些选择服务器节点,绑定服务等,具体看图示说明。图2:appfog2

其中绑定服务,貌似可以不用绑定的,我因为开始选择内存大小为默认的512 ,所以报错了,内存不够。部署失败。如图3:appfog3失败后,询问是否删除app ,如果选择y删除就重新af push app 如果n 就调整内存后更新app 就可以。

5.调整内存,在后台可以修改。访问https://console.appfog.com/apps/yourapp 将其中yourapp换成你的app名称。调整后要重新启动app 生效。我曾试图修改本地保存的配置文件,以期望达到修改内存的目的,好像不行。

6.重新更新成功,如图4:appfog 3
然后访问你的url 如 youapp.rs.af.cm 看到c4服务端,部署成功。当然这个还可以绑定自己的域名,以上的一些操作,应该可以在在后台完成,如建立app, 选择节点,内存大小。最后要输入命令的估计只有进入war包目录执行af update app 而已。
附上官方操作说明

snova配合switchysharp在c4与gae间自由切换

额,使用了snova也很久了,那时侯goagent遭打严重封锁,于是也接触到了snova这个。用过goagent的都知道switchysharp这个插件,配合chrome使用,好使的很,简直就是谁用谁知道。

虽然在用snova,不过还是依然使用这个插件。goagent有gae和pass(以前叫php)两大模式,因为gae平台的自身限制或者其他原因,某些网站gae无法访问,php平台就是很好的补充。snova也有gae和c4两种模式,不过以前只能修改gsnova.conf配置文件来规划使用c4或者gae,更好的就是利用spac规则https走c4普通的走gae. spac规则可不是一般人会弄的。

自0.193版本后,snova就不再只监听48100端口,而是变成2-4个一般就3个。各端口介绍如下。
48100端口是默认携带SPAC支持的, 如果你浏览器已经有类似Autoproxy+gfwlist之类的机制,可以设置代理为其它端口。
48101端口是所有流量用GAE作为Proxy的,前提是GAE Enable=1
48102端口是所有流量用C4作为Proxy的,前提是C4Enable=1
48103端口是所有流量用SSH作为Proxy的,前提是SSH Enable=1

当然你浏览器那里可以直接设置成监听48100端口,同样也可以使用。要同时用GAE+C4只能编辑spac规责,我可不会。但是有switchysharp这个就不怕了。浏览器那里新建情景模式c4,监听端口48102,同理建立情景模式gae监听端口48101.建情景模式snova,监听端口48100如图。snova
平常时候我们就用snova这个模式,本身这个模式自动通过规则切换的,哪些网站直连(forward.go)哪些是(google.go)等。毕竟规则也米有那么智能,这个时候就要我们手动切换情景模式,比如看u2b就切换到gae模式,gae被限制的网站我们就用c4。

注:0.193版本的切换情景模式为c4后不能链接到代理,需要将conf设置spac=0才可以,gae能正常切换。昨天更新的0.194版本正常切换,目前没有发现问题。

snova无法监听端口

今天早上照旧打开snova 发现一下子不见了。就又重新打开,程序图标可以显示了,但是启动信息显示如下
2013/01/30 08:13:18 launch.go:52: Listen on address localhost:48101
2013/01/30 08:13:18 launch.go:49: Can NOT listen on address:localhost:48101
2013/01/30 08:13:18 launch.go:52: Listen on address localhost:48102
2013/01/30 08:13:18 launch.go:49: Can NOT listen on address:localhost:48102
想起了issue上的那个问题,我还曾经回答过,结果我现在也出现了。寻思着最近干啦些啥造成的。难不成是昨晚用Advanced SystemCare 6软件优化造成的。。后来尝试改变监听端口。将3个端口分别改为48110 、48111 、48112, 再启动就可以监听了。
基本上可以判断以前监听的端口有问题。
用xp自带的netstat命令查看端口。netstat -a (更多命令请输入netstat /?)后,显示如下信息


C:\Documents and Settings\Administrator>netstat -a
Active Connections
协议 本地机器名+端口 远程计算机+端口 状态(监听/关闭/联机)
Proto Local Address Foreign Address State
TCP c107:epmap c107:0 LISTENING
TCP c107:1110 c107:0 LISTENING
TCP c107:1350 localhost:48100 ESTABLISHED
TCP c107:1359 localhost:1110 CLOSE_WAIT
TCP c107:1449 localhost:48100 FIN_WAIT_2
TCP c107:48100 c107:0 LISTENING
......省略部分内容.......
TCP c107:48100 localhost:1350 ESTABLISHED
TCP c107:48100 localhost:1449 CLOSE_WAIT
TCP c107:48101 c107:0 LISTENING
TCP c107:48102 c107:0 LISTENING

可以看到有程序在使用这3个端口,可是百思不得其解,哪个程序占用了。打开进程管理器发现竟然还有go.exe和gsnova.exe这两个进程还在。程序明明已经退出了,想来是最开始时候不正常退出,导致进程还停留在系统里了。

至于如何查看哪个进程占用端口了下篇文章再介绍。

将snova和goagent服务端部署到同一个gae app上

思路的来源是issue上有人想snova 和goagent的app id 能同时使用。鉴于goagent部署成功后的地址是xx.appspot.com/2 ,而snova部署成功后地址是xx.appspot.com。两者貌似不冲突,于是就想到合理利用下。

众所周知,gae 没个帐号可以创建10个app,每个app每天1g流量。10个app多也不算多,也不算少了。关键是我在上面部署了好几个应用,比如网盘,相册之类。然后goagent 又部署了5个app ,这样下来也没多少剩下了。snova也就部署了一个app 而已。合理利用app 在这种情况下就比较需要了。因为goagent实在是比较火(连百度百科都有),受到gfw太多照顾,现在我基本上都是在用snova。

便查资料,得知GAE允许在服务器服务器上保存站点的多个版本,包括程序、模版、静态文件等。它是通过对app.yaml的version的设置进行版本的管理。如默认情况下version=1,此时对站点内所有文件的修改,上传后都将更新到1这个版本里。

因为我的goagent app都很早上传了,都是版本1,5个懒得改了,于是就改snova的版本。就改snova-gae-gserver-[version]/gae/src文件夹下的app.yaml文件。如下:
application: xxx(前面有空格) 将默认的snova-master改成你的app id
version: 2 版本改为2
runtime: go
api_version: go1
剩下的事情就是上传部署了。虽说就只简单的改那两个东西,我也摸索了大半天,最终才搞定的。因为wiki中两种方式部署如下
1.用自带的Deployer部署
下载并解压snova-gae-gserver-[version].zip
windows用户执行deployer.exe;Mac/Linux用户执行python deployer.py
按照deployer的指示输入,执行部署

2.用Appengine Go SDK部署
下载并解压snova-gae-gserver-[version].zip
进入解压的目录, 修改app.yaml, 将application: snova-master中snova-master值改为自己创建的appid
执行appcfg.py update snova-gae-gserver-上传(appcfg.py在'/'下


看到区别没有,就是用自带的Deployer部署并不需要(修改app.yaml, 将application: snova-master中snova-master值改为自己创建的appid)这样做。经过多次测试后,发现这样单纯的改个版本号之后用deployer上传是会出现错误的。
gae 新版本(version2)部署成功后通用访问地址是http://2.appid.appspot.com/。gsnova地址也可以通过2-dot-appid.appspot.com来访问。
服务端配置好了,配client端。修改gsnova gae段为 WorkerNode[0]=2-dot-appid 。如果是修改了goagent的版本号则需要修改proxy.ini下的appid 为2.appid 。

最后 你也可以进入https://appengine.google.com 后台控制面板设置默认版本(非必须)。如图:gae version
假如我将修改后2.0版本的snova 设为默认,则可以直接http://appid.appspot.com 看到snova-gae(Go) 0.17.2 server is running!而不是goagent的404 页面了。如果改为默认的话那workmode那段,理论上应该就可以直接 WorkerNode[0]=appid也可以了(米测试)。只是不隐蔽了,很明显,想必goagent当初把路径该为http://appid.appspot.com/2就是为了不那么容易被发现把!

ps:3.4日更新 尝试部署在apjp上,用linux vps成功部署。修改 appengine-web.xml 文件中的
<?xml version="1.0" encoding="utf-8"?>
<appengine-web-app xmlns="http://appengine.google.com/ns/1.0">
<application>application-id </application>application-id 改为你自己的名称如xxx
<version>1</version>将1 改为需要的版本号。
<threadsafe>true</threadsaf
</appengine-web-app>


客户端编辑APJP_LOCAL.properties,修改如下:
APJP_REMOTE_HTTP_SERVER_1_REQUEST_URL=https://google.com/HTTP(S)
APJP_REMOTE_HTTP_SERVER_1_REQUEST_PROPERTY_1_KEY=Host
APJP_REMOTE_HTTP_SERVER_1_REQUEST_PROPERTY_1_VALUE=3.xxx.appspot.com (仅改此处) 最后貌似这个apjp 的gae服务端不行或许是没找到好的ip,只能打开国内的网站。