大体おんなじ毎日

エンジニアじゃないけど技術ブログ書いています

SpacebearでMastodonサーバーを立ててみた

日本時間 2022 11/11 16:00

ホスティングサービスを検討

Mastodon公認ホスティングサービス

Masto.hostとHostdonは新規受付クローズ。

OssroxはEU圏内とスイスのみ受付。

Weingartnaer ITはサイトが分かりにくいし、ドイツ語でしか書かれてない辺り、色々と面倒くさそう・・・。

spacebearが現在受け付けているようだ。

日本人が利用したと思われる情報は全く無かったが、やってみることにした。

まず、Google domainでドメインを取得

その後、spacebearでスモールインスタンスプランで申込み。

カートに入れて次のページに進むと、クレカの情報などを入力する画面になるので、

ここでドメインを入力しておく。

購入完了すると、自動メールが届き、「24時間以内に連絡します」とのこと。

日本時間 11/12 1:00 メール着信

マティからメールが届き、「...を指すドメインのAレコードを作成してください」とのこと。

Google domainでDNSタブからカスタムレコードを選択し、

ホスト名は空欄、タイプA、TT3600、データにメールで指示されたIPアドレスを入力して保存した。

マティに完了した旨をメールした。(日本時間 11/12 11:30)

日本時間 11/12 13:40 マティからメール。

インスタンスの準備が出来たので、サインアップしてユーザー名を教えてくれれば、Admin権限を与えてくれるとのこと。

指示されたアドレスを開くとMastodonのサインアップ画面になったので、新規にアカウントを作った。

このことをマティにメールし、お一人様鯖にしたい旨も伝えた。

日本時間 11/13 7:33 マティからメール。

管理者権限を付与したとのこと。

管理者権限を使って、ユーザー設定>管理>サイトの設定 新規登録を「誰にも許可しない」に設定。 これでお一人様鯖になったはず・・・

感想

fedibird.comよりかはやや重いかな、という程度で十分実用に耐える。

2022.11.13現在、Masto.hostは新規申込みをクローズしているので、もし今すぐ鯖を立てたい!という人にオススメします。 対応がメチャ早いのと担当のマティが色々と丁寧に教えてくれたので助かりました。

ChromebookにLinux環境を構築するメモ

まずLinuxインストール。

catalyst-wakaba.com

Mozcをインストールするとこまで進める。

sudo -e をやった時にデフォルトでVimが起動するようになっているのでnanoに変更する。

ja.linux-console.net

sudo apt install nano

上記コマンドでインストール。

sudo -e を入力した時に自動的にnanoが立ち上がるようにする。

linuxfan.info

nano ~/.bashrc で環境変数を書き加える。

最後尾に export EDITOR=nano と記入して保存して終了。

ここまでやってから、

sudo -e /etc/systemd/user/cros-garcon.service.d/cros-garcon-override.conf

(2022年11月10日追記:2022年7月28日現在、このファイルで環境変数を設定するのは非推奨になっている。)

/etc/environment.d内に任意のconfファイルを作成し、環境変数を設定する。

今回はファイル名をfcitx.confとする。

sudo -e /etc/environment.d/fcitx.conf

以下、

catalyst-wakaba.com

上記サイトに戻って進める。

おひとり様Misskey鯖構築日記《7》

今回ものえるさんの記事を参考に進めていきます。

blog.noellabo.jp

前回はMisskeyのビルド後にデータベースを初期化するところまで終えました。

今回は「systemdの設定」からやっていきます。

Misskeyをサービスとして起動するための、systemdのユニットファイルを設定します。

sudo nano /etc/systemd/system/misskey.service

下記の内容を記述します。

[Unit]
Description=Misskey daemon

[Service]
Type=simple
User=misskey
ExecStart=/home/misskey/.nodenv/shims/yarn start
WorkingDirectory=/home/misskey/misskey
Environment="NODE_ENV=production"
TimeoutSec=60
StandardOutput=syslog
StandardError=syslog
SyslogIdentifier=misskey
Restart=always

[Install]
WantedBy=multi-user.target

ユニットファイルの変更を反映(daemon-reload)し、有効に(enable)し、実行(start)します。

