在EC2上完成单服务器部署的【Folio LSP】教程(完整版)

2020年第3季度的支持

开场白

    • この記事では、Folioのチュートリアルのうち、Single Server DeploymentをEC2で実行する場合の紹介をします。

 

    • ここでは、Complete版をデプロイします。

 

    • Edge modulesは対象外としています。

Core版と比較すると以下が違ってきますが、この記事に沿って作っていけば大丈夫です。

cloneしてくるリポジトリとそれに伴うパスの変更
必要なRAMの容量
runbookのスクリプトの種類(core版ではなくcomlete版を使う)

如果路径错误,请根据需要适时更改。

    元ネタ 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)

 

    チュートリアルで出てくるCURLオプション(https://qiita.com/ayungn/items/f713f3a142f093a63e0e)

解释:在本书中,作者用一个小标题“凡例”进行了一些说明和规定。

参考信息:
与核心版或虚拟机版不同的步骤以及易于出错的地方。

问答

    • 元ネタの中にmainbar/sidebarとありますが、mainbar/sidebarとは何ですか?

sidebarを実行すると「最新スナップショット」をもとにしたビルドができます。mainbarは四半期に一度のリリースをもとにビルドします。

plartform-core/platform-completeとは何ですか?

platform-coreは基本機能、platform-comleteは全機能をビルドします。バックエンドモジュールの数でいうとplatform-coreは25、platform-completeは55です。この記事では、platform-coreのビルドについて説明します。

大致的流程 (Dà zhì de

    1. 准备EC2

 

    1. 在EC2中配置环境(包括Okapi、Postgre、Java、Docker引擎等)

 

    1. 创建Folio的租户(diku)

 

    1. 构建Stripes

 

    1. 通过Okapi拉取租户使用的模块的Docker镜像

 

    准备示例记录

准备EC2。

请您自行承担课金等责任,并进行执行。

启动实例
undefined
选择
image.png
选择实例类型为t2.2xlarge(8个虚拟核心,32GiB内存)。

需要比core版更大的实例。

undefined
点击”确认和创建”
undefined
按下「启动」
undefined
因为要从本地连接到EC2上SSH,所以需要获取密钥对。
undefined
点击“创建实例”。
undefined

确认实例

image.png

确认公共IP和私有IP。
安全组链接在这里。
停止实例后,公共IP会更改,所以请注意。您可以使用弹性IP进行固定,但请注意计费方式。重新启动的情况下,公共IP应该不会更改。

设置安全组

我打开端口。
image.png
点击“添加规则”

描述以下规则(这个描述有点过于开放。之后会进行编辑)。

image.png
点击“保存规则”。

使用SSH协议连接到EC2

使用在实例设置时获取的密钥和公共IP,在您喜欢的方式下进行连接。
在Win 10的PowerShell中,您可以使用以下方法进行连接。

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

Linux主机的构建

将此教程所需的脚本等克隆到合适的目录中的存储库。

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

请将 folio-install/runbooks/single-server/scripts/nginx-stripes-complete.conf 复制为 nginx-stripes.conf。

cp ~/folio-install/runbooks/single-server/scripts/nginx-stripes-complete.conf ~/folio-install/runbooks/single-server/scripts/nginx-stripes.conf

安装和配置必要的软件包。

运行环境要求:Java 11、nginx(Engine X)、PostgreSQL 10、Docker。

①更新 apt cache

sudo apt-get update

安装Java8和nginx,并将Java11设置为系统默认版本。

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

【20201207】从Java 8升级至Java 11。

导入PostgreSQL的密钥,添加PostgreSQL的apt存储库,并安装PostgreSQL。

[20201207] 删除以下内容:
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

以下是一种可能的中文翻译:
[20201207] 删除以下内容:
sudo add-apt-repository “deb http://security.ubuntu.com/ubuntu xenial-security main”
sudo apt-get更新
sudo apt-get安装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更新
sudo apt-get -y安装postgresql-10 postgresql-client-10 postgresql-contrib-10 libpq-dev

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/ focal-pgdg main"
sudo apt-get update
sudo apt-get -y install postgresql-10 postgresql-client-10 postgresql-contrib-10 libpq-dev

④进行PostgreSQL的配置,以便能够从Docker进行连接。

    • /etc/postgresql/10/main/postgresql.confの「Connection Settings」にlisten_addresses = ‘*’を追記

 

    • /etc/postgresql/10/main/postgresql.confの「max_connections」を増やす(例:500)[20201203追記]

 

    • /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 apt存储库,安装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.27.4/docker-compose-$(uname -s)-$(uname -m)" \
  -o /usr/local/bin/docker-compose
sudo chmod +x /usr/local/bin/docker-compose

【20201207】从版本1.26.2到1.27.4

安装构建要求: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所需的。
Apache Kafka(http://kafka.apache.org/) 是什么?

这是一个分布式流媒体平台,具有“Pull型”和“高吞吐量”等特点,可用于构建流媒体数据管道。它是一个在分布式环境中的消息传递系统,可以以“高吞吐量”和“低延迟”快速地获取和传送大规模数据。

Apache ZooKeeper是什么?

Apache ZooKeeper 是一种为大型分布式系统提供集中管理配置信息和命名服务的软件。

修改 ~/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://<私有IP地址>:9092,LOCAL://localhost:29092
请将<私有IP地址>替换为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服务、租户的数据库和角色。

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;

退出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 focal/"
sudo apt-get update
sudo apt-get -y install okapi=4.7.2-1
sudo apt-mark hold okapi

[20200607 将Okapi版本从4.3.3-1更改为4.7.2-1]
[20201203 将Okapi版本从3.1.2-1更改为4.3.3-1]
[20201207 将Ubuntu xenial更改为focal]
①编辑/etc/folio/okapi/okapi.conf中的以下内容

    • role=”dev”

 

    • port_end=”9230″

 

    • host=””

 

    • storage=”postgres”

 

    • okapiurl=”http://:9130″

 

    ~postgres_host””~ [20201209追記→削除]

请在<私有IP地址>中输入EC2实例的私有IP地址。

②Okapi重新启动

sudo systemctl daemon-reload
sudo systemctl restart okapi

从中央注册表中拉取模块描述符。

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

从提供的URL中获取模块描述符,但这个模块描述符不是租户(在这里是diku)特有的,而是共享的。请参考:https://github.com/folio-org/okapi/blob/master/doc/guide.md#module-descriptor-sharing
有关_/proxy/pull/modules的详细信息,请参阅Okapi核心API文档:https://s3.amazonaws.com/foliodocs/api/okapi/okapi.html
ModuleDescriptor指南:https://dev.folio.org/guides/module-descriptor/
※Registry中有以下描述。

作为持续集成过程的一部分,每个ModuleDescriptor.json都会发布到FOLIO注册表,网址为https://folio-registry.aws.indexdata.com/。

创建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 知道现在有一个名为 “diku” 的租户存在了。

启用Okapi的内部模块以供租户使用。

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

构建FolioStripes平台的最新版本

您可以通过 n <版本> 命令来更新指定节点的版本。
在这里我们将更新为 lts 版本。

sudo n lts
cd ~
git clone https://github.com/folio-org/platform-complete
cd platform-complete
git checkout q3-2020
yarn install

yarn 是 Node.js 的包管理工具。
.npmrc 文件中包含了 @folio:registry=https://repository.folio.org/repository/npm-folio/ 的配置。

请按照以下方式修改 ~/platform-complete/stripes.config.js文件。

修正前:okapi: {‘url’:’http://localhost:9130′, ‘tenant’:’diku’},
修正后:okapi: {‘url’:’http://<你的公共IP地址>:9130′, ‘tenant’:’diku’},

请在处输入EC2实例的公共IP地址。
当停止EC2实例时,公共IP地址会发生变化。
如果发生此情况,您需要修改上述内容并重新构建以下内容。

NODE_ENV=production yarn build output
cd ..

構成一个网络服务器来提供Stripes webpack。

配置Nginx服务器。

将 folio-install/runbooks/single-server/scripts/nginx-stripes.conf 文件中的 #Set path 部分按照以下方式修改:
修改前:/home/vagrant/platform-complete/output;
修改后:/home/ubuntu/platform-complete/output;

将服务器名称设为公共IPv4 DNS名称。 [20201209补充]

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

追加20201209

curl -w '\n' -D - -X POST -H "Content-Type: application/json" -d "{\"name\":\"KAFKA_HOST\",\"value\":\"<PRIVATE IP ADDRESS>\"}" http://localhost:9130/_/env
curl -w '\n' -D - -X POST -H "Content-Type: application/json" -d "{\"name\":\"OKAPI_URL\",\"value\":\"http://<PRIVATE IP ADDRESS>:9130\"}" http://localhost:9130/_/env

发表并激活后端模块列表。设置租户参数,并加载示例数据和参考数据。
※ 请根据工作目录更改platform-complete。这是在PWD为home/ubuntu的情况下。

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

请注意:由于需要从Docker Hub拉取Docker镜像,这会花费一些时间。
查看进度→在/var/log/folio/okapi/okapi.log查看Okapi日志或者使用sudo docker ps | grep -v “^CONTAINER” | wc -l命令。

如果没有剩余空间,请先尝试重新启动。如果仍然不行,可以考虑添加卷或采取其他相应措施。

将Stripes模块的列表发布并启用。
请根据工作目录调整platform-complete。此示例假设PWD为home/ubuntu。

curl -w '\n' -D - -X POST -H "Content-type: application/json" \
  -d @platform-complete/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

如果显示为“完成!”就可以了。

加载样本数据

加载MODS记录

加载用于库存的示例数据。 示例数据可在https://github.com/folio-org/folio-install/tree/master/runbooks/single-server/sample-data/mod-inventory找到。

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
image.png

将返回的token值放入下列的中。

根据目录修改※./folio-install/runbooks/single-server。这是当PWD为home/ubuntu时的情况。

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
image.png

使用diku_admin账号在admin页面上登录

image.png

附录 (fù lù)

如果要在Certbot上配置SSL,请参考https://certbot.eff.org/lets-encrypt/ubuntufocal-nginx。

修改nginx-stripes.conf文件。

server {
  listen 80;
  server_name ドメイン名;
  charset utf-8;
  # Serve index.html for any request not found
  location / {
    # Set path
    root /home/ubuntu/platform-complete/output;
    include mime.types;
    types {
      text/plain lock;
    }
    try_files $uri /index.html;
 }
}
#General HTTP to HTTPS
server {
        listen 80;
        listen [::]:80;
        server_name ドメイン名;
        location / {
                return 302 https://$host$request_uri;
        }
}
server {
        listen 443 ssl;
        ssl_certificate  /etc/letsencrypt/live/ドメイン名/fullchain.pem;
        ssl_certificate_key /etc/letsencrypt/live/ドメイン名/privkey.pem;
        server_name ドメイン名 default_server;
        #ssl on;
        ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
        location / {
                # Set path
                root /home/ubuntu/platform-complete/output;
                include mime.types;
                types {
                        text/plain lock;
                }
                try_files $uri /index.html;
        }
        location /okapi {
                rewrite ^/okapi/(.*) /$1 break;
                proxy_pass http://localhost:9130;
        }

stripes.config.js将被设定为以下内容

okapi: { 'url':'https://ドメイン名/okapi', 'tenant':'diku' },

如果改写,请不要忘记构建。

NODE_ENV=production yarn build output
广告
将在 10 秒后关闭
bannerAds