Misskeyのオブジェクトストレージ環境をMinIOで構築する

わかりにくいコケ方をしたので備忘録として

構成

前提

  • リバースプロキシを経由してMisskeyインスタンスへアクセスすることが可能
  • サーバがamd64環境で動作している(arm64では未検証)

NW

172.16.5.0/24

リバースプロキシ

OS: Ubuntu 22.04 LTS
HTTPServ: apache2
IP: 172.16.5.2

Misskeyサーバ

OS: Ubuntu 22.04 LTS
HTTPServ: Nginx
FQDN: mi.example.net
IP: 172.16.5.3

MinIO

OS: Ubuntu 22.04 LTS
FQDN: media.example.net
IP: 172.16.5.4
データ格納場所: /mnt/data/
Misskeyから見るURL: media.example.net/misskey/

MinIOのインストール

2023/06/26時点での手順です.

$ wget https://dl.min.io/server/minio/release/linux-amd64/archive/minio_20230619195250.0.0_amd64.deb -O minio.deb
$ sudo dpkg -i minio.deb

値の設定

$ sudo vim /etc/default/minio
MINIO_ROOT_USER="minio-admin"
MINIO_VOLUMES="/mnt/data"
MINIO_OPTS="-C /etc/minio --address :9000 --console-address :9001"
MINIO_ROOT_PASSWORD="miniopasswd"

systemdの設定作成

$ sudo vim /etc/systemd/system/multi-user.target.wants/minio.service
[Unit]
Description=MinIO
Documentation=https://docs.min.io
Wants=network-online.target
After=network-online.target
AssertFileIsExecutable=/usr/local/bin/minio

[Service]
Type=notify

WorkingDirectory=/usr/local

User=minio-user
Group=minio-user
ProtectProc=invisible

EnvironmentFile=-/etc/default/minio
ExecStartPre=/bin/bash -c "if [ -z \"${MINIO_VOLUMES}\" ]; then echo \"Variable MINIO_VOLUMES not set in /etc/default/minio\"; exit 1; fi"
ExecStart=/usr/local/bin/minio server $MINIO_OPTS $MINIO_VOLUMES

# Let systemd restart this service always
Restart=always

# Specifies the maximum file descriptor number that can be opened by this process
LimitNOFILE=1048576

# Specifies the maximum number of threads this process can create
TasksMax=infinity

# Disable timeout logic and wait until process is stopped
TimeoutStopSec=infinity
SendSIGKILL=no

[Install]
WantedBy=multi-user.target

# Built for ${project.name}-${project.version} (${project.name})

ユーザの作成

$ sudo useradd minio-user -s /sbin/nologin

データ格納場所の作成(あなたの環境に合わせて置き換えてください)

$ sudo mount /dev/sdxN /mnt/data/
$ sudo chown -R minio-user:minio-user /mnt/data
$ sudo chmod -R 600 /mnt/data

サービスの起動

$ sudo systemctl daemon-reload
$ sudo systemctl enable --now minio

これでWebからアクセスすることが可能です.
設定したディレクトリに対して,minio-userに書き込み権限がない場合,起動することができません.

MinIOの設定

http://172.16.5.4:9001

/etc/default/minioで定義したユーザ名とパスワードでログインします.

バケットの作成

Bucketsから,Create Bucketをクリックします.

公開先が https://media.example.net/misskey/ の場合,バケット名をmisskeyにします

バージョニングやクォータなどは不要なのでオフのままCreate Bucketをクリックします.

バケットの設定

Bucketsから作成したバケットをクリックし,ポリシなどを設定します.

Access Policyを設定します.

プルダウンメニューからCustomをクリックし,以下を入力します.

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Principal": {
                "AWS": [
                    "*"
                ]
            },
            "Action": [
                "s3:GetBucketLocation",
                "s3:GetObject"
            ],
            "Resource": [
                "arn:aws:s3:::*",
                "arn:aws:s3:::misskey/*"
            ]
        }
    ]
}

アクセスキーの生成

Misskeyからアクセスするためにアクセスキイーを生成します.
Access Keysから,Create access keyをクリックします

自動で生成されるので,特に改変せずにCreateします.

アクセスキーとアクセストークンが表示されます.
アクセストークンはこれ以降確認することができないため,忘れないでください.

生成したAccess Keyをクリックすると,ポリシの入力画面が出てきます

以下のようにポリシを入力します

{
 "Version": "2012-10-17",
 "Statement": [
  {
   "Effect": "Allow",
   "Action": [
    "s3:*"
   ],
   "Resource": [
    "arn:aws:s3:::*"
   ]
  },
  {
   "Effect": "Allow",
   "Action": [
    "s3:*"
   ],
   "Resource": [
    "arn:aws:s3:::misskey/*"
   ]
  }
 ]
}

入力後,Setをクリックし,反映します.

リバースプロキシの設定

この設定はあなたの環境に合わせて設定してください.
とりあえずアクセスできるだけの設定です.

$ sudo vim /etc/apache2/sites-available/minio.conf

<VirtualHost *:80>
        ServerName media.example.net
   ProxyPreserveHost On

        ProxyPass / http://172.16.5.4:9000/
        ServerAdmin webmaster@localhost
        #DocumentRoot /var/www/html/
CustomLog /var/log/apache2/media-access_log combined
ErrorLog /var/log/apache2/media-error_log

</VirtualHost>

設定の反映.

$ sudo a2ensite minio
$ sudo systemctl reload apache2

DNSサーバの設定

設定については割愛します.

注意事項

内部向けにプライベートIPアドレスを返却するDNSサーバを構築し,Misskeyインスタンスがこれを使用している場合,
カスタム絵文字やアイコンが表示できなくなることがあります.
この詳細は後々書きます.

Misskeyへの設定

コントロールパネル→オブジェクトストレージで設定します.

オブジェクトストレージを使用を有効にし,以下のように設定します

Base URL: ファイルへのURL. ここでは http://media.example.net/misskey
Bucket: バケット名. ここでは misskey
Prefix: バケットのルートに配置する場合は空で可
EndPoint: MinIOのIPアドレスを入力
Region: リージョン.存在しないが,us-east-1を設定
Access key: アクセスキーを入力
Secret key: アクセストークンを入力

保存をクリックし,設定を反映させます.

画像を投稿に添付し,正常に画像が表示されれば完了です.
画像へのリンクが次のように設定されます.
http://media.example.net/misskey//filename.jpg

トラブルシューティング

そのうち書きます

Related Posts:

Share

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です