1. 程式人生 > >Dataverse Installation(Test only)

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。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"
      #因為預設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目錄下看到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 再修改管理員控制檯遠端登陸許可權