LoginSignup
0
0

More than 3 years have passed since last update.

【Folio LSP】チュートリアル Single Server Deployment(core版)をEC2で

Last updated at Posted at 2020-09-05

前置き

この記事では、Folioのチュートリアルのうち、Single Server DeploymentをEC2で実行する場合の紹介をします。
元ネタ→https://github.com/folio-org/folio-install/tree/master/runbooks/single-server#folio-deployment-single-server

先に以下に目を通しておくと理解しやすいかと思います。

EC2の準備

インスタンスを起動

選択

インスタンスタイプはt2.xlarge(vCPU4, 16GiB)を選択。

「確認と作成」押下

「起動」

ローカルからEC2にSSH接続をしたいので、キーペアを取得しておく。
任意のキーペア名を入力し、「キーペアのダウンロード」を押下して秘密鍵を取得する。

「インスタンスの生成」押下。インスタンスが作成されるまでしばらく待つ。

インスタンスの確認

image.png

パブリックIP、プライベートIPを確認します。
セキュリティグループはここからリンクしています。
パブリックIPはインスタンスをstopすると変わるので注意。

セキュリティグループの設定

ポートを開けてあげます。
上記の「セキュリティグループ」から、
「インバウンドルールを編集」を押下
image.png

「ルールを追加」を押下

以下のルールを記述(これだと開けすぎ。後日編集します)
image.png

「ルールを保存」を押下

SSHでEC2に接続する

インスタンスの設定時に取得した秘密鍵とパブリックIPを利用し、お好きな方法で。
Win10 Powershellからなら、下記で接続できます。

ssh -i <保存した秘密鍵へのパス> ubuntu@<パブリックIP>

Linuxホストのビルド

①ホームディレクトリにこのチュートリアル用のスクリプトなどが入っているリポジトリをクローンします。

git clone https://github.com/folio-org/folio-install
cd folio-install
git checkout q2-2020
cd runbooks/single-server

必要なパッケージをインストールして構成する

実行環境の要件: Java 8, nginx(エンジンエックス), PostgreSQL 10, Docker

①apt cacheのアップデート

sudo apt-get update

②Java8とnginxをインストールし、Java8をシステムデフォルトにする

sudo apt-get -y install openjdk-8-jdk nginx
sudo update-java-alternatives --jre-headless --jre --set java-1.8.0-openjdk-amd64

③PostgreSQLのキーをインポートし、PostgreSQL aptリポジトリを追加し、PostgreSQLをインストールする
※ここがVitrutalBox版とちょっと違う

sudo add-apt-repository "deb http://security.ubuntu.com/ubuntu xenial-security main"
sudo apt-get update
sudo apt-get install libicu55
wget --quiet -O - https://www.postgresql.org/media/keys/ACCC4CF8.asc | sudo apt-key add -
sudo add-apt-repository "deb http://apt.postgresql.org/pub/repos/apt/ xenial-pgdg main"
sudo apt-get update
sudo apt-get -y install postgresql-10 postgresql-client-10 postgresql-contrib-10 libpq-dev

④Dockerから接続できるようにPostgreSQLを構成する。

  • /etc/postgresql/10/main/postgresql.confの「Connection Settings」にlisten_addresses = '*'を追記
  • /etc/postgresql/10/main/pg_hba.confにhost all all 0.0.0.0/0 md5を追記
  • PostgreSQLをsudo systemctl restart postgresqlでリスタート
sudo vim /etc/postgresql/10/main/postgresql.conf
sudo vim /etc/postgresql/10/main/pg_hba.conf
sudo systemctl restart postgresql

⑤DockerのキーをインポートしてDocker apotリポジトリを追加し、Dockerエンジンをインストールする

sudo apt-get -y install apt-transport-https ca-certificates gnupg-agent software-properties-common
wget --quiet -O - https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
sudo add-apt-repository "deb https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable"
sudo apt-get update
sudo apt-get -y install docker-ce docker-ce-cli containerd.io

⑥Dockerエンジンの構成

sudo mkdir -p /etc/systemd/system/docker.service.d
sudo cp ~/folio-install/runbooks/single-server/scripts/docker-opts.conf /etc/systemd/system/docker.service.d
sudo systemctl daemon-reload
sudo systemctl restart docker

⑦docker-composeのインストール

