@noellaboの技術ブログ

VPSを準備する(一例)

Vultrで、Ubuntu 19.04 のVPSを作ります。

IPアドレスが108.160.142.161、rootのパスワードが6eK$!97j(X2GyhQ)のようなので、sshで繋いで設定しますよ。

ssh root@108.160.142.161  

作業用のユーザーつくります。

adduser noel  

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

usermod -aG sudo noel  

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

sudo -iu noel  
mkdir .ssh  
chmod 700 .ssh  
cd .ssh  
touch authorized_keys  
chmod 600 authorized_keys  
nano authorized_keys  

authorized_keysに、あらかじめ手元で作ってある公開鍵をコピペします。

ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIEf1ynDv8fgMhqxt5szsMI1MntbZVxefa4z53Fw3Xgk3 noel@macbook-pro.local  

sshdの設定を変更

sudo nano /etc/ssh/sshd_config  
  • ポートを変更するならこれ Port 22
  • ルートのログインを禁止 PermitRootLogin no
  • パスワードログインを禁止 PasswordAuthentication no

最後にテスト

sudo sshd -t  

sshdを再起動

sudo systemctl restart sshd  

ufwにssh接続だけを許可して、有効化

sudo ufw allow 22/tcp  
sudo ufw enable  

ログアウトせずに、もう一つターミナル開いて、ssh接続できることを確認します。

アップデートかけときます。

sudo apt update  
sudo apt upgrade  

メモリの少ない環境向け

swapを追加します。ここでは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  

Misskeyをセットアップ

公式のドキュメントは、これをみてください。
https://github.com/syuilo/misskey/blob/develop/docs/setup.ja.md

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

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

PostgreSQLの設定

PostgreSQLにmisskeyというユーザー(ROLE)と、misskeyデータベースを作っておきます。

sudo -u postgres psql  
CREATE ROLE misskey LOGIN CREATEDB PASSWORD 'C&U#eb2CMkDiEivD$C9U';  
CREATE DATABASE misskey OWNER misskey;  

Misskeyのインストール

ドキュメントに従って、misskeyユーザーを作って、リポジトリをcloneするところまでやります。

sudo adduser --disabled-password --disabled-login misskey  
sudo -iu misskey  
git clone -b master git://github.com/syuilo/misskey.git  

nodejsとyarnをnodenvでインストールする

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  
export PATH="$HOME/.nodenv/bin:$PATH"  
eval "$(nodenv init -)"  

export NODE_OPTIONS=--max_old_space_size=4096  

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

^D  
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"  

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

cat .node-version   

ここではv12.6.0となりました。nodenvで、12.6.0をインストールします。

nodenv install 12.6.0  

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

node -v  
yarn -v  

Misskeyのインストールの続き(データベース初期化とビルド)

最新のリリースをチェックアウトして、

git checkout master  

依存関係をインストール

yarn install  

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

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

だいたいいじるのはこのへん。

url: https://misskey.example.com/  
port: 3000  
db:  
  user: misskey  
  pass: C&U#eb2CMkDiEivD$C9U  

Misskeyをビルド

NODE_ENV=production yarn build  

データベースを初期化

yarn run init  

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  
sudo systemctl daemon-reload  
sudo systemctl enable misskey  
sudo systemctl start misskey  

nginx(リバースプロキシ)

ufwでhttps接続を許可する

sudo ufw allow 443/tcp  

なお、certbotはDNS-01であればポートを空ける必要はありませんが、webrootやstandaloneで80を開けておく必要がある場合は80も設定してください。

証明書

certbotで取得します。

私が書いた記事の中では、これの後半が役に立つと思います。
https://noellabo.qrunch.io/entries/54MFy6cuWRsKUhQg

ここではmisskey.example.comをcloudflareのDNSで管理している前提で、DNS認証で証明書を取得する手順を示します。

sudo apt install certbot python3-certbot-dns-cloudflare  
cd /etc/letsencrypt  
nano .cloudflare_credentials  
dns_cloudflare_email = noel@example.com  
dns_cloudflare_api_key = 7acb35a7f2d629a63b10e0b2ba5  
chmod 600 .cloudflare_credentials  
sudo certbot certonly --dns-cloudflare --dns-cloudflare-credentials .cloudflare_credentials -d misskey.example.com -m noel@example.com --manual-public-ip-logging-ok --agree-tos --no-eff-email  

sudo nano renewal-hooks/deploy/reload.sh  
#!/bin/bash  
systemctl reload nginx  
sudo chmod +x renewal-hooks/deploy/reload.sh  

nginxの設定

nginxの方は、misskeyの公式にあるサンプルを元に、ドメインを書き換えて、
https://github.com/syuilo/misskey/blob/develop/docs/examples/misskey.nginx

  1. Replace example.tld to your domain
  2. Copy to /etc/nginx/sites-available/ and then symlink from /etc/nginx/sites-ebabled/ or copy to /etc/nginx/conf.d/

ということですから、

sudo cp /home/misskey/misskey/docs/examples/misskey.nginx /etc/nginx/sites-available/misskey.example.com  
cd /etc/nginx/sites-enabled  
sudo ln -s ../sites-available/misskey.example.com  

という感じで設定ファイルをコピーして、シンボリックリンクを配置します。

順序が逆ですが、ファイルを編集して、ドメインと証明書のパスを設定します。

sudo nano /etc/nginx/sites-available/misskey.example.com  

設定ファイルを書き換えたら、必ずチェックします。エラーが出たら、OKでるまで直して再実行します。

sudo nginx -t  

nginxをリロードすれば、nginx経由でmisskeyに繋がるようになります。

sudo systemctl reload nginx  

このログへのコメント

コメントはありません