SpacebearでMastodonサーバーを立ててみた
日本時間 2022 11/11 16:00
ホスティングサービスを検討
Masto.hostとHostdonは新規受付クローズ。
OssroxはEU圏内とスイスのみ受付。
Weingartnaer ITはサイトが分かりにくいし、ドイツ語でしか書かれてない辺り、色々と面倒くさそう・・・。
spacebearが現在受け付けているようだ。
日本人が利用したと思われる情報は全く無かったが、やってみることにした。
その後、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インストール。
Mozcをインストールするとこまで進める。
sudo -e をやった時にデフォルトでVimが起動するようになっているのでnanoに変更する。
sudo apt install nano
上記コマンドでインストール。
sudo -e を入力した時に自動的にnanoが立ち上がるようにする。
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
以下、
上記サイトに戻って進める。
おひとり様Misskey鯖構築日記《7》
今回ものえるさんの記事を参考に進めていきます。
前回は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等のリバースプロキシが引き受けて、必要に応じてアプリケーションに転送する構成をとることが一般的です。
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キー)
上記から表示をクリックして取得しました。
重要情報なので、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》
今回ものえるさんの記事を参考に進めていきます。
今回は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ユーザ作成の一行目のコマンドを実行すると、
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
上記コマンドでバージョンを確認したところ・・・
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といったようなメッセージが出ていたのが気掛かりです。
以下の画像の通りにバージョンアップするべきか・・・。
とりあえずバージョンアップせずに進めてみます。
次にデータベース初期化とビルドを行います。
最新のリリースをチェックアウトします。
git checkout master
yarnで依存関係をインストールします。
package.jsonに記載されている、Misskeyが利用しているパッケージ(ソフトウェア部品)のインストールです。
Misskeyがバージョンアップした場合は、package.jsonの内容も変更されることがありますので、必ず実行します。
変更されたものだけを検出して高速に実行されます。
yarn install
インストールは正常に終了したようですが、以下のようなメッセージが表示されたのが気掛かりです。
設定ファイルのひな形をコピーして、編集します。
cp .config/example.yml .config/default.yml nano .config/default.yml
編集するのは以下の部分です。
url: (Misskeyを設置するアドレス) port: 3000 db: user: (PostgreSQLのユーザ名) pass: (PostgreSQLのパスワード)
ここのhttps以降をMisskeyを設置するアドレスに変更します。
portはこのように#を外したのですが、合っているのか分かりませんがこのまま進めてみます。
それでは、Misskeyをビルドしてみます。
NODE_ENV=production yarn build
ビルド中にいくつかのエラーメッセージと共に以下のようなメッセージが表示されました。
ビルドが完了したら、データベースを初期化します。
あらかじめ空のデータベースを作ってありますので、ここで行うのは、テーブルやインデックスの作成です。
yarn run init
ここまでの手順が完了すると、Misskeyを起動する準備が整います。
今回はここまでにします。
次回はsystemdの設定からやっていきます。
おひとり様Misskey鯖構築日記《5》
今回ものえるさんの記事を参考に進めていきます。
今回はドメインの設定からやっていきます。
Cloudflareでホストの追加設定をやっていきます。
レコードを追加から、タイプAとタイプAAAAのレコードを作ります。
同時にオブジェクトストレージのタイプAとタイプAAAAのレコードも作ります。
オブジェクトストレージもMisskeyサーバと同じIPアドレスで良さそうです。
ここまで進めていった所でCloudflareのドメイン設定のレジストラがunknownになっていたので、色々と調べた結果、一度サイトを削除しドメインの登録、プランの設定からやり直すことにしました。
恐らく、ラズパイでCloudflareを使用していたので、DNS設定で新しいIPアドレスを入力した時点でロストしてしまったのではないかと考えます。
二度手間になってしまいましたが、この時点で気付けたのは後々効いてくると思います。
改めてAとAAAAのレコードを作ります。
利用可能になるまで最大72時間かかるとのことなので、Cloudflareに関してはここまでで一旦止めておきます。
今回は短いですがここまでにします。
次回からいよいよMisskeyのインストールをやっていきます。
《追記》
CloudflareのDNS設定のレコード追加で、A,ドメイン名,IPv4とAAAA,ドメイン名,IPv6を追加したら522エラーが表示される所まで出来ました。
おひとり様Misskey鯖構築日記《4》
今回も引き続きのえるさんの記事を参考に進めていきます。
今回は「メモリの少ない環境向けの追加設定」という項目からやっていきます。
Misskeyのビルドには2GB以上のメモリが必要とのことです。
私のVultrの環境も2GBなのでギリギリです。
まずはfreeコマンドで現状確認。
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コマンドで確認。
これで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接続の準備からやっていきます。
今回ものえるさんの記事を参考に進めていきます。
まずは作業マシン(自宅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
アップデートが完了したら今回の作業は一旦終了にします。
次回はメモリの少ない環境向けの追加設定からやっていきます。