由于实验室ip更换,所有项目需要重新部署
今天拿一个上古时代的项目,并附带了部署流程,挺人性化的
文档大概长这样
于是乎天真的我连接上服务器,拿到项目,打开readme.txt,噩梦正式开始。。。
步骤一:将KnowledgeGraph.tar.gz解压至合适的部署地方,解压后生成kgOld文件夹,进入kgOld目录。注意:如果查询本机ip地址提示command not found,可以运行“yum install net-tools wget -y”命令让系统识别ifconfig。
步骤二:运行firstStep.sh文件fir,运行完毕后,进入 “本机ip:7474”地址,如“192.168.129.55:7474”;进入neo4j,原始账号密码都为neo4j,修改密码为scuimage
步骤三:运行secondStep.sh文件,等待部署成功
步骤四:部署成功后,访问“本机ip:8080/KnowledgeGraph”,如“192.168.129.55:8080/KnowledgeGraph”即可。登陆页面管理员用户名和密码都是admin,
如果登陆时遇到提示框“未知错误”,代表数据库仍然在导入,耐心等一会再尝试登陆。
不得不说,师兄还挺厚道,这完全就是傻瓜式部署方案嘛,我闭着眼睛都能完成!
一通操作四步下来没有任何报错,我以为这波稳了,打开网页
404
???
不要紧,可以先看一下师兄的交互文档,是不是有什么细节被遗忘了?
根据文档描述,docker中建立了6个容器,并将这六个容器形成一个子网,可以使用容器名称来代替其ip
这好说,有可能就是因为ip变了,开发的和部署运维的不是同一个人导致项目崩溃了,于是跑去git把源代码拉下来,一看配置文件
发现第一个问题
twitterPortraitPath = D:/KGMultiMedia/
documentsFilePath = D:/KGMultiMedia/KGMultiMedia/documents/
dataType = kgdata
qaUrl = http://192.168.128.55:8086/index/?question=
absUrl = http://192.168.128.55:8086:8081/summary?param1=
extractUrl = http://192.168.128.55:8086:8081/entity?param1=
twitterUrl = http://192.168.128.55:8086:8083/summary?
#c3p0.jdbcUrl=jdbc:mysql://192.168.128.54:3306/kgdb?useUnicode=true&characterEncoding=UTF-8&autoReconnect=true
c3p0.jdbcUrl=jdbc:mysql://192.168.128.55:3306/kgdb?useUnicode=true&characterEncoding=UTF-8
果然,这里还是用的原来的ip
既然用了容器,把配置的ip改成容器名称就好啦
qaUrl = http://kgqa:8086/index/?question=
absUrl = http://kgabs:8081/summary?param1=
extractUrl = http://kgabs:8081/entity?param1=
twitterUrl = http://kgtwitter:8083/summary?
c3p0.jdbcUrl=jdbc:mysql://kgMysql:3306/kgdb?useUnicode=true&characterEncoding=UTF-8
这样总能跑了吧。。。
于是又按着交互文档步骤执行一遍。。。
依旧404
没有任何变化??
(此处省去一万遍重复交互文档步骤的操作)
还是不行,无奈,再打开源码检查。。。
惊奇的发现tomcat的webapp目录长这样:
他似乎少了什么??
没错
发现第二个问题
他没有web.xml文件!!!
可是如果真没有web.xml他们原来的项目是如何运行并不报错的呢?
于是我仔细翻阅发现.girignore文件配置如下
# setting files
.svn/
.settings/
.classpath
.project
target/
web.xml
web.xml的大名赫然躺在其中!!
git上传代码时把web.xml忽略了,得把它添加回来,并放行要访问的静态资源
这就好啦,总该能访问了把!
再次执行交互文档步骤的操作。。。
功夫不负有心人,登录界面终于出来了,大功告成!
了吧。。。
登录后发现,这tmd图片呢???
打开F12一看
还是404
既然拦截都取消了,为什么还会访问不到呢??
发现第三处问题
会不会是他访问的资源根本就不在项目中??
再次打开源码,检查细节,果然,还是配置文件
twitterPortraitPath = D:/KGMultiMedia/
documentsFilePath = D:/KGMultiMedia/KGMultiMedia/documents/
dataType = kgdata
qaUrl = http://kgqa:8086/index/?question=
absUrl = http://kgabs:8081/summary?param1=
extractUrl = http://kgabs:8081/entity?param1=
twitterUrl = http://kgtwitter:8083/summary?
刚才检查没注意,这配置路径居然是windows的。。。
这还能部署到linux上,也是醉了。。。
要在docker的tomcat上运行就应该配置映射到docker容器的tomcat路径下
赶紧修改
twitterPortraitPath = /usr/local/tomcat/webapps/KGMultiMedia/
documentsFilePath = /usr/local/tomcat/webapps/KGMultiMedia/documents/
这下总能行了吧??
依旧404
此时需要考虑到docker的配置问题,会不会创建tomcat容器的时候资源没有映射到指定位置?
发现第四个问题
打开secondStep.sh,发现以下语句
docker run -d -p 8080:8080 --name tomcat --net kgnet --ip 192.193.0.7 --restart always -v ${cur_path}/webapps:/usr/local/tomcat/webapps -v ${cur_path}/KGMultiMedia/:/KGMultiMedia/ --privileged=true tomcat:9.0.30-jdk8-adoptopenjdk-hotspot
果然预设的路径跟我设置的不一样
应该把配置文件的路径与docker映射路径统一
docker run -d -p 8080:8080 --name tomcat --net kgnet --ip 192.193.0.7 --restart always -v ${cur_path}/webapps:/usr/local/tomcat/webapps -v ${cur_path}/KGMultiMedia/:/usr/local/tomcat/webapps/KGMultiMedia/ --privileged=true tomcat:9.0.30-jdk8-adoptopenjdk-hotspot
这样就能访问了
这四个404虽然都是小问题,但确实耗费我了一整天的时间才找出来,以此为戒!