sudo curl -L \
  "https://github.com/docker/compose/releases/download/1.26.2/docker-compose-$(uname -s)-$(uname -m)" \
  -o /usr/local/bin/docker-compose
sudo chmod +x /usr/local/bin/docker-compose

git, curl, NodeJS, npm, Yarn, libjson-perl, libwww-perl libuuid-tiny-perl

①Ubuntuのaptリポジトリからインストール

sudo apt-get -y install git curl nodejs npm libjson-perl libwww-perl libuuid-tiny-perl

②npmからnをインストール
※nというのは、nodeの管理コマンドです。

sudo npm install n -g

③Yarnのキーをインポートし、Yarn aptレジストリを追加し、Yarnをインストールする

wget --quiet -O - https://dl.yarnpkg.com/debian/pubkey.gpg | sudo apt-key add -
sudo add-apt-repository "deb https://dl.yarnpkg.com/debian/ stable main"
sudo apt-get update
sudo apt-get -y install yarn

Apache KafkaとApache ZooKeeperのインストール

※上記はmod-subpubで必要です。

~/folio-install/runbooks/single-server/scripts/docker-compose-kafka-zk.ymlを修正する。

修正前 KAFKA_ADVERTISED_LISTENERS: INTERNAL://10.0.2.15:9092,LOCAL://localhost:29092
修正後 KAFKA_ADVERTISED_LISTENERS: INTERNAL://<PRIVATE IP ADDRESS>:9092,LOCAL://localhost:29092
※<PRIVATE IP ADDRESS>には、EC2インスタンスのプライベートIPアドレスを入れてください。

sudo mkdir /opt/kafka-zk
sudo cp ~/folio-install/runbooks/single-server/scripts/docker-compose-kafka-zk.yml /opt/kafka-zk/docker-compose.yml
cd /opt/kafka-zk
sudo docker-compose up -d
cd -

データベースとロールの作成

PostgreSQLにスーパーユーザーでログイン

sudo su -c psql postgres postgres

OkapiとテナントのDBとロールを作成する。

CREATE ROLE okapi WITH PASSWORD 'okapi25' LOGIN CREATEDB;
CREATE DATABASE okapi WITH OWNER okapi;
CREATE ROLE folio WITH PASSWORD 'folio123' LOGIN SUPERUSER;
CREATE DATABASE folio WITH OWNER folio;

\q でpsqlを抜ける。

Okapiのインストールと構成

wget --quiet -O - https://repository.folio.org/packages/debian/folio-apt-archive-key.asc | sudo apt-key add -
sudo add-apt-repository "deb https://repository.folio.org/packages/ubuntu xenial/"
sudo apt-get update
sudo apt-get -y install okapi=3.1.2-1
sudo apt-mark hold okapi

Okapiの構成
/etc/folio/okapi/okapi.confの以下を編集する

  • role="dev"
  • port_end="9230"
  • host="<PRIVATE IP ADDRESS>"
  • storage="postgres"
  • okapiurl="http://<PRIVATE IP ADDRESS>:9130"

※<PRIVATE IP ADDRESS>には、EC2インスタンスのプライベートIPアドレスを入れてください。

Okapiのリスタート

sudo systemctl daemon-reload
sudo systemctl restart okapi

module descriptorsをセントラルレジストリからプル

curl -w '\n' -D - -X POST -H "Content-type: application/json" -d '{"urls":["http://folio-registry.aws.indexdata.com"]}'  http://localhost:9130/_/proxy/pull/modules     

Folioテナントを作成する

テナント初期化をOkapiにポストする

curl -w '\n' -D - -X POST -H "Content-type: application/json" -d '{"id" : "diku","name" : "Datalogisk Institut","description" : "Danish Library Technology Institute"}' http://localhost:9130/_/proxy/tenants

Okapiの内部モジュールをテナント用に有効化する。

curl -w '\n' -D - -X POST -H "Content-type: application/json" -d '{"id":"okapi"}' http://localhost:9130/_/proxy/tenants/diku/modules

FolioStripesプラットフォームの最新版をビルドする

n <バージョン> で指定したNodeのバージョンに更新できます。
ここではltsに更新します。

sudo n lts

ホームディレクトリにplatform-coreをcloneする

