概述
Dataverse —— Open source research data repository software
#1. Dataverse介绍
这是一个开源的web应用程序,用于共享、保存、引用、探索和分析研究数据。目的是促进了数据共享,并允许他人更容易地获得其他人的工作成果。核心思想是将专业档案管理员的大部分工作自动化,并为数据创建者提供服务和分发权限。
主要分作三层,一个Datavserse的存储库可以承载多个称为Dataverses的虚拟档案。每个Dataverse包含多个数据集Datasets,每个数据集包含描述性元数据和数据文件(包括文档和代码),dataverses还可能包含其他dataverses。
#2. 运行环境及相关技术
-
Liunx:运行平台,官方建议版本为el7(rhel/centos 7)。
-
Java:Java运行时环境支持,官方建议版本Java SE 8 (8u74/JDK 1.8.0u74 或者更高版本)。
-
Glassfish:开源的Java EE应用服务,支持JSF、EJB等,官方建议版本4.1。
-
PostgreSQL:关系型数据库。
-
Solr:基于Apache Lucene构建的快速、开源的企业搜索平台,官方建议版本4.6.0。
-
jq:灵活、轻量的命令行JSON处理器,官方建议版本1.4及更高版本。
-
ImageMagick:用来创建、编辑、组合或转换位图图像。
-
JPA/JAX-RS/JMS/JSF
-
PrimeFaces/Bootstrap
#3. vagrant方式部署
项目涉及到的环境内容较多且繁琐,为了开发效率项目提供了vagrant方式部署,这样大大提高了我们作为初学者的试用效率,可以想象为一个镜像备份,我们可以通过一个配置文件初始化定义,最后执行完成后就还原了一个我们期望的虚拟机环境。
首先,下载安装oracle virtualbox。
其次,下载安装vagrant。同时,为了提高执行效率,可以在第三方仓库下载一个vagrant-centos-7.2.box,也可以在vagrantfile中配置官方仓库下载。
完成下一步下一步…的安装后,建议调整下配置,将默认虚拟电脑位置指定在E:VirtualBox VMs。
未来我们的vagrant命令执行根目录也在这里进行。
然后,下载DataVerse项目,如果你是开发人员,可以通过github开源项目IQSS/dataverse或者直接下载Latest release。将项目中conf和scripts文件复制到E:VirtualBox VMs目录下。
最后,我们开始执行vagrant命令创建并初始化centos7系统。
cmd控制台进入E:VirtualBox VMs下或者win10系统直接进入文件夹按住啊shift+右键(在此处打开Powershell窗口),依次执行。
vagrant box add box名称 box文件位置
添加box
例如:vagrant box add dataverseBox E:dataverseinstallvagrant-centos-7.2.box
注意:box文件位置路径中不允许存在空格。vagrant init
初始化
你会发现执行完这一步后,在E:VirtualBox VMs出现了vagrantfile文件,这是一个vagrant初始化配置文件,我们把它替换为dataverse项目根目录下的vagrantfile,根据实际情况调整一下:
# -*- mode: ruby -*-
# vi: set ft=ruby :
# Vagrantfile API/syntax version. Don't touch unless you know what you're doing!
VAGRANTFILE_API_VERSION = "2"
Vagrant.configure(VAGRANTFILE_API_VERSION) do |config|
config.vm.define "standalone", primary: true do |standalone|
config.vm.hostname = "standalone"
# Uncomment this temporarily to get `vagrant destroy` to work
#standalone.vm.box = "puppetlabs/centos-7.2-64-puppet"
#指定本地box名称,vagrant box add步骤中的box名称。
standalone.vm.box = "dataverseBox"
operating_system = "centos"
if ENV['OPERATING_SYSTEM'].nil?
#被我注释了
#config.vm.box = "puppetlabs/centos-7.2-64-puppet"
#config.vm.box_version = '1.0.1'
elsif ENV['OPERATING_SYSTEM'] == 'debian'
puts "WARNING: Debian specified. Here be dragons! https://github.com/IQSS/dataverse/issues/1059"
#被我注释了
#config.vm.box_url = "http://puppet-vagrant-boxes.puppetlabs.com/debian-73-x64-virtualbox-puppet.box"
#config.vm.box = "puppet-vagrant-boxes.puppetlabs.com-debian-73-x64-virtualbox-puppet.box"
else
operating_system = ENV['OPERATING_SYSTEM']
puts "Not sure what do to with operating system: #{operating_system}"
exit 1
end
mailserver = "localhost"
if ENV['MAIL_SERVER'].nil?
puts "MAIL_SERVER environment variable not specified. Using #{mailserver} by default.nTo specify it in bash: export MAIL_SERVER=localhost"
else
mailserver = ENV['MAIL_SERVER']
puts "MAIL_SERVER environment variable found, using #{mailserver}"
end
config.vm.provider "virtualbox" do |v|
v.memory = 2048
v.cpus = 1
end
config.vm.provision "shell", path: "scripts/vagrant/setup.sh"
config.vm.provision "shell", path: "scripts/vagrant/setup-solr.sh"
config.vm.provision "shell", path: "scripts/vagrant/install-dataverse.sh", args: mailserver
# FIXME: get tests working and re-enable them!
#config.vm.provision "shell", path: "scripts/vagrant/test.sh"
#默认私有网络,我调整为了桥连网络并固定了IP,这样虚拟机相当于局域网中一台独立设备。
config.vm.network "public_network", ip: "192.168.1.128"
config.vm.network "forwarded_port", guest: 80, host: 8888
config.vm.network "forwarded_port", guest: 443, host: 9999
config.vm.network "forwarded_port", guest: 8983, host: 8993
config.vm.network "forwarded_port", guest: 8080, host: 8088
config.vm.network "forwarded_port", guest: 8181, host: 8188
# FIXME: use /dataverse/downloads instead
#将我开发工程中的目录映射到虚拟机目录上进行同步。
config.vm.synced_folder "E:\datavserse\dataverse-4.8.6\downloads", "/downloads"
# FIXME: use /dataverse/conf instead
#将我开发工程中的目录映射到虚拟机目录上进行同步。
config.vm.synced_folder "E:\datavserse\dataverse-4.8.6\conf", "/conf"
# FIXME: use /dataverse/scripts instead
#将我开发工程中的目录映射到虚拟机目录上进行同步。
config.vm.synced_folder "E:\datavserse\dataverse-4.8.6\scripts", "/scripts"
config.vm.synced_folder "E:\datavserse\dataverse-4.8.6", "/dataverse"
end
config.vm.define "solr", autostart: false do |solr|
config.vm.hostname = "solr"
solr.vm.box = "puppet-vagrant-boxes.puppetlabs.com-centos-65-x64-virtualbox-puppet.box"
#将我开发工程中的目录映射到虚拟机目录上进行同步。
config.vm.synced_folder "E:\datavserse\dataverse-4.8.6", "/dataverse"
#默认私有网络,我调整为了桥连网络并固定了IP,这样虚拟机相当于局域网中一台独立设备。
config.vm.network "public_network", ip: "192.168.1.128"
config.vm.network "forwarded_port", guest: 8983, host: 9001
end
config.vm.define "test", autostart: false do |test|
config.vm.hostname = "test"
test.vm.box = "puppet-vagrant-boxes.puppetlabs.com-centos-65-x64-virtualbox-puppet.box"
#将我开发工程中的目录映射到虚拟机目录上进行同步。
config.vm.synced_folder "E:\datavserse\dataverse-4.8.6", "/dataverse"
#默认私有网络,我调整为了桥连网络并固定了IP,这样虚拟机相当于局域网中一台独立设备。
config.vm.network "public_network", ip: "192.168.1.128"
end
end
3.vagrant up
启动并根据vagrantfile配置执行,这个过程比较耗时,如果中间出现卡顿现象请查看附录Q1。
执行完以上步骤后,虚拟机环境创建完成,此时我们可以通过ssh连接到虚拟机系统中查看dataverse项目是否已经部署。
#4. 安装配置dataverse相关服务
##4.1 Glassfish服务
上一步我们搭建了虚拟机并将dataverse项目环境部署在了虚拟机上,我们可以查看系统根目录下已经存在vagrantfile中配置的同步文件夹,并且已经根据dataverse项目中的脚本执行,下载了Glassfish应用服务和solr搜素引擎,文件位置按照官方文档在/usr/local下,但我操作实际位置在/home/glassfish下。
下载dvinstall,解压至downloads文件夹下(本地开发工程downloads目录已经与虚拟机系统同步,直接解压至E:datavsersedataverse-4.8.6downloads下即可在虚拟机downloads中看到)。
通过ssh登录虚拟机,用户root,密码vagrant,执行命令:
cd downloads/dvinstall
./install
整个过程会有配置项需要填写,基本都使用默认值,具体配置官方列表如下:
- Internet Address of your host: localhost
- Glassfish Directory: /usr/local/glassfish4
- Glassfish User: current user running the installer script
- Administrator email address for this Dataverse: (none)
- SMTP (mail) server to relay notification messages: localhost
- Postgres Server Address: [127.0.0.1]
- Postgres Server Port: 5432
- Postgres ADMIN password: secret
- Name of the Postgres Database: dvndb
- Name of the Postgres User: dvnapp
- Postgres user password: secret
- Remote Solr indexing service: LOCAL
- Rserve Server: localhost
- Rserve Server Port: 6311
- Rserve User Name: rserve
- Rserve User Password: rserve
- Administration Email address for the installation;
配置安装完成后,会启动Glassfish服务,然后通过本机浏览器输入:http://192.168.1.128:8080 就可以访问Dataverse数据仓库平台了,默认管理员用户名:dataverseAdmin,默认密码:admin(首次登陆时强制要求修改密码,密码限制至少一个字母+数字组合)。
Glassfish管理员控制台:http://192.168.1.128:4848用户名:admin 默认密码为空。
如果出现输入正确用户名密码仍然不能登录情况,请参考附录Q3。
##4.2 Solr服务
我们登陆系统后会发现界面上红色报错提醒,是因为搜索引擎服务没有启动造成的,我们回到ssh命令行进入/home/glassfish/solr/example目录下看到
执行命令:
java -jar start.jar
启动Solr服务
再次登陆Dataverse数据仓库平台就没有错误提醒,并且可以通过 http://192.168.1.128:8983/solr/ 进入搜索管理平台。
查看附录Q2如何将Solr服务随虚拟机系统启动。
#5. 服务重启
系统关闭后再次启动,本机cmd控制台进入E:VirtualBox VMs执行
vagrant up
然后再ssh登录虚拟机系统进入/home/glassfish/glassfish4/glassfish目录执行
./bin/asadmin start-domain
#6. IDEA开发Remote方式调试源码工程
官方给出的Developer Guide中建议大家在liunx或macOS上搭建开发环境,但是我已习惯了在windows平台上工作,毕竟我只是看看不是专门做这件事。
第一步,在Glassfish管理员控制台开启Debug,注意Debug Options中参数address=9009,这是Remote端口号。
第二步,本机IDEA创建Debug选择Remote,配置IP(Glassfish服务IP),Port(9009),选择module(下载dataverse源码工程github或last release)。
搞定了,直接运行debug打个断点,就可以开始跟踪调试了,注意要求本机源码工程版本一定要与虚拟机发布工程版本保持一致。
//TODO 本机修改代码同时发布至虚拟机。
#附录
##Q1. 执行vagrant up命令在某个download…pom/jar时停止卡住了,怎么办?
出现后可以通过ctrl+c终止执行,会提示正在清理并退出,如果等待片刻依然没有退出到执行目录,可以直接在进程中关闭所有虚拟机相关进程,然后重新执行
vagrant up
最后如果担心执行中存在疏漏可以多花些时间执行
vagrant provision
强制更新
##Q2. 如何将Solr服务随虚拟机系统启动?
我们通过编写脚本将其与系统启动服务建立起连接即可,具体操作如下:
- 准备Solr启动脚本文件slor(不要任何后缀名)。
#!/bin/sh
# Starts, stops, and restarts Apache Solr.
#
# chkconfig: 35 92 08
# description: Starts and stops Apache Solr
#服务具体位置
SOLR_DIR="/home/glassfish/solr/solr-4.6.0/example"
#服务启动命令
JAVA_OPTIONS="-Xmx1024m -DSTOP.PORT=8079 -DSTOP.KEY=mustard -jar start.jar"
#服务日志文件位置
LOG_FILE="/home/glassfish/solr/solr-4.6.0/example/logs/solr.log"
#JAVA运行环境
JAVA="/usr/bin/java"
case $1 in
start)
echo "Starting Solr"
cd $SOLR_DIR
$JAVA $JAVA_OPTIONS 2> $LOG_FILE &
;;
stop)
echo "Stopping Solr"
cd $SOLR_DIR
$JAVA $JAVA_OPTIONS --stop
;;
restart)
$0 stop
sleep 1
$0 start
;;
*)
echo "Usage: $0 {start|stop|restart}" >&2
exit 1
;;
esac
2.将脚本solr放至虚拟机系统/etc/init.d目录下 ,并授权文件读写权限。
chmod 755 solr
可以执行测试,看看脚本是否能正常启动solr服务。
/etc/init.d/solr start
如果无法执行,提示… … /bin/sh^M: bad interpreter: No such file or directory,则是因为你在windows下创建并编辑的脚本文件,默认fileformat为dos,通过vi命令修改为unix即可。
进入文件编辑
vi solr
查看fileformat
:set ff
设置为unix
:set ff=unix
退出保存,按ESC
:wq!
3.创建服务使solr脚本随系统启动。
chkconfig --add solr
4.检查是否创建成功。
chkconfig --list
这里说明下为什么3,5是on,其它为off,这与脚本中chkconfig后三个数字35 92 08相关,表示将在rc3.d和rc5.d目录下创建名字为s92solr的文件与系统建立连接。
#!/bin/sh
# Starts, stops, and restarts Apache Solr.
#
# chkconfig: 35 92 08
# description: Starts and stops Apache Solr
##Q3. Glassfish管理员控制台无法登陆?
输入了正确的用户名密码,依然无法登陆,可能是Glassfish管理员控制台默认远程登陆被禁用,进入虚拟机服务执行命令:
$ cd home/glassfish/glassfish4/glassfish/
$ ./bin/asadmin stop-domain
必须先停止服务
$ ./bin/asadmin change-admin-password
首先修改密码不为空
$ ./bin/asadmin start-domain
先重启Glassfish服务
$ ./bin/asadmin enable-secure-admin
再修改管理员控制台远程登陆权限
最后
以上就是英俊黄蜂为你收集整理的Dataverse开发环境部署方案的全部内容,希望文章能够帮你解决Dataverse开发环境部署方案所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复