コンテンツにスキップ

Dockerでデプロイ

HolloはGitHub Packagesで公式のDockerイメージを提供しています。 そのイメージをローカルマシンでHolloをデプロイできます:

docker pull ghcr.io/fedify-dev/hollo:latest

Holloを実行するには、PostgreSQLのデータベースとメディアを保存するためのS3互換のオブジェクトストレージが必要です。 PostgreSQLの公式のDockerイメージとS3互換のオブジェクトストレージであるRustFSを使うことができます。 またはAWSのRDSElastiCacheS3などのマネージドサービスを使用することもできます。

Holloにこれらのサービスを組み合わせるには、 docker runコマンドの-e/--envオプションまたは--env-fileオプションを使用して 環境変数を設定する必要があります。 Holloがサポートする環境変数のリストは環境変数章で確認できます。

PostgreSQLとS3互換のオブジェクトストレージなどをHolloに接続してデプロイするために、 Docker Composeを使用することができます。以下はcompose.yamlファイルの例です:

compose.yaml
# If you are upgrading from the former MinIO-based Compose setup, migrate your
# media before starting this file. See the Docker installation guide:
# https://docs.hollo.social/install/docker/#migrating-from-minio
services:
hollo:
image: ghcr.io/fedify-dev/hollo:canary
ports:
- "3000:3000"
environment:
DATABASE_URL: "postgres://user:password@postgres:5432/database"
SECRET_KEY: "${SECRET_KEY}"
LOG_LEVEL: "${LOG_LEVEL}"
BEHIND_PROXY: "${BEHIND_PROXY}"
DRIVE_DISK: s3
STORAGE_URL_BASE: http://localhost:9000/hollo/
S3_REGION: us-east-1
S3_BUCKET: hollo
S3_ENDPOINT_URL: http://rustfs:9000
S3_FORCE_PATH_STYLE: "true"
AWS_ACCESS_KEY_ID: rustfsadmin
AWS_SECRET_ACCESS_KEY: rustfsadmin
# MEDIA_PROXY: off # or "proxy" / "cache" — see docs/install/env
# REMOTE_MEDIA_THUMBNAILS: "on" # set to "off" to skip local thumbnails
depends_on:
postgres:
condition: service_started
rustfs:
condition: service_healthy
create-bucket:
condition: service_completed_successfully
restart: unless-stopped
postgres:
image: postgres:17
environment:
POSTGRES_USER: user
POSTGRES_PASSWORD: password
POSTGRES_DB: database
volumes:
- postgres_data:/var/lib/postgresql/data
restart: unless-stopped
rustfs:
image: rustfs/rustfs:1.0.0-beta.8
ports:
- "9000:9000"
environment:
RUSTFS_ACCESS_KEY: rustfsadmin
RUSTFS_SECRET_KEY: rustfsadmin
volumes:
- rustfs_data:/data
command: ["/data"]
healthcheck:
test: ["CMD", "curl", "-fsS", "http://localhost:9000/health"]
interval: 2s
timeout: 2s
retries: 30
restart: unless-stopped
create-bucket:
image: public.ecr.aws/aws-cli/aws-cli:2.35.21
depends_on:
rustfs:
condition: service_healthy
environment:
AWS_ACCESS_KEY_ID: rustfsadmin
AWS_SECRET_ACCESS_KEY: rustfsadmin
AWS_DEFAULT_REGION: us-east-1
AWS_ENDPOINT_URL: http://rustfs:9000
BUCKET_POLICY: >-
{"Version":"2012-10-17","Statement":[{"Effect":"Allow","Principal":"*","Action":["s3:GetObject"],"Resource":["arn:aws:s3:::hollo/*"]}]}
entrypoint: ["/bin/sh", "-c"]
command:
- |
until aws s3api head-bucket --bucket hollo 2>/dev/null; do
aws s3api create-bucket --bucket hollo && break
sleep 1
done
aws s3api put-bucket-policy \
--bucket hollo \
--policy "$${BUCKET_POLICY}"
volumes:
postgres_data:
rustfs_data:

上記のファイルを作業ディレクトリにcompose.yamlとして保存し、次のコマンドを実行します:

docker compose up -d

Hollo 0.10.0より前のComposeファイルは、メディアをMinIOボリュームに保存していました。 RustFSはこのボリュームを直接使用できないため、新しいCompose構成を起動する前に S3 APIを通してオブジェクトをコピーする必要があります。

[!CAUTION] 既存のインストールと同じディレクトリで、同じComposeプロジェクト名を使用して 次のコマンドを実行してください。メディアを保存したボリュームが削除されるため、 docker compose down -vは実行しないでください。

現在のComposeファイルをバックアップし、ボリュームを残したまま既存のサービスを 停止します。次に新しいComposeファイルと移行用オーバーレイをダウンロードします:

Terminal window
cp compose.yaml compose.minio.yaml
docker compose down
curl -LO https://raw.githubusercontent.com/fedify-dev/hollo/main/compose.yaml
curl -LO https://raw.githubusercontent.com/fedify-dev/hollo/main/compose.migrate-minio.yaml

compose.yamlを変更して使用していた場合は、続行する前に compose.minio.yamlからその変更を再適用してください。新しいRustFSサービスと ストレージ設定は維持してください。

以前にCOMPOSE_PROJECT_NAMEまたはdocker compose -pを使用した場合は、 以下のすべてのコマンドで同じ値を使用してください。holloバケットをRustFSに コピーし、コピー元とコピー先を比較します:

Terminal window
docker compose -f compose.yaml -f compose.migrate-minio.yaml \
--profile migrate-minio run --rm migrate-minio
docker compose -f compose.yaml -f compose.migrate-minio.yaml \
--profile migrate-minio run --rm verify-minio-migration

検証コマンドで差異がないことを確認してください。ボリュームを削除せずに 一時的な移行サービスを停止し、通常どおりHolloを起動します:

Terminal window
docker compose -f compose.yaml -f compose.migrate-minio.yaml \
--profile migrate-minio down
docker compose up -d

既存のメディアURLを複数確認してください。移行したデータをバックアップするまで、 古いminio_dataボリュームは残しておいてください。