Dataverse Installation(Test only)
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 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"
#因為預設add的box版本號為0,所以該版本號需要修改成0,不然會報could not be found錯誤
#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目錄下看到
執行命令: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服務隨虛擬機器系統啟動?
我們通過編寫指令碼將其與系統啟動服務建立起連線即可,具體操作如下: 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
再修改管理員控制檯遠端登陸許可權