sudo systemctl daemon-reload
sudo systemctl enable misskey
sudo systemctl start misskey

停止する場合はstop、開始がstart、再起動がrestartです。

Misskeyのバージョンアップの際などに、マイグレーション前に停止し、マイグレーション後に開始する、などの操作を行います。

nginx(リバースプロキシ)

Misskeyは、それ自身がWebサーバとしての機能を備えていますが、こうしたWebアプリケーションでは、外部からのアクセスを一度nginx等のリバースプロキシが引き受けて、必要に応じてアプリケーションに転送する構成をとることが一般的です。

ufwhttps接続を許可する

sudo ufw allow 80/tcp
sudo ufw allow 443/tcp

証明書

certbotを使って取得・更新します。

まず、certbotと、cloudflare用のDNS認証を自動化するプラグインをインストールします。

sudo apt install certbot python3-certbot-dns-cloudflare

cloudflareにプログラムから必要な指示を行うため、IDとなるメールアドレスと、APIのキーを設定したファイルを作成します。

cd /etc/letsencrypt
sudo nano .cloudflare_credentials

ファイルの内容に、cloudflareで登録したメールアドレスと、取得したAPIのキーを設定します。

dns_cloudflare_email = (Cloudflareに登録したメールアドレス)
dns_cloudflare_api_key = (Cloudflareで取得したAPIキー)

f:id:crim0404:20211111174517p:plain

上記から表示をクリックして取得しました。

重要情報なので、rootだけが見られるようにアクセス権を設定します。

sudo chmod 600 .cloudflare_credentials

certbotコマンドに--dry-runオプションをつけて動作を確認します。

sudo certbot certonly --dns-cloudflare --dns-cloudflare-credentials .cloudflare_credentials -d (Misskeyを設置するドメイン名) -d (オブジェクトストレージのバケット名.ドメイン名) -m (証明書が切れた時の連絡用メールアドレス) --manual-public-ip-logging-ok --agree-tos --no-eff-email --dry-run

問題ないようであれば--dry-runをはずし、実際に取得を行います。

sudo certbot certonly --dns-cloudflare --dns-cloudflare-credentials .cloudflare_credentials -d  (Misskeyを設置するドメイン名)  -d (オブジェクトストレージのバケット名.ドメイン名) -m (証明書が切れた時の連絡用メールアドレス) --manual-public-ip-logging-ok --agree-tos --no-eff-email

certbotでは、証明書の更新が実際に行われた場合にだけ実行するスクリプトを定義しておくことができます。

nginxなどは、証明書が更新されても、nginxに再読込を指示しないと、古い証明書の内容をいつまでも覚えていて実際に新しい証明書が使用されません。

自動的に証明書などが再読込されるように設定しておきます。

sudo nano renewal-hooks/deploy/reload.sh

下記の通りに記述します。

#!/bin/bash
systemctl reload nginx

これに実行権を設定しておきます。

sudo chmod +x renewal-hooks/deploy/reload.sh

証明書の有効期限が1ヶ月を切ると、取得の際に使ったバラメータに基づいて再取得が行われ、nginxのreloadが行われて、新しい証明書が使われるようになります。

証明書の取得に失敗した場合、設定した連絡用メールアドレスに期限が迫っている旨のメールが届くのですぐに対処してください。

今回はここで終わりにします。

次回は「nginxの設定」からやっていきます。

おひとり様Misskey鯖構築日記《6》

今回ものえるさんの記事を参考に進めていきます。

blog.noellabo.jp

今回はMisskeyのセットアップという項目から再開します。

まずは、PostgreSQLと、redis、nginx、ビルドツールとpythonをaptでインストールしておきます。

sudo apt install postgresql redis-server nginx build-essential python

上記コマンドでまとめてインストールします。

次にPostgreSQLの設定をします。

PostgreSQLに任意のユーザ名を設定し、任意の名前のデータベースを作成します。

パスワードも設定します。

sudo -u postgres psql

CREATE ROLE (ユーザ名) LOGIN CREATEDB PASSWORD '(パスワード)';

CREATE DATABASE (データベース名) OWNER (ユーザ名);

\q

上記コマンドで設定します。