cd ~
git clone https://github.com/folio-org/platform-core
cd platform-core
git checkout q2-2020
yarn install

~/platform-core/stripes.config.jsを以下のように修正する。

修正前:okapi: { 'url':'http://localhost:9130', 'tenant':'diku' },
修正後:okapi: { 'url':'http://<YOUR PUBLIC IP>:9130', 'tenant':'diku' },

※<YOUR PUBLIC IP>にはEC2インスタンスのパブリックIPを入力してください。

NODE_ENV=production yarn build output
cd ..

ウェブサーバを構成してStripes webpackをサーブする

nginxサーバを構成する。

folio-install/runbooks/single-server/scripts/nginx-stripes.confの# Set pathを以下のように書き換えます。

修正前:root /home/vagrant/platform-core/output;
修正後:root /home/ubuntu/platform-core/output;

sudo cp folio-install/runbooks/single-server/scripts/nginx-stripes.conf /etc/nginx/sites-available/stripes
sudo ln -s /etc/nginx/sites-available/stripes /etc/nginx/sites-enabled/stripes
sudo rm /etc/nginx/sites-enabled/default
sudo systemctl restart nginx

対応するFolioバックエンドをデプロイしてテナントに有効にする

デプロイしたモジュールが利用するデータソースの情報をOkapiにポストする

※には、EC2インスタンスのプライベートIPアドレスを入れてください。

curl -w '\n' -D - -X POST -H "Content-Type: application/json" -d "{\"name\":\"DB_HOST\",\"value\":\"<PRIVATE IP ADDRESS>\"}" http://localhost:9130/_/env
curl -w '\n' -D - -X POST -H "Content-Type: application/json" -d "{\"name\":\"DB_PORT\",\"value\":\"5432\"}" http://localhost:9130/_/env
curl -w '\n' -D - -X POST -H "Content-Type: application/json" -d "{\"name\":\"DB_DATABASE\",\"value\":\"folio\"}" http://localhost:9130/_/env
curl -w '\n' -D - -X POST -H "Content-Type: application/json" -d "{\"name\":\"DB_USERNAME\",\"value\":\"folio\"}" http://localhost:9130/_/env
curl -w '\n' -D - -X POST -H "Content-Type: application/json" -d "{\"name\":\"DB_PASSWORD\",\"value\":\"folio123\"}" http://localhost:9130/_/env

バックエンドモジュールのリストをポストして有効にする。テナントパラメータをセットして、サンプルデータと参照データをロードする。

curl -w '\n' -D - -X POST -H "Content-type: application/json" \
  -d @platform-core/okapi-install.json \
  http://localhost:9130/_/proxy/tenants/diku/install?deploy=true\&preRelease=false\&tenantParameters=loadSample%3Dtrue%2CloadReference%3Dtrue

注意:Docker HubからDocker imageを持ってくるため、これは時間がかかります。
進捗を見る→Okapi log at /var/log/folio/okapi/okapi.log または sudo docker ps | grep -v "^CONTAINER" | wc -l

Stripesモジュールのリストをポストして有効にする

curl -w '\n' -D - -X POST -H "Content-type: application/json" \
  -d @platform-core/stripes-install.json \
  http://localhost:9130/_/proxy/tenants/diku/install?preRelease=false

Folioのスーパーユーザを作成し、パーミッションをロードする

perl folio-install/runbooks/single-server/scripts/bootstrap-superuser.pl --tenant diku --user diku_admin --password admin --okapi http://localhost:9130

done!と表示されればOK。

サンプルデータのロード

MODSレコードをロードする

curl -w '\n' -D - -X POST -H "Content-type: application/json" -H "Accept: application/json" -H "X-Okapi-Tenant: diku" -d '{"username":"diku_admin","password":"admin"}' http://localhost:9130/authn/login

下記の<okapi token>には、返ってきたtokenの値を入れる。

for i in ~/folio-install/runbooks/single-server/sample-data/mod-inventory/*.xml; do curl -w '\n' -D - -X POST -H "Content-type: multipart/form-data" -H "X-Okapi-Tenant: diku" -H "X-Okapi-Token: <okapi token>" -F upload=@${i} http://localhost:9130/inventory/ingest/mods; done

EC2のパブリックIPにブラウザからアクセス
image.png

diku_admin/adminでログイン

image.png

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0