Dataverse开发环境部署方案

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。
VirtualBox默认虚拟电脑位置
未来我们的vagrant命令执行根目录也在这里进行。
然后,下载DataVerse项目,如果你是开发人员,可以通过github开源项目IQSS/dataverse或者直接下载Latest release。将项目中conf和scripts文件复制到E:\VirtualBox VMs目录下。
最后,我们开始执行vagrant命令创建并初始化centos7系统。
cmd控制台进入E:\VirtualBox VMs下或者win10系统直接进入文件夹按住啊shift+右键(在此处打开Powershell窗口),依次执行。

  1. vagrant box add box名称 box文件位置 添加box
    例如:vagrant box add dataverseBox E:\dataverse\install\vagrant-centos-7.2.box
    注意:box文件位置路径中不允许存在空格。
  2. 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:\datavserse\dataverse-4.8.6\downloads下即可在虚拟机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目录下看到
solr目录
执行命令:
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端口号。
Glassfish Debug
第二步,本机IDEA创建Debug选择Remote,配置IP(Glassfish服务IP),Port(9009),选择module(下载dataverse源码工程github或last release)。
IDEA Remote Debug
搞定了,直接运行debug打个断点,就可以开始跟踪调试了,注意要求本机源码工程版本一定要与虚拟机发布工程版本保持一致。
//TODO 本机修改代码同时发布至虚拟机。


#附录


##Q1. 执行vagrant up命令在某个download…pom/jar时停止卡住了,怎么办?
出现后可以通过ctrl+c终止执行,会提示正在清理并退出,如果等待片刻依然没有退出到执行目录,可以直接在进程中关闭所有虚拟机相关进程,然后重新执行
vagrant up
最后如果担心执行中存在疏漏可以多花些时间执行
vagrant provision 强制更新

##Q2. 如何将Solr服务随虚拟机系统启动?
我们通过编写脚本将其与系统启动服务建立起连接即可,具体操作如下:

  1. 准备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 再修改管理员控制台远程登陆权限

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值