Oracle Cloud Infrastructure Always Freeを使ってタダでMisskeyインスタンスを立てよう
※ドメイン代は別
更新履歴 (最終更新: 2021/8/26)
- 2021/8/26
-
- Misskeyインスタンスで最初に設定するべきインスタンス設定とその他設定の説明へのリンクを追加
- bash-installの説明書をよく読むように
- 2021/8/9
-
- オブジェクトストレージのファイルへのアクセスにプロキシを使うようにしました。
- bash-installのY/nの質問にはだいたいyと答えればOKです。
うわさのAlways Free――本当にこれが無料なんですの?
鯖缶※界隈ではいま、Oracle Cloud Infrastructure(OCI)のAlways Freeが話題になっています。
それは、Oracle Cloudに登録すれば誰もが利用できる無料のAlways Freeリソースで、ARMインスタンス4コア・RAM24GB分を、期間の制限なく無料で利用できるからなんです!
どのくらいの性能かは、Geekbenchのベンチマーク結果をご確認ください。
※ 鯖缶 = サーバー管理者
ちょっと注意
現状、OCIの仕様により、ARMインスタンスは「無料トライアル期間」から一定時間経つと一度停止させられてしまいます。
復活方法はAlways FreeなOCI Armインスタンスが停止させられてしまったら…の記事で記載しています。頭の片隅に覚えておいてください。
サクッと構築してみよう
用意するもの
- ドメイン
ルートドメインでなくても、サブドメインで構いません。とにかくIPアドレスを指定できれば大丈夫です。 Google Domainsでドメインを購入してCloudflareを利用するのが、安定もするしDNSがすぐ適用されるためお勧めです。 - クレジットカード
Kyashはだめだったので、与信のあるクレジットカードあるいは銀行のデビッドカードを用意する必要があります。
Oracle Cloudアカウントを作成する
https://www.oracle.com/jp/cloud/free/ にアクセスし、[無料で始める] を選択します。
そうすると、下の画像のようなフォームが出てきます。
・これ以降は案内に従って必要な情報を入力しましょう(登録方法については多くのサイトで書かれているので大丈夫かと思います)。
・噂のARMインスタンスを使いたい場合、東京リージョンでは確保が非常に困難ですので、大阪などにすると比較的確保しやすいかと思います。今回は大阪リージョンで作成します。
・ちなみに、クレジットカードによる認証にKyashは使えませんでした。
コンピュート・インスタンス(サーバー)を作成する
ここでは、ARMインスタンスを作成していきます。
ダッシュボードは画像のようになっています。
左上を押すとメニューが開きます。そこからコンピュート – インスタンス と進んで下さい。
コンパートメントをrootに選択し、②インスタンスの作成 を選択します。(画像だとすでにインスタンスが作成されていますが気にしないでください!)
イメージとシェイプを編集します。
編集を展開すると次のように切り替わります。
まずはイメージの変更を選択します。
Canonical Ubuntuの左側を✅、OSバージョンは20.04を選択し、イメージの選択で確定します。
ARMインスタンスを希望する場合は、Change Shapeでシェイプを変更する必要があります。
Ampereを選択し、VM.Standard.A1.Flexの左側を✅。OCPUの数は1~4の間、メモリー量は24GBまでの間で指定しましょう。デフォルトの(1OCPU RAM6GB)ままでもMisskeyは快適に動作すると思います。
SSH用の秘密鍵を取得します。[秘密キーの保存]をクリックし、ダウンロードしたキーは~/.ssh
もしくは%USERPROFILE%/.ssh
などにしまっておきましょう。
今回は~/.ssh/ociarm.keyにしたものとして進めます。
[カスタム・ブート・ボリュームサイズを指定します] を選択すると、ドライブのサイズを指定できます。デフォルトは50GBで、1つのテナンシ(アカウント)で合計200GBまで利用できます。
一通り設定が終わったので、[作成]を選択します。
インスタンス作成でエラーになったら……
このようなエラーが出たら、別の記事Terraformでインスタンス無料枠を勝ち取ろうをお読みください。
ネットワークの設定(ポート開放)
インスタンスに外部からアクセスするためには、ネットワーク設定でもポートを解放してやる必要があります。
インスタンスの詳細から、サブネットを選択。
セキュリティリストを選択。
イングレス・ルールの追加を選択。
次のようにイングレス・ルールを設定します
2つめのイングレス・ルールは、[+別のイングレス・ルール]で追加できます。
[イングレス・ルールの追加]を選択して、ネットワークの設定は完了です。
DNSを設定する
インスタンス一覧に戻って、作成されたインスタンスのパブリックIPを控えます。
Cloudflareなどのお使いのDNSでAレコードをこのIPに設定してください。
(DNSの設定はここでは解説しませんが、Googleなどで調べれば出てくるので大丈夫じゃないかなと思います。)
インスタンス(サーバー)にSSHで接続する
SSHで接続します。
ssh ubuntu@158.x.x.x ~/.ssh/ociarm.key
yesを入力して、Welcome to Ubuntuが表示されたら成功です!
シェルスクリプトを使う
サーバーへのMisskeyのインストールは、シェルスクリプトを使えば簡単に行えます。
シェルスクリプトの説明をよくお読みください。
https://github.com/joinmisskey/bash-install#readme
パッケージを最新にする
すべてのパッケージを最新にします。再起動もしておきましょう。
sudo apt update; sudo apt full-upgrade -y; sudo reboot
インストールスクリプトで質問に答えて祈る
SSHでもう一度接続し、次のコマンドを入力してください。
wget https://raw.githubusercontent.com/joinmisskey/bash-install/main/ubuntu.sh -O ubuntu.sh; sudo bash ubuntu.sh
いくつか質問があるのでそれに答えます。
よくわからなければ、Y/nの質問にはすべてyと答えればOKです。
(nginxは使用するようにしてください。)
OK. It will automatically install what you need. This will take some time.
と表示されたら質問タイムは終わりです。
このスクリプトの更新があった場合には@joinmisskey@misskey.ioでお知らせしますので、ぜひフォローをお願いします。
ALL MISSKEY INSTALLATION PROCESSES ARE COMPLETE!
と表示されてスクリプトが終了したら、インストールは完了です。
サイトにアクセスし、管理者アカウントを作成します。
オブジェクトストレージの設定
Always Freeサービスでは、オブジェクトストレージも20GBまで使用できます。
Misskeyに設定していきましょう。
Misskeyでオブジェクトストレージの設定を開く
サイドメニューからインスタンス設定を開きます。
スクロールして[オブジェクトストレージ]を選択し、[オブジェクトストレージを使用]をオンにします。
まずは、Prefixにインスタンス名など適当な文字列を入力してください。
何も入力しないと正常に動かない場合があります。
そして、RegionにあなたのOCIリージョン(ap-osaka-1, ap-tokyo-1, etc)を入力します。
OCIでバケットを作成する
OCIのバケットの設定 https://cloud.oracle.com/object-storage/buckets にアクセスし、[バケットの作成]を選択します。
バケット名はURLになるので、短くてわかりやすいものにします。
ほかの設定は弄る必要はありません。[作成]を選択します。
バケットの画面に切り替わります。
Misskeyの設定で、
- Bucketにいま設定したバケット名を入力してください。
- Endpointは次のようにします:
ネームスペース.compat.objectstorage.リージョン.oraclecloud.com
つまり、先ほどの画面の例では axcsextlaa47.compat.objectstorage.ap-osaka-1.oraclecloud.com と指定します。
[可視性の編集]を選択してください。
次の画像のように設定し、[変更の保存]を選択します。
[アップロード]を選択。
適当な画像をコンピューターからアップロードしてください。
[アップロード]を選択してアップロードを確定します。
処理はすぐに完了するので、[閉じる]を選択します。
アップロードされた画像の右端のボタンを選択するとメニューが表示されます。
[オブジェクト詳細の表示]を選択してください。
URLパスで示されているURLにアクセスし、画像が表示されるか確認します。
認証情報が要らないことを確認するために、プライベートブラウジングや別のブラウザなどでアクセスするのが良いと思います。
取消を選択して戻ります。
認証情報を取得する
一番右上のユーザーメニューを開き、[ユーザー設定]を選択します。
顧客秘密キーを開き、[秘密キーの生成]を選択します。
適当な名前を入力します。
生成された秘密キーをコピーし、Misskeyの設定でSecret keyとして設定します。
[閉じる]を選択。
リストにキーが追加されました。
アクセス・キーをクリックしてコピーし、Misskeyの設定でAccess keyとして設定します。
プロキシを設定する
Free TierでのオブジェクトストレージのAPI呼び出しは5万回/月に制限されています。
この回数には、自分や他のユーザーからのアクセスも含まれます。ユーザーにオブジェクトストレージに直接アクセスさせる(APIエンドポイントのGETを叩きまくる)方式ですと、すぐに制限に達してしまうと思います。
そこで、Misskeyのサーバーにプロキシを設定し、ファイルをキャッシュすることにします。
ファイル配信を代行することで、オブジェクトストレージへのアクセス回数が最低限で済むようにするということです。
今回は、files.example.com (example.comはあなたが用意したドメインに置き換えてください)でプロキシを公開することにして設定を進めます。
Misskeyの設定でBase URLにhttps://files.example.com
と入力してください。
DNSを設定する
Misskeyと同様、DNSにてfiles.example.comがインスタンスを参照するように設定してください。
プロキシ用の証明書を取得する
Misskeyをサブドメインで公開する場合はプロキシ用の証明書を取得する必要があります。
ルートドメインで公開する場合は、ルートドメインの証明書にすべてのサブドメインの証明書が含まれているのでこの操作は不要です。
Cloudflareの場合は以下のコマンドを実行します。files.example.comは自分のものに置き換えてください。
certbot certonly -t -n --agree-tos --dns-cloudflare --dns-cloudflare-credentials /etc/cloudflare/cloudflare.ini --dns-cloudflare-propagation-seconds 60 --server https://acme-v02.api.letsencrypt.org/directory -d files.example.com;
Cloudflareを使用しない場合は以下のコマンドを実行します。files.example.comは自分のものに置き換えてください。
certbot certonly -t -n --agree-tos --standalone -d files.example.com;
nginxを設定する
Misskeyをインストールしたときと同様、インスタンスにSSH接続してください。
Linuxで使うエディタとしてnanoをインストールします。
sudo apt install nano -y
/etc/nginx/conf.d/files.conf
というファイルを新規作成します。
sudo nano /etc/nginx/conf.d/files.conf
下の内容をコピペして、編集します:
- 6・22行目のfiles.example.comを自分のURLに書き換える
- 16~18行目のリージョン・ネームスペース・バケットを自分のものに置き換える
- 26・27行目のexample.comを置き換える
- Misskeyがルートドメインの場合はルートドメインに置き換える
- Misskeyがサブドメインの場合はfiles.example.comというように置き換える
proxy_cache_path /tmp/nginx_files_cache levels=1:2 keys_zone=files1:16m max_size=1g inactive=60d use_temp_path=off;
server {
listen 80;
listen [::]:80;
server_name files.example.com;
# For SSL domain validation
root /var/www/html;
location /.well-known/acme-challenge/ { allow all; }
location /.well-known/pki-validation/ { allow all; }
location / { return 301 https://$server_name$request_uri; }
}
server {
set $f_region 'リージョン';
set $f_namespace 'ネームスペース';
set $f_bucket 'バケット';
listen 443 ssl http2;
listen [::]:443 ssl http2;
server_name files.example.com;
ssl_session_cache shared:ssl_session_cache:10m;
# Let's Encrypt certificate
ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem;
# SSL protocol settings
ssl_protocols TLSv1.2;
ssl_ciphers ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA384:ECDHE-RSA-AES128-SHA256:ECDHE-RSA-AES256-SHA:ECDHE-RSA-AES128-SHA:AES128-SHA;
ssl_prefer_server_ciphers on;
proxy_ignore_headers X-Accel-Expires Cache-Control Expires Set-Cookie Vary X-Accel-Redirect X-Accel-Limit-Rate X-Accel-Buffering X-Accel-Charset;
proxy_hide_header access-control-allow-methods;
proxy_hide_header access-control-allow-origin;
proxy_hide_header storage_tier;
proxy_hide_header etag;
proxy_hide_header opc-request-id;
proxy_hide_header x-amz-request-id;
proxy_hide_header x-api-id;
proxy_buffering on;
proxy_cache files1;
proxy_cache_min_uses 1;
proxy_cache_valid any 60d;
proxy_cache_lock on;
proxy_cache_lock_age 1s;
proxy_cache_use_stale updating;
proxy_cache_bypass 0;
proxy_no_cache 0;
add_header X-Cache $upstream_cache_status;
expires 1y;
resolver 8.8.8.8;
location = / {
return 404 "404";
}
location / {
proxy_pass https://objectstorage.$f_region.oraclecloud.com/n/$f_namespace/b/$f_bucket/o$uri;
}
}
Ctrl+X→Y→Enter と操作すると保存できます。
設定ファイルが機能するかテストします。
sudo nginx -t
nginx: configuration file /etc/nginx/nginx.conf test is successful
と表示されればOKです。
nginxデーモンを再起動します。
sudo systemctl restart nginx
もし可能なら、ブラウザで先ほどアップロードしたファイルにプロキシを使ってアクセスできるかどうかテストしてみてください。
Misskeyの設定を保存して動作するか確認
これで設定は完了です!
Misskeyの設定を保存します。
画像をアップロードして、正常に動作するか確認しましょう!
Misskeyの設定を続ける
- Misskeyのデータベースをバックアップしよう【OCIオブジェクトストレージ編】
- Misskeyインスタンスで最初に設定するべきインスタンス設定とその他設定の説明
- Squidプロキシを設定してMisskeyを守る
ARMインスタンスのGeekbenchスコア――これはやばいですわ!
ARMインスタンス4OCPUがどの程度の性能なのか気になったため、Geekbenchスコアを計測してみました。
まずは気になるフルスペック(4OCPU RAM24GB)の結果をお伝えします。
シングル856, マルチ3251でした。
(ちなみに、Linux/ARM版バイナリは https://cdn.geekbench.com/Geekbench-5.4.1-LinuxARMPreview.tar.gz から取得できます)
1OCPU RAM6GBでは、シングル833, マルチ834でした。
私が持っている環境で、ちょうど近い環境がありました。
Core i7-4770です。条件をそろえる(?)ためにWSL2 Ubuntuで計測しました。
シングル886, マルチ3677です。
完全に自慢になってしまいますが、メインマシンのRyzen 5 5600X(PBO2有効・WSL2 Ubuntu)は、
シングル1704, マルチ8260です。
GeekbenchデーターベースによればRaspberry 4Bのマルチコアが500(1.5GHz)~700(2.0GHz)ということで、1OCPUでもPi4Bのオーバークロック版より強いわけですね。
Misskeyを個人で使うサーバーとしてはたいへん贅沢なスペックかと思います。
Mastodonだってサックサク動くでしょうし、特にメモリが多いので、Minecraftのサーバーに最適なのではないでしょうか。
Misskeyでも、Elasticsearchを動かすには24GBが必要かもしれません。
とにかく、このスペックはMisskeyを一人でだけでは持て余します。余裕があることに越したことはないですけどね。