Google Cloud Platform の無期限無料枠を利用した Virtuoso の構築方法

**Google Cloud Platform**（以下 **GCP** といいます）の、Always Free（無期限の無料枠）を利用して、RDFストア **Virtuoso** を構築する方法を紹介します。初学者向けに丁寧に書いたので冗長な記事になっています。ご了承ください。

外部アプリのインストールは不要。WEBブラウザ内のみですべて完結しますのでお手軽です。
時間のかかる処理が含まれており、すべて完了するまでスムーズにいって３時間くらいかかりますので、時間に余裕のあるときにやりましょう。

この記事の続編は以下の記事です。
[Google Cloud Platform に構築した Virtuoso を無料でSSL化](https://qiita.com/mirkohm/private/95cac0ab26007f8bade4)

Kiai さんが本記事の内容をさらに改善する記事を書いてくれました。必読です！！
[Virtuso on GCP: Faster with Container-Optimised OS](https://zenn.dev/ningensei848/articles/virtuoso_on_gcp_faster_with_cos)

# 前提条件
- Googleアカウントの取得
- クレジットカード（課金はされませんが番号の登録が必要です）

# GCPに登録
まずGCPが使えるように登録作業を行います。
[Google Cloud Platform](https://cloud.google.com/)にアクセスし、**無料トライアル** をクリック （**無料で開始** でも可）
![01.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/660813/e00e6f4a-6b7f-69ad-4c4b-70c9b15eae5c.png)

次の画面で以下のとおり入力し **続行** をクリック

- 国：**日本**
- 利用規約：**チェック**を入れる
- 最新情報をメールで通知：どちらでもよい

![02.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/660813/8bd48d0f-0479-84cf-5df3-f4cd51e2e8e0.png)

次の画面で以下のとおり入力し **無料トライアルを開始** をクリック

- アカウントの種類：**個人**
- 名前と住所：必要事項を入力
- お支払い方法：**クレジットカード**の番号や名義を入力

![03.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/660813/965ce25b-ba9b-4064-13b3-9e9013284d36.png)
以上でアカウント登録の完了です。

# プロジェクトの作成
アカウント登録が完了すると、GCPのコンソール画面に遷移します。
GCP上で動かすあらゆるものは **プロジェクト** の中で動作するようになっています。今回は Virtuoso用のプロジェクトを作成します。
![04.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/660813/9e4d8045-61e3-e1dc-29f7-15516f23b7a5.png)

次の画面で **プロジェクト名** を適当に設定し、**作成**をクリック
![05.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/660813/4157bfd8-4c4f-1c5a-1292-b7a5c5e09452.png)

しばらくするとプロジェクトが新規で作られます。
![06.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/660813/5cdd9c59-22b0-289b-c528-65f3c8efc4e0.png)

# VMインスタンスの作成
先ほど作成したプロジェクトの中に、VMインスタンスを作成します。
VMインスタンスとは仮想コンピューターのことで、そこでVirtuosoを実行させるためのLinux OS（Ubuntu）を動かします。
左上のナビゲーションメニュー → **コンピューティング** の中の **Conpute Engine** → **VMインスタンス** を選択
![07.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/660813/91dbb0b6-fd3d-b637-bce1-8d6ddc802084.png)

しばらく待って準備が完了したら **作成** をクリック
![08.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/660813/67711049-2c16-3073-6efd-6cbdc20e96e0.png)

ブートディスクの選択画面で以下のように設定

- オペレーティングシステム：**Ubuntu**
- バージョン：**Ubuntu 16.04 LTS**
- ブートディスクの種類：**標準の永続ディスク**（これ以外は有料）
- サイズ：**30GB**（30GBを超えると有料）

![09.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/660813/792be05d-001f-be16-9092-580adfe46319.png)

次にインスタンスの各種設定画面で以下のように設定します。完了したら**作成**をクリック

- 名前：**instans-1**<br>（初期状態のままで。変更もできますがあまり重要ではありません。）
- リージョン：**us-central1（アイオワ）**<br>（変更もできますが、usのいくつかのリージョン以外は無料枠がありません。無料枠があるかどうかは、右側に「**今月のf1-microインスタンスの使用量は、最初の○○時間分が無料です。**」のメッセージが出るかどうかで確認できます。）
- ゾーン：**us-central1-a**
- シリーズ：**N1**（これ以外は有料）
- マシンタイプ：**f1-micro（1 vCPU、614MBメモリ）**（これ以外は有料）
- ファイアウォール：**HTTP/HTTPS の両方にチェック**

![11.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/660813/f23dc397-f75b-6f39-c535-841b7137398e.png)

しばらく待つとインスタンスが完成します。この画面に表示されている **外部IP**が、インターネット上に公開されるあなたのVirtuosoのIPアドレスになりますので控えておきましょう。
![13.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/660813/8ed4d167-7702-8041-6eb0-4b3e6c98d2d5.png)

# 外部IPの固定
外部IPは、デフォルト設定（エフェメラル）では毎度変更されてしまうので、それを固定します。
左上のナビゲーションメニュー → **ネットワーキング** の中の **VPCネットワーク** → **外部IPアドレス** を選択
![14.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/660813/f9748230-a126-2a6b-cdf9-5cb41456d0fc.png)

**種類** を エフェメラル から **静的** に変更。
![15.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/660813/e50939e9-f975-b6c4-a692-81a3a489a9ca.png)

次の画面「新しい静的IPアドレスの予約」で適当に名前を設定し、**予約** をクリック
![16.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/660813/5ef645a6-1155-fd8b-df0d-52faca4cf67a.png)
以上で外部IPの固定は完了です。


# 8890番ポート開放
Virtuosoは **ポート8890番** を使用しますので開放してやります。
左上のナビゲーションメニュー → **ネットワーキング** の中の **VPCネットワーク** → **ファイアウォール** を選択
![17.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/660813/d2da03df-003b-f023-6462-8b2b51c8310a.png)

**ファイアウォールルールを作成** をクリック
![18.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/660813/a5068b96-2675-2248-9082-e2272e7a5a09.png)

次のとおり設定し **作成** をクリック

- 名前：**default-allow-8890**
- 説明：**Allow 8890 from anywhere**
- ターゲットタグ：**use-8890**
- ソースIPの範囲：**0.0.0.0/0**
- プロトコルとポート：tcp: **8890**

![19.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/660813/22f6ec5b-ad9e-5626-dd28-f4eece42d074.png)

左上のナビゲーションメニュー → **コンピューティング** の中の **Conpute Engine** → **VMインスタンス** から、あなたが作成した**instans-1** をクリック
![07.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/660813/91dbb0b6-fd3d-b637-bce1-8d6ddc802084.png)
![23.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/660813/5a64f5a8-2c1c-5a9b-836d-9a47b52870a6.png)

**編集** をクリック
![22.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/660813/d0781c03-f9a1-1473-068b-f4a8289189c2.png)

ネットワークタグ に **use-8890** と打ち込みタグ付けします。そして一番下の **保存** をクリック
![21.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/660813/d4095b7d-891c-eed2-5e0f-4068a61a20df.png)
以上で、8890番ポートが開放されたファイアウォールのルールが、インスタンスに適用されます。

# Virtuoso のインストール
いよいよVirtuosoをインストールしていきます。
左上のナビゲーションメニュー → **コンピューティング** の中の **Conpute Engine** → **VMインスタンス** から、**SSH** → **ブラウザウィンドウで開く** を選択
![24.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/660813/fca9f140-54eb-3042-9455-93579ca8914f.png)

ブラウザで、以下のようなターミナル画面が開きます。
![25.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/660813/cf8db0cc-688e-0233-fa5f-2a8c35793c13.png)

以下のコマンドを１行ずつ打ち込んで（又はコピペして）ください。
（ 頭の **`$ `** はターミナルでコマンドを打つという意味の記号であり、実際には打ち込みません。）

```
$ sudo apt update
$ sudo apt upgrade    　<--「Y」を選択
$ sudo apt-get install libssl-dev gcc autoconf automake libtool flex bison gperf gawk m4 make wget git    　<--「Y」を選択
$ git clone git://github.com/openlink/virtuoso-opensource.git
$ cd virtuoso-opensource
$ git checkout stable/7
$ ./autogen.sh
$ CFLAGS=&quot;-O2 -m64&quot;
$ export CFLAGS*./configure --program-transform-name=&quot;s/isql/isql-v/&quot;
（ 処理が止まったらEnter ）
$ make    　<--約１時間かかるので気長に待つ
$ make check    　<--これも１時間かかるので気長に待つ
$ sudo make install
```

# Virtuoso の起動
ターミナル画面で以下のコマンドを打ち込みむと、Virutosoが起動します。

```
$ cd /usr/local/virtuoso-opensource/var/lib/virtuoso/db/
$ sudo /usr/local/virtuoso-opensource/bin/virtuoso-t -f
```

WEBブラウザで以下のURLを開いてみてください。
**http://xxx.xxx.xxx.xxx:8890/** （ xxx.xxx.xxx.xxx はあなたの**外部IP** に変更する）
起動に成功していれば、Virtuoso のウェルカム画面が表示されます。
![26.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/660813/f9a8a424-bacd-e8a4-7304-771fc0ee0389.png)

ターミナル画面で **Ctrl+C** を押下し、Virtuoso を一旦終了させます。
次に、以下のコマンドを打ち込みます。

```
$ sudo screen /usr/local/virtuoso-opensource/bin/virtuoso-t -f
```
こうすると、ターミナル画面を落として接続を切っても、バックグラウンドでVirtuoso が動作し続けます。
WEBブラウザでVirtuosoが動いていることを確認し、ターミナル画面を閉じてください。
以上でVirtuosoの構築は完了です。

# Virtuoso の停止
上記の設定が完了したら、Virtuosoはほっておいても動作し続けます。
Virtuosoの動作を止めたい場合は、ターミナル画面で以下の通りコマンドを打ち込みます。

```
$ sudo screen -ls
```

画面に以下のようなメッセージが表示されます。

```
There is a screen on:
　　　4275.pts-0.v112.xx.xx.127  (06/22/2020 02:45:40 PM)
1 Socket in /var/run/screen/S-root.
```

上記の **4275** の部分の数字をメモって、次のとおりコマンドを打つとVirtuosoが終了します。

```
$ sudo screen -S 4275-X quit
```

# Virtuosoが不要になった場合に完全に削除する方法
左上のナビゲーションメニュー → **IAMと管理** → **設定**
![20.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/660813/6c8f856d-52c1-5534-9475-d09152e4d031.png)

作成したプロジェクトを **シャットダウン**
![27.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/660813/df53059f-3d95-a63c-bff6-13bbe89aa09b.png)

これでプロジェクトごとすっきり消滅します。

# 注意点
1つのGoogleアカウントで「無料枠」で構築できる Virtuoso用 サーバは1つだけです。
もちろん2つ以上作ることも可能ですが **課金されます** ので注意してください。
もし壊れてしまった場合、プロジェクトをシャットダウン（削除）してから、再度同じ手順で構築すれば課金されません。

あと、GCPのConpute Engine（VMインスタンス）の無料枠は、1ヶ月あたり下り（GCPから出ていくトラフィック）1GBまでです。練習用や趣味のアプリなどでちょこちょこ使っている分には1GBを超えることはほとんど無いと思われますが、本格的にガッツリ使うことになったら少し課金されてしまう可能性がありますのでご注意ください。（1GB超過した分について1GBあたり12円程度）

また，中国及びオーストラリアからのアクセスに対する下りトラフィックは無料枠の対象ではありません。もし中国かオーストラリアからアクセスがあったら課金されてしまいますのでご注意ください。（1GBあたり20円程度）
これの対策をされたい場合は以下の記事が参考になります。
[[GCP]課金対象国からのアクセスを抑止する]
(https://aoboshi.org/?p=829)
[Google Cloud Platformで中国からの通信をブロック]
(https://itbouzy.site/server/gcp-china-block/)

GCPの料金体系の詳細については以下をご覧ください。
[Google Cloud - Compute Engine ･･･ すべての料金]
(https://cloud.google.com/compute/all-pricing?hl=ja#internet_egress)

# 独自ドメインとSSLの適用
この記事の続編である以下の記事をご覧ください。

[Google Cloud Platform に構築した Virtuoso を無料でSSL化](https://qiita.com/mirkohm/private/95cac0ab26007f8bade4)

# 参考にさせていただいたサイト
[【GCP】無期限の無料枠でLinuxサーバを構築](https://densan-hoshigumi.com/server/gcp-free-linux)
[【GCP】任意ポートの開放/確認手順](https://www.mtioutput.com/entry/googlecloud-port-open)

# もっと高速にインストールやデータのロードがしたい方へ
Kiai さんが本記事の内容をさらに改善する記事を書いてくれました。必読です！！
[Virtuso on GCP: Faster with Container-Optimised OS](https://zenn.dev/ningensei848/articles/virtuoso_on_gcp_faster_with_cos)