HolloをRailwayにデプロイする(2025年1月時点)

mastodon.socialに人が集中しすぎて挙動に不満が出てきたのでおひとり様連合マイクロブログの「Hollo」に引っ越しをしてみたのでそれにまつわる作業ログを残す。参考にしたい人向け。

とりま実際にデプロイして挙動を見てみたいということで一番簡易的なRailwayへのデプロイという手段を選択した。

「アップデート方法」に順じた流れでやっていく

Railwayへのアカウントを作成する

「Deploy on Railway」よりデプロイする

Deploy Nowより画面遷移する。

Hollo側で環境変数が必要な個所があるため追加していく

自分はAmazon Route 53でドメイン管理をしておりhollo.yamanoku.net
として扱おうと思っていた。
リソース管理も同じサービスのが都合がよいのでAmazon S3を活用することにした。

動かすために必要となる環境変数を載せます
- S3_BUCKET
- S3_ENDPOINT_URL
- ASSET_URL_BASE
- AWS_ACCESS_KEY_ID
- AWS_SECRET_ACCESS_KEY
- S3_REGION
以下から何の環境変数なのか、何の値が入るのかの説明を載せていきます。

S3_BUCKET
S3互換オブジェクトストレージのバケット名の環境変数。
Amazon S3でバケットを作成するときバケット名を指定するのでそれが値になります。
私はhollo-backets
というS3バケットを作成しました。

S3_ENDPOINT_URL
S3互換オブジェクトストレージのエンドポイントURL。
https://s3.{resion}.amazonaws.com
という形で resion
に作成時のリージョン名が入ります。
私はアジアパシフィック(東京)のため https://s3.ap-northeast-1.amazonaws.com
になります。

ASSET_URL_BASE
メディアファイルを提供するためのURL。
S3_BUCKET
とS3_ENDPOINT_URL
を合わせた形になります。
私は https://hollo-backets.s3.ap-northeast-1.amazonaws.com
という形になります。

AWS_ACCESS_KEY_ID, AWS_SECRET_ACCESS_KEY
S3へファイルをアップロード、更新、削除するために必要となるアクセスキーとシークレットキー。
まずはIAMでユーザーを作成します。ユーザー名を入力して作成しておきます。
作成したユーザーにS3への書き込みができるIAMポリシーを付与してあげる必要があります。
ユーザー名から詳細ページに移動し、許可タブ内に「許可を追加する」より「インラインポリシー」を作成します。
ポリシーエディタを「JSON」にして以下を登録します。
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "VisualEditor0",
"Effect": "Allow",
"Action": [
"s3:PutObject",
"s3:GetObject",
"s3:ListBucket",
"s3:DeleteObject",
],
"Resource": [
"arn:aws:s3:::hollo-backets",
"arn:aws:s3:::hollo-backets/*"
]
}
]
}
Resourceについては私のバケット名となるので、実際に作成した自身のS3バケット ARNに変更してください。
次にユーザー詳細画面より「アクセスキーを作成」に移動します。
今回は「AWS の外部で実行されるアプリケーション」を選択します。
次の「説明タグ値」はわかりやすい名前にしておくか、未入力のまま進めます。
最後にアクセスキーとシークレットキーが表示されるのでそれをそれぞれの環境変数に設定しておきます。

S3_REGION
S3互換オブジェクトストレージのリージョン名。
この環境変数は入力必須になっていませんが、デフォルトでauto
となっているため、リージョン名を自分のものにする必要があります。この環境変数が設定できていないとAmazon S3への書き込みが失敗してしまう可能性があります(私の場合はそのようなエラーがRailwayのログより出ており気づきました)。
code: 'E_CANNOT_WRITE_FILE',
[cause]: AuthorizationHeaderMalformed: The authorization header is malformed; the region 'auto' is wrong; expecting 'ap-northeast-1'
私はアジアパシフィック(東京)のため ap-northeast-1
を設定しました。

環境変数の設定が完了したらデプロイします。


デプロイが問題がなければ /setup
にアクセスしてログイン情報を登録、アカウントの設定をします。
ドメインとユーザーアカウントIDを合わせたものがアカウント固有のURLとなります。
私の場合は https://hollo.yamanoku.net/@yamanoku
となります。