次にMisskeyのインストールをやっていきます。

misskeyユーザーを作って、リポジトリをcloneするところまでやります。

sudo adduser --disabled-password --disabled-login misskey

sudo -iu misskey

git clone -b master git://github.com/syuilo/misskey.git

上記コマンドを実行します。

sudo adduser --disabled-password --disabled-login misskey

先ほどのmisskeyユーザ作成の一行目のコマンドを実行すると、

f:id:crim0404:20211024200901p:plain

Full nameを入力しろみたいなメッセージが出てくるが、これは何も入力せずにエンターを押せばデフォルトとなるようです。

私はFull nameのところにmisskeyと入力してから気がついたので、そのままmisskeyという名前になっています。

次にnodejsとyarnをnodenvでインストールします。

まずnodenvを取ってきます。

git clone https://github.com/nodenv/nodenv.git ~/.nodenv

cd ~/.nodenv && src/configure && make -C src

.bashrcの末尾に、nodenvのPATHと初期化を追記します。

ついでに、メモリの少ない環境でyarn buildがHeap不足にならないように、NODE_OPTIONSも指定しておきます。

nano ~/.bashrc

下記の内容を~/.bashrcの末尾に追加します。

export PATH="$HOME/.nodenv/bin:$PATH"

eval "$(nodenv init -)"


export NODE_OPTIONS=--max_old_space_size=4096

一旦シェルを抜けて、もう一度入り直します。

logout

sudo -iu misskey

node installできるようにプラグインを追加します。

mkdir -p "$(nodenv root)"/plugins

git clone https://github.com/nodenv/node-build.git "$(nodenv root)"/plugins/node-build

一緒にyarnをインストールできるようにするプラグインを追加します。

git clone https://github.com/pine/nodenv-yarn-install.git "$(nodenv root)/plugins/nodenv-yarn-install"

nodenvをupdateするためのプラグインを追加します。

git clone https://github.com/nodenv/nodenv-update.git "$(nodenv root)"/plugins/nodenv-update

misskeyディレクトリに入って、.node-versionファイルを確認。 misskeyが想定しているnodeのバージョンになります。

cd misskey

cat .node-version

上記コマンドでバージョンを確認したところ・・・

f:id:crim0404:20211024203105p:plain

v16.6.2と出たので、nodeenvで16.6.2をインストールします。

nodenv install 16.6.2

無事にインストールされたか、nodeとyarnのそれぞれのバージョンを確認します。

node -v

yarn -v

nodeは上記で指定したバージョンが表示されたのですが、

yarnのバージョンが1.22.17で、yarnをインストールした時に現在のバージョンは8.1.1といったようなメッセージが出ていたのが気掛かりです。

以下の画像の通りにバージョンアップするべきか・・・。

とりあえずバージョンアップせずに進めてみます。

f:id:crim0404:20211024204241p:plain

次にデータベース初期化とビルドを行います。

最新のリリースをチェックアウトします。

git checkout master

yarnで依存関係をインストールします。

package.jsonに記載されている、Misskeyが利用しているパッケージ(ソフトウェア部品)のインストールです。

Misskeyがバージョンアップした場合は、package.jsonの内容も変更されることがありますので、必ず実行します。

変更されたものだけを検出して高速に実行されます。

yarn install

インストールは正常に終了したようですが、以下のようなメッセージが表示されたのが気掛かりです。

f:id:crim0404:20211024211420p:plain

設定ファイルのひな形をコピーして、編集します。

cp .config/example.yml .config/default.yml

nano .config/default.yml

編集するのは以下の部分です。

url: (Misskeyを設置するアドレス)

port: 3000

db:

  user: (PostgreSQLのユーザ名)

  pass: (PostgreSQLのパスワード)

f:id:crim0404:20211024212803p:plain

ここのhttps以降をMisskeyを設置するアドレスに変更します。

f:id:crim0404:20211024213634p:plain

portはこのように#を外したのですが、合っているのか分かりませんがこのまま進めてみます。

それでは、Misskeyをビルドしてみます。

NODE_ENV=production yarn build

ビルド中にいくつかのエラーメッセージと共に以下のようなメッセージが表示されました。

