使用 Docker 部署
Hollo 在 GitHub Packages 上提供了官方的 Docker 映像檔。您可以使用這些映像檔在您的伺服器或本機上部署 Hollo:
docker pull ghcr.io/fedify-dev/hollo:latest要執行 Hollo,您需要設定一個 PostgreSQL 資料庫和一個用於媒體儲存的 S3 相容物件儲存。您可以使用 PostgreSQL 的官方 Docker 映像檔,也可以使用 RustFS 作為 S3 相容物件儲存。或者,您也可以使用其他託管服務,如 AWS 的 RDS、ElastiCache 和 S3。
要將 Hollo 連接到這些服務,您需要透過 docker run 指令的 -e/--env 選項或 --env-file 選項 設定環境變數。要查看 Hollo 支援的環境變數,請參閱 環境變數 章節。
Docker Compose
Section titled “Docker Compose”要連接這些服務,您可以使用 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 -d從 MinIO 遷移
Section titled “從 MinIO 遷移”Hollo 0.10.0 之前的 Compose 檔案將媒體儲存在 MinIO 卷宗中。RustFS 無法直接使用該卷宗,因此必須先透過 S3 API 複製物件,再啟動新的 Compose 設定。
[!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.yaml若您修改過 compose.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 卷宗。