Files
geo/deploy/OFFLINE_PACKAGE.md
T
root 7d8e82c69f feat(ops): add object storage management and site-mapping CSV import/export
Ship the Ops backstage 对象存储 page (browse / upload / move / delete /
folder ops) backed by a new object-storage service + handler, with the
shared storage client extended with List/Stat/Copy/Usage/DownloadURL so
both MinIO and Aliyun providers cover the new surface. Add
ForcePathStyle to the object-storage config and treat r2/s3/custom_s3
as external providers so Cloudflare R2 and other S3-compatibles can
share the MinIO client path without spinning up the bundled MinIO.

Also add CSV import/export + template download to the site-domain
mappings page, raise gin MaxMultipartMemory to 8 MiB for the new
multipart endpoints, register Ops swagger routes, and extend the
descriptions-parity test to cover the ops router.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-26 01:19:01 +08:00

2.2 KiB

geo-rankly offline package

This directory is self-contained. It deploys containers, not host binaries.

On a Docker host with Docker Compose v2:

bash deploy.sh compose

compose is the default, so this is equivalent:

bash deploy.sh

deploy.sh compose loads images.tar, creates .env from .env.example when missing, and starts the stack with:

docker compose -f docker-compose.yaml -f docker-compose.offline.yaml --env-file .env up -d

Object storage is selected from config.yaml / config.yml, with config.local.yaml / config.local.yml as an override:

  • object_storage.provider: minio or mino deploys MinIO and minio-init
  • object_storage.provider: aliyun, aliyun_oss, aliyun-oss, oss, r2, cloudflare_r2, s3, aws_s3, or custom_s3 skips MinIO and uses the external object storage config from the same config files

For Cloudflare R2, set object_storage.region: auto and object_storage.force_path_style: true.

Runtime services connect to Postgres through PgBouncer in session pooling mode. The one-shot migrate job still connects directly to postgres and monitoring-postgres so DDL and seed work do not go through the pooler.

On a k3s host:

bash deploy.sh k3s

This imports images.tar into k3s containerd and applies k3s/ with Kustomize.

Default ports are NAS-friendly:

  • tenant web: 18080
  • tenant API: 18081
  • ops web: 18082
  • ops API: 18090
  • RabbitMQ management: 15673
  • MinIO console: 19001

Edit .env before rerunning bash deploy.sh if you need real API keys, stronger secrets, or different ports.

For multi-container / multi-Pod login password encryption, put the same RSA private key in every replica's config override:

  • tenant API: copy config.local.yaml.example to config.local.yaml, then fill auth.password_cipher.private_key_pem
  • ops API: copy ops-config.local.yaml.example to ops-config.local.yaml, then fill auth.password_cipher.private_key_pem

Generate keys with:

openssl genpkey -algorithm RSA -pkeyopt rsa_keygen_bits:2048 -out login-password-rsa.pem
openssl genpkey -algorithm RSA -pkeyopt rsa_keygen_bits:2048 -out ops-login-password-rsa.pem