Dockerでデプロイ
HolloはGitHub Packagesで公式のDockerイメージを提供しています。 そのイメージをローカルマシンでHolloをデプロイできます:
docker pull ghcr.io/fedify-dev/hollo:latestHolloを実行するには、PostgreSQLのデータベースとメディアを保存するためのS3互換のオブジェクトストレージが必要です。 PostgreSQLの公式のDockerイメージとS3互換のオブジェクトストレージであるRustFSを使うことができます。 またはAWSのRDS、ElastiCache、S3などのマネージドサービスを使用することもできます。
Holloにこれらのサービスを組み合わせるには、
docker runコマンドの-e/--envオプションまたは--env-fileオプションを使用して
環境変数を設定する必要があります。
Holloがサポートする環境変数のリストは環境変数章で確認できます。
Docker Compose
Section titled “Docker Compose”PostgreSQLとS3互換のオブジェクトストレージなどをHolloに接続してデプロイするために、 Docker Composeを使用することができます。以下は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 -dMinIOからの移行
Section titled “MinIOからの移行”Hollo 0.10.0より前のComposeファイルは、メディアをMinIOボリュームに保存していました。 RustFSはこのボリュームを直接使用できないため、新しいCompose構成を起動する前に S3 APIを通してオブジェクトをコピーする必要があります。
[!CAUTION] 既存のインストールと同じディレクトリで、同じComposeプロジェクト名を使用して 次のコマンドを実行してください。メディアを保存したボリュームが削除されるため、
docker compose down -vは実行しないでください。
現在のComposeファイルをバックアップし、ボリュームを残したまま既存のサービスを 停止します。次に新しいComposeファイルと移行用オーバーレイをダウンロードします:
cp compose.yaml compose.minio.yamldocker compose downcurl -LO https://raw.githubusercontent.com/fedify-dev/hollo/main/compose.yamlcurl -LO https://raw.githubusercontent.com/fedify-dev/hollo/main/compose.migrate-minio.yamlcompose.yamlを変更して使用していた場合は、続行する前に compose.minio.yamlからその変更を再適用してください。新しいRustFSサービスと ストレージ設定は維持してください。
以前にCOMPOSE_PROJECT_NAMEまたはdocker compose -pを使用した場合は、
以下のすべてのコマンドで同じ値を使用してください。holloバケットをRustFSに
コピーし、コピー元とコピー先を比較します:
docker compose -f compose.yaml -f compose.migrate-minio.yaml \ --profile migrate-minio run --rm migrate-miniodocker compose -f compose.yaml -f compose.migrate-minio.yaml \ --profile migrate-minio run --rm verify-minio-migration検証コマンドで差異がないことを確認してください。ボリュームを削除せずに 一時的な移行サービスを停止し、通常どおりHolloを起動します:
docker compose -f compose.yaml -f compose.migrate-minio.yaml \ --profile migrate-minio downdocker compose up -d既存のメディアURLを複数確認してください。移行したデータをバックアップするまで、
古いminio_dataボリュームは残しておいてください。