f:id:crim0404:20211024215004p:plain

ビルドが完了したら、データベースを初期化します。

あらかじめ空のデータベースを作ってありますので、ここで行うのは、テーブルやインデックスの作成です。

yarn run init

ここまでの手順が完了すると、Misskeyを起動する準備が整います。

今回はここまでにします。

次回はsystemdの設定からやっていきます。

おひとり様Misskey鯖構築日記《5》

今回ものえるさんの記事を参考に進めていきます。

blog.noellabo.jp

今回はドメインの設定からやっていきます。

Cloudflareでホストの追加設定をやっていきます。

f:id:crim0404:20211002210359p:plain

レコードを追加から、タイプAとタイプAAAAのレコードを作ります。

同時にオブジェクトストレージのタイプAとタイプAAAAのレコードも作ります。

オブジェクトストレージもMisskeyサーバと同じIPアドレスで良さそうです。

ここまで進めていった所でCloudflareのドメイン設定のレジストラがunknownになっていたので、色々と調べた結果、一度サイトを削除しドメインの登録、プランの設定からやり直すことにしました。

恐らく、ラズパイでCloudflareを使用していたので、DNS設定で新しいIPアドレスを入力した時点でロストしてしまったのではないかと考えます。

二度手間になってしまいましたが、この時点で気付けたのは後々効いてくると思います。

改めてAとAAAAのレコードを作ります。

利用可能になるまで最大72時間かかるとのことなので、Cloudflareに関してはここまでで一旦止めておきます。

今回は短いですがここまでにします。

次回からいよいよMisskeyのインストールをやっていきます。

《追記》

CloudflareのDNS設定のレコード追加で、A,ドメイン名,IPv4とAAAA,ドメイン名,IPv6を追加したら522エラーが表示される所まで出来ました。

f:id:crim0404:20211003211415p:plain

おひとり様Misskey鯖構築日記《4》

今回も引き続きのえるさんの記事を参考に進めていきます。

blog.noellabo.jp

今回は「メモリの少ない環境向けの追加設定」という項目からやっていきます。

Misskeyのビルドには2GB以上のメモリが必要とのことです。

私のVultrの環境も2GBなのでギリギリです。

まずはfreeコマンドで現状確認。

f:id:crim0404:20210926174655p:plain

freeが413MBなので足りないですね。

ここに2GB追加します。

sudo fallocate -l 2G /swapfile
sudo chmod 600 /swapfile
sudo mkswap /swapfile
sudo swapon /swapfile
sudo nano /etc/fstab

/etc/fstabに下記の内容を追記。

/swapfile none swap sw 0 0

そしてfreeコマンドで確認。

f:id:crim0404:20210926181452p:plain

これでfreeが2.49GBになったので大丈夫かと思います。

さて、次の項目「VultrのIPv6アドレスを有効にする」をやっていきます。

sudo nano /etc/netplan/10-ens3.yaml

10-ens3.yamlの中に以下を記載します。

network:
  version: 2
  renderer: networkd
  ethernets:
    ens3:
      dhcp4: yes
      addresses:
        - 'Vultrのダッシュボードに記載されているIPv6アドレス/64'
sudo netplan apply
ip a

上記コマンドでIPv6アドレスが割り当てられていることを確認。

もう一枚コマンドプロンプトを開いて作業PCから設定したIPv6アドレス宛にpingを送ってみたところ応答があったのでこれで良いのかなと。

ただ、上記で設定したのはens3というインターフェイスのはずなのに、ip aで確認した時にenp1s0というインターフェイス名が表示されていたのが気掛かり。

分からないけどこのまま進めてみます。

今回の作業はここまでにします。

おひとり様Misskey鯖構築日記《3》

今回はssh接続の準備からやっていきます。

今回ものえるさんの記事を参考に進めていきます。

blog.noellabo.jp

まずは作業マシン(自宅PC)での設定から。

ssh-keygen -t ed25519

上記コマンドで秘密鍵

~/.ssh/id_ed25519

公開鍵が

~/.ssh/id_ed25519.pub

以上に生成されました。

次に.ssh/configをメモ帳で作成します。

