Ⓜ️

GCE x Misskey by Ubuntu

2023/07/28に公開

自身の設定メモです。

env

GCEマシンタイプ: e2-medium (e2-smallではメモリ不足でMisskeyのビルドが完了しなかった)
Ubuntu: Ubuntu 20.04.6 LTS
Misskey: 13.14.2
PostgreSQL: 15.3 (Ubuntu 15.3-1.pgdg20.04+1)
Redis server: 7.0.12

参照link

Misskeyについて

https://misskey-hub.net/docs/misskey.html

以下の記事を参考にしました

https://misskey-hub.net/docs/install/ubuntu-manual.html

バックアップについて

https://zenn.dev/ganariya/articles/gcp-misskey-backup

手順

アップデート

$ sudo apt update; sudo apt full-upgrade -y; sudo reboot

ユーザーの作成

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

Node.js

sudo apt install -y curl

curl -sL https://deb.nodesource.com/setup_20.x | sudo -E bash -

sudo apt install -y nodejs

# Node.jsがインストールされたので、バージョンを確認する。
node -v

# corepack enable
sudo corepack enable

PostgreSQL

sudo apt install -y postgresql-common

sudo sh /usr/share/postgresql-common/pgdg/apt.postgresql.org.sh -i -v 15;

# systemctlでデーモンの状態を確認。
systemctl status postgresql

ユーザーとデータベースの作成の場合

sudo -u postgres psql
CREATE ROLE misskey LOGIN CREATEDB PASSWORD 'fuga';
CREATE DATABASE mk1 OWNER misskey;

dumpファイルからリストアする場合

何らかの方法でダンプファイルをアップロードする

$ gzip -c -d dump.gz > dump.sql
$ sudo -u postgres psql -f dump.sql

Redis

$ sudo apt install -y curl ca-certificates gnupg2 lsb-release

$ curl -fsSL https://packages.redis.io/gpg | sudo gpg --dearmor -o /usr/share/keyrings/redis-archive-keyring.gpg

$ sudo apt update

$ sudo apt install -y redis

$ systemctl status redis-server

nginx

$ sudo apt install ubuntu-keyring

$ curl https://nginx.org/keys/nginx_signing.key | gpg --dearmor | sudo tee /usr/share/keyrings/nginx-archive-keyring.gpg >/dev/null

$ gpg --dry-run --quiet --no-keyring --import --import-options import-show /usr/share/keyrings/nginx-archive-keyring.gpg

出力に 573BFD6B3D8FBC641079A6ABABF5BD827BD9BF62 を確認する

$ echo "deb [signed-by=/usr/share/keyrings/nginx-archive-keyring.gpg] http://nginx.org/packages/ubuntu `lsb_release -cs` nginx" | sudo tee /etc/apt/sources.list.d/nginx.list

$ echo -e "Package: *\nPin: origin nginx.org\nPin: release o=nginx\nPin-Priority: 900\n" | sudo tee /etc/apt/preferences.d/99nginx

$ sudo apt update

$ systemctl status nginx

activeならOK。
そうでなければ、次のコマンドを実行。

$ sudo systemctl start nginx

$ sudo systemctl enable nginx

$ systemctl status nginx
$ curl http://localhost

<title>Welcome to nginx!</title>と表示されればOK

Other

$ sudo apt update

$ sudo apt install -y git build-essential

Firewall

$ sudo ufw enable

$ sudo ufw default deny

$ sudo ufw limit 22

$ sudo ufw allow 80

$ sudo ufw allow 443
sudo ufw status

systemctlで永続化

$ sudo systemctl enable ufw

CloudFlare

sudo apt install -y certbot python3-certbot-dns-cloudflare
$ sudo mkdir /etc/cloudflare

$ sudo vi /etc/cloudflare/cloudflare.ini

cloudflare.iniを以下のように編集

dns_cloudflare_email = example@mail.com
dns_cloudflare_api_key = xxxxxxxxxxxxxxxxxxxxxxxxxx
$ sudo chmod 600 /etc/cloudflare/cloudflare.ini
$ sudo certbot certonly --dns-cloudflare --dns-cloudflare-credentials /etc/cloudflare/cloudflare.ini --dns-cloudflare-propagation-seconds 60 --server https://acme-v02.api.letsencrypt.org/directory -d example.tld -d *.example.tld

*Congratulations!*と表示されたらOK
生成された.pemファイルのパスは今後使うので記録する

Misskey install

$ sudo su - misskey
$ git clone -b master https://github.com/misskey-dev/misskey.git --recurse-submodules

$ cd misskey

$ git checkout master

必要なnpmパッケージをインストール。

$ NODE_ENV=production pnpm install --frozen-lockfile

Misskey setting

default.yml

$ vi .config/default.yml

以下の修正、適宜変更する

# ● Misskeyを公開するURL
url: https://example.tld/
# ポートを3000とする。
port: 3000

# ● PostgreSQLの設定。
db:
  host: localhost
  port: 5432
  db  : mk1 # 〇 PostgreSQLのデータベース名
  user: misskey # 〇 PostgreSQLのユーザー名
  pass: hoge # ● PostgreSQLのパスワード

#   Redisの設定。
redis:
  host: localhost
  port: 6379

#   IDタイプの設定。
id: 'aid'

#   syslog
syslog:
  host: localhost
  port: 514

nginx setting

root権限にて

$ exit
$ sudo vi /etc/nginx/conf.d/misskey.conf

Misskey Hubの設定例をnanoへコピー&ペーストし、次の部分を自分のものに書き換える。

  • 12行目: ドメイン名
    • server{server_name}
  • 24行目: ドメイン名
    • server{server_name}
  • 31-32行目: 証明書へのパスをCertbotで取得したものに (基本的にexample.tldを置き換えるだけでOK)
  • 55行目 (If it's behind another reverse proxy or CDN, remove the following.) から4行を削除

設定ファイルがきちんと機能するか確認。

$ sudo nginx -t
$ sudo systemctl restart nginx
$ sudo systemctl status nginx

Misskey build

misskeyユーザーにログイン

$ sudo su - misskey

ビルド

$ cd misskey
$ NODE_ENV=production pnpm run build

データベースの初期化
※ dumpファイルからリストアした場合でもスキップしない

$ pnpm run init

Misskey run

$ NODE_ENV=production pnpm run start

PostgresのRoleのパスワードの変更

変更したい場合

ALTER ROLE misskey WITH PASSWORD 'hoge';

Misskeyのデーモンを作成

Ctrl+Cでプロセスをキルし、Misskeyをデーモンで起動する設定をする

ルート権限で行う

$ exit
sudo vi /etc/systemd/system/misskey.service

次の内容を貼り付け、保存する。

[Unit]
Description=Misskey daemon

[Service]
Type=simple
User=misskey
ExecStart=/usr/bin/npm start
WorkingDirectory=/home/misskey/misskey
Environment="NODE_ENV=production"
TimeoutSec=60
StandardOutput=journal
StandardError=journal
SyslogIdentifier=misskey
Restart=always

[Install]
WantedBy=multi-user.target
$ sudo systemctl daemon-reload

$ sudo systemctl enable misskey

$ sudo systemctl start misskey

Discussion