Chienomi

VultrでMisskeyサーバーを立てた話

Live With Linux::server

先日、Misskeyを知ってから「やりたいなー」と思っていた「コンセプトサーバー」をスタートさせた。

まず、そのインスタンスについての紹介は後回しにして、サーバーを立てた技術的な話をしていこうと思う。

サーバー選定とVultr

Misskeyを動かす、という目標は良いとして、問題はサーバーの決定である。

私はVPSの利便性が最高だと思っているてので、オンプレミスという選択肢はない。 そして、サーバーOSはArchlinux以外は考えられない。

さくらのVPSは立てたり消したりするのに手間がかかり、扱いにくいためあまり考えたくはない。 こうしたことから国内ではConoHa一択になってしまう。

だが、国内にこだわらなければ選択肢は他にもある。 私が選択したのはVultrだ。

Vultrはアメリカはマイアミの海岸に登記住所をもつホスティング業者だ。 2014年にサービスローンチされている。

注目されがちなのは月最低2.5ドルという非常に安価なVPSがあることだが、

  • CPU共有型VPS
    • 前世代Intel CPU+通常のSSDによるレギュラーモデル
    • 最新CPUとNVMe SSDを搭載した高性能モデル (Intel/AMDあり)
  • CPU専有型VPS (4種類存在)
  • Nvidia GPU搭載VPS (GPUの種類は種類ある)
  • GPUベアメタル
  • CPUベアメタル

と多彩な種類があり、非常に柔軟な、かつ上から下まで幅広い構成が可能だ。

さらに用意されるサービスも

  • DNS
  • スナップショット
  • DDoSプロテクション
  • マネージドMySQL/PostgreSQL
  • データセンター専用線接続
  • k8s
  • 任意サイズの追加ブロックストレージ
  • 任意サイズのオブジェクトストレージ
  • ロードバランサー

などがある。

つまり、ConoHaというよりは、AWSのようなサービス展開であり、「恐ろしい従量課金のないクラウドコンピューティング」といった趣。 内部サーバーは100Gbps級のネットワークがつながっており、LANの帯域が100MbpsしかないConoHaよりもずっと速い。 データセンターが東京にもある上に、インターネット帯域も太く、なんならホスティングプロバイダとして上位の速度であるため、ConoHaとは比べ物にならず、ConoHaやさくらよりも本格的なサーバー環境が必要である人向けといえる。

なおかつ、定額で利用できるため、小さな環境でも使いやすい。 ConoHaと違い通信量制限はあるが、かなり豊富なので心配は少ないだろう。

Vultrサーバー

Vultr VPSはカスタムISOの利用が可能だが、そもそも最初からArchlinuxのイメージがあるため、私は特に利用しなかった。 契約したのはAMD High Performanceという、最新AMDプロセッサとNVMe SSDを用いたCPU共有VPSである。

2 vCPU, 4GB RAM, 100GB SSD, 5TB帯域で月24ドル。 自動スナップショットをつけて月28ドルだ。 円安ドル高の影響もあり、4000円ほどするため、スペック的にはConoHaやさくらと比べ劣って見える。

inxi -F の結果は次のとおり

System:
  Host: stellanaut Kernel: 6.1.14-1-lts arch: x86_64 bits: 64
    Console: pty pts/0 Distro: Arch Linux
Machine:
  Type: Microsoft System: Vultr product: VHP v: pc-q35-7.0
    serial: <superuser required>
  Mobo: N/A model: N/A serial: N/A BIOS: Vultr v: N/A date: N/A
CPU:
  Info: single core model: AMD EPYC-Rome bits: 64 type: MT cache: L2: 512 KiB
  Speed (MHz): avg: 2795 min/max: N/A cores: 1: 2795 2: 2795
Graphics:
  Device-1: driver: bochs-drm v: N/A
  Display: server: No display server data found. Headless machine?
    tty: 80x24 resolution: 1280x800
  API: N/A Message: No display API data available in console. Headless
    machine?
Audio:
  Device-1: Intel 82801I HD Audio driver: snd_hda_intel
  Sound API: ALSA v: k6.1.14-1-lts running: yes
Network:
  Device-1: Red Hat Virtio network driver: virtio-pci
  IF-ID-1: enp1s0 state: up speed: -1 duplex: unknown mac: 56:00:04:53:cc:c9
Drives:
  Local Storage: total: 100 GiB used: 39.1 GiB (39.1%)
  ID-1: /dev/vda model: N/A size: 100 GiB
Partition:
  ID-1: / size: 98.32 GiB used: 39.1 GiB (39.8%) fs: ext4 dev: /dev/vda1
Swap:
  ID-1: swap-1 type: file size: 24 GiB used: 0 KiB (0.0%) file: /swapfile2
  ID-2: swap-2 type: file size: 8 GiB used: 0 KiB (0.0%) file: /swapfile
Sensors:
  Src: lm-sensors+/sys Message: No sensor data found using /sys/class/hwmon
    or lm-sensors.
Info:
  Processes: 129 Uptime: 1d 2h 39m Memory: 3.83 GiB used: 2.9 GiB (75.6%)
  Init: systemd Shell: Zsh inxi: 3.3.25

CPUの詳細が不明で、1コアのCPUが2つになっている。 cpuinfoを見てみても

