Dataverse Docker v.5.13
Stop all run Containers
docker stop $(docker ps -q)
Delete all Containers
docker rm -f $(docker ps -aq)
Delete all Images
docker rmi -f $(docker images -q)
Delete traefic
docker network prune
Версия 5.13 оказалась наименее безпроблемной, с моей точки зрения. На ней и остановлюсь.
# git clone https://github.com/IQSS/dataverse-docker dataverse-docker-5.13
# cp ./distros/docker-compose-ssl.yml ./
Заполняем файл с переменными:
# cp .env_sample .env && vi .env #COMPOSE_FILE=./distros/docker-compose-ssl.yml COMPOSE_FILE=./docker-compose-ssl.yml #MAINLANG=ua VERSION=5.13.allclouds # Dataverse database settings DATAVERSE_URL=dataverse.tst-amo.net.ua DATAVERSE_SERVICE_HOST=www.dataverse.tst-amo.net.ua # Domain configuration and init folder hostname=www.dataverse.tst-amo.net.ua traefikhost=dataverse.tst-amo.net.ua # traefik email settings useremail=dataverseimp@imp.kiev.ua # DOI parameters # https://guides.dataverse.org/en/latest/installation/config.html#doi-baseurlstring doi_authority=10.82100 doi_provider=DataCite doi_shoulder=DVUA doi_username=XXXXX doi_password=XXXXXXXXXX dataciterestapiurlstring=https\\:\/\/api.test.datacite.org baseurlstring=https\:\/\/mds.test.datacite.org # Mail relay # https://guides.dataverse.org/en/latest/developers/troubleshooting.html system_email=dataverseimp@imp.kiev.ua mailhost=mail.imp.kiev.ua mailuser=dataverseimp no_reply_email=dataverseimp@imp.kiev.ua smtp_password=XXXXXXXXXX smtp_port=587 socket_port=587 starttls=true
Не забываем поменять версию продукта и в этом файле:
# vi docker-compose-ssl.yml
dataverse:
networks:
- traefik
image: coronawhy/dataverse:5.13.allclouds
Правим скрипты под наши нужды:
# vi dataverse-5.13/dataverse-docker/init.d/010-mailrelay-set.sh
#!/bin/bash
# Setup mail relay
# https://guides.dataverse.org/en/latest/developers/troubleshooting.html
if [ "${system_email}" ]; then
curl -X PUT -d ${system_email} http://localhost:8080/api/admin/settings/:SystemEmail
asadmin --user=${ADMIN_USER} --passwordfile=${PASSWORD_FILE} delete-javamail-resource mail/notifyMailSession
asadmin --user=${ADMIN_USER} --passwordfile=${PASSWORD_FILE} create-javamail-resource --mailhost ${mailhost} --mailuser ${mailuser} --fromaddress ${no_reply_email} --property mail.smtp.auth=true:mail.smtp.password=${smtp_password}:mail.smtp.port=${smtp_port}:mail.smtp.socketFactory.port=${socket_port}:mail.smtp.socketFactory.fallback=false:mail.smtp.starttls.enable=true mail/notifyMailSession
fi
# vi dataverse-5.13/dataverse-docker/init.d/01-persistent-id.sh #!/bin/bash echo "Setting up the settings" >> /tmp/status.log echo "- Allow internal signup" >> /tmp/status.log SERVER=http://${DATAVERSE_URL}/api echo $SERVER curl -X PUT -d yes "$SERVER/admin/settings/:AllowSignUp" curl -X PUT -d /dataverseuser.xhtml?editMode=CREATE "$SERVER/admin/settings/:SignUpUrl" curl -X PUT -d CV "$SERVER/admin/settings/:CV" curl -X PUT -d burrito $SERVER/admin/settings/BuiltinUsers.KEY curl -X PUT -d localhost-only $SERVER/admin/settings/:BlockedApiPolicy curl -X PUT -d 'native/http' $SERVER/admin/settings/:UploadMethods curl -X PUT -d solr:8983 "$SERVER/admin/settings/:SolrHostColonPort" curl -X PUT -d 10.82100 "$SERVER/admin/settings/:Authority" curl -X PUT -d doi "$SERVER/admin/settings/:Protocol" curl -X PUT -d "</p><p>Supported by the National Academy of Sciences of Ukraine</p>" http://localhost:8080/api/admin/settings/:FooterCopyright echo # Demo server with FAKE DOIs if doi_authority is empty #if [ -z "${doi_authority}" ]; then # curl -X PUT -d doi "$SERVER/admin/settings/:Protocol" # curl -X PUT -d 10.5072 "$SERVER/admin/settings/:Authority" # curl -X PUT -d "FK2/" "$SERVER/admin/settings/:Shoulder" # curl -X PUT -d FAKE "$SERVER/admin/settings/:DoiProvider" #fi
# vi dataverse-5.13/dataverse-docker/init.d/03-doi-set.sh
#!/bin/bash
# Setup DOI parameters
# https://guides.dataverse.org/en/latest/installation/config.html#doi-baseurlstring
if [ "${doi_authority}" ]; then
curl -X PUT -d ${doi_authority} http://localhost:8080/api/admin/settings/:Authority
curl -X PUT -d ${doi_provider} http://localhost:8080/api/admin/settings/:DoiProvider
curl -X PUT -d "DVUA/" http://localhost:8080/api/admin/settings/:Shoulder
asadmin --user=${ADMIN_USER} --passwordfile=${PASSWORD_FILE} create-jvm-options "-Ddoi.username\=${doi_username}"
asadmin --user=${ADMIN_USER} --passwordfile=${PASSWORD_FILE} create-jvm-options "-Ddoi.password\=${doi_password}"
asadmin --user=${ADMIN_USER} --passwordfile=${PASSWORD_FILE} create-jvm-options "-Ddoi.dataciterestapiurlstring\=${dataciterestapiurlstring}"
asadmin --user=${ADMIN_USER} --passwordfile=${PASSWORD_FILE} create-jvm-options "-Ddoi.baseurlstring\=${baseurlstring}"
#if [ "${doi_shoulder}" ]; then
# curl -X PUT -d "${doi_shoulder}/" "$SERVER/admin/settings/:Shoulder"
#fi
fi
Также пароль от DataCite нужно добавить в:
dataverse-docker-5.13/secrets/doi/password dataverse-docker-5.13/secrets/doi_asadmin
Для удобства установим mc:
# vi /home/svm/dataverse-docker-5.13/init.d/1004-mc.sh #!/bin/bash apt install mc -y
Уберем в footer название сборки билда:
/home/svm/dataverse-docker-5.13/init.d/1007-vers.sh
#!/bin/bash
sed -i -e 's/appVersionWithBuildNumber/appVersion/g' /opt/payara/appserver/glassfish/domains/domain1/applications/dataverse/dataverse_footer.xhtml
Если есть ссылки на языковые файлы добавляем скрипт:
# vi /home/svm/dataverse-docker-5.13/init.d/1005-lang-ua.sh #!/bin/bash mkdir /tmp/languages cd /tmp/languages wget --content-disposition https://seafile.tst-amo.net.ua/f/fcd8a4e2655b4d53871e/?dl=1 wget --content-disposition https://seafile.tst-amo.net.ua/f/0c6340ef0b934e7f9419/?dl=1 wget --content-disposition https://seafile.tst-amo.net.ua/f/7c20a484f66c400da88a/?dl=1 cp Bundle_ua.properties /opt/payara/appserver/glassfish/domains/domain1/applications/dataverse/WEB-INF/classes/propertyFiles/ cp BuiltInRoles_ua.properties /opt/payara/appserver/glassfish/domains/domain1/applications/dataverse/WEB-INF/classes/propertyFiles/ cp citation_ua.properties /opt/payara/appserver/glassfish/domains/domain1/applications/dataverse/WEB-INF/classes/propertyFiles/
После установки и проверки удаляем 1005-lang-ua.sh
Если нет, то или из под докера или в общей смонтированной директории помещаем языковые файлы и два скрипта, например в docroot, ссылка на Bundle_ua.properties (файл переведен, но еще не перекодирован для сайта)
BuiltInRoles.properties Bundle.properties Bundle_ua.properties citation.properties *lang-properties-convert.py languages.sh
# cat languages.sh
#!/bin/bash
./lang-properties-convert.py Bundle_ua.properties > ./Bundle_ua_1.properties
Запускаем languages.sh, результатом будет перекодированный файл для системы:
Bundle_ua_1.properties
Его нужно будет переименовать (без _1) и положить в директорию:
/opt/payara/appserver/glassfish/domains/domain1/applications/dataverse/WEB-INF/classes/propertyFiles/
Так делаем для всех нужных файликов.
Если происходит обновление версий, то нужно скопировать в домашнюю директорию такие каталоги:
data - Датасеты/Дававерсы database-data - БД Postgres docroot - Логотипы
Поочередно вводим команды и ждем окончания установки:
# export traefikhost=dataverse.tst-amo.net.ua # docker network create traefik # export useremail=dataverseimp@imp.kiev.ua # docker-compose up
После установки, можно изменить отображение версии продукта в строке:
/opt/payara/appserver/glassfish/domains/domain1/applications/dataverse/dataverse_footer.xhtml
<h:outputText class="version" value="v. #{settingsWrapper.appVersion}" rendered="#{!widgetView}"/>
Можно столкнуться с проблемой, после переноса директорий
data database-data docroot
не вся информация будет видна после установки обновления. Переиндексировать все надо:
docker exec -it dataverse /bin/bash curl http://localhost:8080/api/admin/index/clear curl http://localhost:8080/api/admin/index
В этой установке проблем загрузки логотипов – нет. Но есть другая проблема, docroot в основной системе не монтируется в docroot контейнера. Т.е. если, что переносить придётся вручную из под докера.
Для настройки SMTP relay посредством google, нужно проделать в аккаунте такие процедуры:
- включить двухфакторную аутентификацию
- сгенерировать пароль для приложений которые не умеют в “двухфакторную аутентификацию”
- скопировать пароль и вставить в .env
https://support.google.com/accounts/answer/185833?hl=en
Google AuthO
Редактируем файл google.json подставив полученные clientid и clientSecret
# vi /dataverse-docker-5.13/secrets/google.json { "id":"google", "factoryAlias":"oauth2", "title":"Google", "subtitle":"", "factoryData":"type: google | userEndpoint: NONE | clientId: FIXME | clientSecret: FIXME", "enabled":true }
Редактируем .env
# Federated authentification file
# https://guides.dataverse.org/en/latest/installation/shibboleth.html
federated_json_file=/secrets/google.json
И делаем docker-compose up.
Metadata
Раскоментировать строки в .env
# Webhook configuration to bundle external services WEBHOOK=/opt/payara/triggers/external-services.py CESSDA=True CLARIN=True
И перезапустить установку
$ docker-compose up
Внутри докера выполнить команду для каждого из файлов
# curl http://localhost:8080/api/admin/datasetfield/load -H "Content-type: text/tab-separated-values" -X POST --upload-file /opt/docroot/codemeta.tsv
предварительно положив этот/эти файл/файлы в указанную директорию.
Затем через UI активировать эти поля метаданных.
Выборочный автозапуск
Так как у меня занят 443 порт, сделаю выборочный запуск контейнеров после перезагрузки основной системы (т.е. без traefik).
Пишем скрипт запуска контейнеров:
$ cat /home/svm/bin/docker_dataverse_start.sh #! /bin/bash docker start dataverse docker start whoami docker start dataverse-docker-513_minio_1 docker start solr docker start postgres
$ sudo chmod +x /home/svm/bin/docker_dataverse_start.sh
$ sudo cat /etc/systemd/system/docker_dataverse.service [Unit] Description=Description for sample script goes here After=network.target [Service] Type=simple ExecStart=/home/svm/bin/docker_dataverse_start.sh TimeoutStartSec=0 [Install] WantedBy=default.target
$ sudo systemctl daemon-reload $ sudo systemctl enable sample.service $ sudo systemctl start sample.service $ sudo reboot