##前置き
この記事では、Folioのチュートリアルのうち、Single Server DeploymentをEC2で実行する場合の紹介をします。
元ネタ→https://github.com/folio-org/folio-install/tree/master/runbooks/single-server#folio-deployment-single-server
先に以下に目を通しておくと理解しやすいかと思います。
- Vagrant/VirtualBoxでSingle Server Deploymentチュートリアルを実行する(https://qiita.com/ayungn/items/f84e55893b7817af15a7)
##EC2の準備
#####インスタンスを起動
#####選択
#####インスタンスタイプはt2.xlarge(vCPU4, 16GiB)を選択。
ローカルからEC2にSSH接続をしたいので、キーペアを取得しておく。
任意のキーペア名を入力し、「キーペアのダウンロード」を押下して秘密鍵を取得する。
「インスタンスの生成」押下。インスタンスが作成されるまでしばらく待つ。
パブリックIP、プライベートIPを確認します。
セキュリティグループはここからリンクしています。
パブリックIPはインスタンスをstopすると変わるので注意。
##セキュリティグループの設定
ポートを開けてあげます。
上記の「セキュリティグループ」から、
「インバウンドルールを編集」を押下
「ルールを追加」を押下
「ルールを保存」を押下
##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
diku_admin/adminでログイン