processor   : 0
vendor_id   : AuthenticAMD
cpu family  : 23
model       : 49
model name  : AMD EPYC-Rome Processor
stepping    : 0
microcode   : 0x1000065
cpu MHz     : 2794.748
cache size  : 512 KB
physical id : 0
siblings    : 2
core id     : 0
cpu cores   : 1
apicid      : 0
initial apicid  : 0
fpu     : yes
fpu_exception   : yes
cpuid level : 13
wp      : yes
flags       : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush mmx fxsr sse sse2 ht syscall nx mmxext fxsr_opt pdpe1gb rdtscp lm rep_good nopl cpuid extd_apicid tsc_known_freq pni pclmulqdq ssse3 fma cx16 sse4_1 sse4_2 x2apic movbe popcnt aes xsave avx f16c rdrand hypervisor lahf_lm cmp_legacy cr8_legacy abm sse4a misalignsse 3dnowprefetch osvw topoext perfctr_core ssbd ibrs ibpb stibp vmmcall fsgsbase bmi1 avx2 smep bmi2 clflushopt clwb sha_ni xsaveopt xsaves clzero xsaveerptr wbnoinvd arat umip rdpid
bugs        : sysret_ss_attrs null_seg spectre_v1 spectre_v2 spec_store_bypass retbleed smt_rsb
bogomips    : 5591.39
TLB size    : 1024 4K pages
clflush size    : 64
cache_alignment : 64
address sizes   : 40 bits physical, 48 bits virtual
power management:

processor   : 1
vendor_id   : AuthenticAMD
cpu family  : 23
model       : 49
model name  : AMD EPYC-Rome Processor
stepping    : 0
microcode   : 0x1000065
cpu MHz     : 2794.748
cache size  : 512 KB
physical id : 0
siblings    : 2
core id     : 0
cpu cores   : 1
apicid      : 1
initial apicid  : 1
fpu     : yes
fpu_exception   : yes
cpuid level : 13
wp      : yes
flags       : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush mmx fxsr sse sse2 ht syscall nx mmxext fxsr_opt pdpe1gb rdtscp lm rep_good nopl cpuid extd_apicid tsc_known_freq pni pclmulqdq ssse3 fma cx16 sse4_1 sse4_2 x2apic movbe popcnt aes xsave avx f16c rdrand hypervisor lahf_lm cmp_legacy cr8_legacy abm sse4a misalignsse 3dnowprefetch osvw topoext perfctr_core ssbd ibrs ibpb stibp vmmcall fsgsbase bmi1 avx2 smep bmi2 clflushopt clwb sha_ni xsaveopt xsaves clzero xsaveerptr wbnoinvd arat umip rdpid
bugs        : sysret_ss_attrs null_seg spectre_v1 spectre_v2 spec_store_bypass retbleed smt_rsb
bogomips    : 5591.39
TLB size    : 1024 4K pages
clflush size    : 64
cache_alignment : 64
address sizes   : 40 bits physical, 48 bits virtual
power management:

となっている。 CPUの名前が伏せられているが、23/49なので恐らくEPYC 7R32(48C/96T)だ。

CPUコア数は2で、やや不安を持っていたが、実際はEPYC ROME(最新と言っているが、もう一世代前になってしまっている)を搭載していることもあり、非常に高速。 Xeon Gold 6230を搭載するConoHaや、Xeon Gold 6212Uを搭載するさくら(ともに3コア)よりも明らかに速い。 また、通信回線が高速であるため、アップデート作業が非常に楽。

管理ページからは利用状況グラフも見られるし、管理ページがConoHaと違って軽いので非常に快適。

シンプルに言って完璧だ。 ConoHa VPSで感心した機能はすべて備えており、様々な点で優れている。 すっかり放置されているConoHaと違いきめ細やかにサービスが提供されており、

Vultrが強靭なサービスであることは、Misskey ioを支えていることから見ても明らかだろう。 ベアメタルを30台、40台と借りているMisskey ioの大量アクセスもしっかり支えている。 日本のVPSなら、支えるかどうか以前にそもそもその規模のサービスでの利用を受け入れないので、安心感がまるで違う。

ConoHa同様にサーバーはすぐ立ててすぐ消すことができ、1時間単位の課金となる。

きっといずれかのタイミングで、私のメインサーバーはさくらからVultrへ移ることになるだろう。

Misskey

MisskeyのインストールはUbuntuを前提にしており、Ubuntu以外では必要な情報がなく、Ubuntu向けに書かれた内容を変換する技術が必要になる。

Archlinuxを使いこなせる人であれば、その本質は「必要なソフトウェアをインストールし、有効化する」であり、あとはpnpmを使った作業はUbuntuと同じなので難しい話ではないだろう。

私がミスった(主に単純なやり忘れ)ポイントとしては

  • misskey ユーザーのシェルを /bin/nologin にしてしまう
  • default.conf の書き換え忘れ
  • データベースの初期化忘れ (ArchlinuxではPostgreSQLは手動初期化かぎ必要)
  • misskey ユーザーロールの作成漏れ (postgresユーザー)
  • misskey テーブルの作成漏れ (misskeyユーザー) ※Misskeyのインストールではテーブル作成はしてくれない
  • Redisの起動忘れ
  • Nginxの起動忘れ
  • Nginx起動してるのにcertbot--standaloneしてしまう

ハマったポイント

VultrのArchlinuxイメージはufwが有効になっており、HTTP通信がufwに飲まれてしまう。 ufwを設定する、あるいは無効にする必要がある。

今回はドメインをCloudFlareで取って、CFを有効にしていたこともあり、より問題が見えにくかった。

Stellanaut

というわけで、私はMisskeyインスタンスCafe&Bar Stellanautを立ち上げた。

「大人な紳士淑女のためのサーバー」とし、18歳未満禁止の雑談向けコンセプトサーバーとなっている。 ロールプレイはそこまで重視していなかったのだが、みんなノリノリでロールプレイしてくれていて、とても嬉しい限り。

あまり強靭なサーバー構成ではないため(費用的にもここまでサーバー増やすとかなりしんどい)、大人数を受け入れられるわけではないが、興味ある人は訪れてもらえればと思う。