Host (このサーバに接続する際の任意の名前)
        User (サーバ上に作成する作業ユーザー名)
        Port 22
        Hostname (サーバのIPv4アドレス)
        IdentityFile (秘密鍵のファイルパス)

メモ帳で作成すると.txtという拡張子がついてしまうので、名前の変更で.txtを削除しておきます。

sshでサーバに接続。

初回はrootで接続します。

ssh root@(このサーバに接続する際の任意の名前) -p 22

初めて接続するサーバなので本当にここに繋いでいいのか?という内容のメッセージが表示されるのでyesと入力します。

rootのパスワードを訊かれたら、Vultrのサイトでコピーしたrootのパスワードをコピペします。

作業用ユーザ作成

rootのままで作業するのはセキュリティ上好ましくないので、作業用ユーザを作成します。

先ほど作ったconfigに入力した作業用ユーザ名と同じにします。

adduser (作業用ユーザ名)

パスワードを訊かれるので設定します。

その他の項目はデフォルトのままでも良いのでenterで飛ばします。

次に作業ユーザーを、sudoを許可するグループに追加します。

usermod -aG sudo (作業ユーザ名)

作業ユーザーに切り替えて、sshを鍵で接続できるように設定します。

sudo -iu (作業ユーザ名)
mkdir .ssh
chmod 700 .ssh

.sshというディレクトリを作成したら、公開鍵をこのディレクトリ内に入れるのですが、のえるさんの記事ではwindows上で公開鍵をcatコマンドで参照して、.sshディレクトリにファイルを作って公開鍵をコピペするという方法が書かれていましたが、おそらくwindows上でcatコマンドが使えているのはbashを使えるように予め設定していたのだと思います。

この段階でbashを使えるようにしてもいいのですが、再起動が必要になり手間なので別の手段でwindows上にある公開鍵をサーバに送ることにしました。

まず作業PC(Windows)のコマンドプロンプトで公開鍵のあるディレクトリに移動します。

cd .ssh

そして、scpというコマンドを使って公開鍵ファイルを先ほど作成したサーバ上の.sshディレクトリに転送します。

scp -P 22 id_ed25519.pub (作業ユーザ名)@(サーバのIPアドレス):/home/(作業ユーザ名)/.ssh

これで転送ができました。scp -P ここのオプションは大文字のPにしないとエラーになるので注意してください。

そして、再びrootでサーバにログインして作業ユーザに切り替えます。

cd .sshと入力して、.sshディレクトリに移動します。

ここでlsコマンドを叩いて、.ssh内に公開鍵ファイルが転送されて来ていることを確認します。

公開鍵として使用するには「authorized_keys」というファイル名にしないといけないので、公開鍵ファイルの名前を書き替えます。

mv id_ed25519.pub authorized_keys

上記のコマンドを入力してから改めてlsコマンドを叩いてみて、名前が変わっていたらOKです。

パーミッションを変更します。

chmod 600 authorized_keys

ここで再びのえるさんの記事を参考にしながら進めていきます。

sshdの設定を変更します。

sudo nano /etc/ssh/sshd_config

ルートのログインを禁止 PermitRootLogin no

パスワードログインを禁止 PasswordAuthentication no

また、sshのポート番号を変更したい場合は任意の番号に設定します。

以上を書き終えたら書き込んで終了にします。

ここでsshdのテストをします。 間違ったままだとsshで接続出来なくなってしまうので慎重に進めましょう。

sudo sshd -t

問題なければsshdを再起動します。

sudo systemctl restart sshd

次にファイアウォールの設定をして特定のポートだけを許可します。

sudo ufw allow 22/tcp

sudo ufw enable

ここまで正しく設定出来ていれば公開鍵と秘密鍵を使ってsshでの接続が出来る筈です。

新規にコマンドプロンプトをもう一枚開いてssh接続が出来るか確認します。

ssh (任意のサーバ名)

パスフレーズを設定している場合は訊かれます。

問題なければ次の作業に移ります。

システムのアップデートをかけます。

sudo apt update

sudo apt upgrade

アップデートが完了したら今回の作業は一旦終了にします。

次回はメモリの少ない環境向けの追加設定からやっていきます。