Skip to content

Docker Aliyun Deployment

JAVA-Lw edited this page Oct 14, 2026 · 1 revision

Single file deployment from Aliyun mirrors

简体中文

Save the configuration below as compose.yaml and run docker compose up -d to start Web, API and PostgreSQL. All three image repositories are hosted in Aliyun's Guangzhou region; the server does not need a source checkout or a local build.

This recipe is for a fresh installation using Linux amd64 or arm64 containers. Install Docker and Docker Compose v2, or use Docker Desktop. Before adapting an existing deployment, back up its data and verify its PostgreSQL major version. Data from another PostgreSQL major version cannot be reused directly.

Images and versions

Service Default image
API and initialization crpi-hwltzgye5cs5bk40.cn-guangzhou.personal.cr.aliyuncs.com/taichuy/1flowbase-api-server:latest
Web crpi-hwltzgye5cs5bk40.cn-guangzhou.personal.cr.aliyuncs.com/taichuy/1flowbase-web:latest
PostgreSQL crpi-hwltzgye5cs5bk40.cn-guangzhou.personal.cr.aliyuncs.com/taichuy/postgres:18-alpine

API and Web also publish their own version tags, such as v0.5.6. PostgreSQL mirrors the official PostgreSQL 18 Alpine image and has specific minor-version tags, such as 18.6-alpine. Its default 18-alpine tag follows PostgreSQL 18 updates; it never uses a cross-major latest tag.

Startup checks remote image tags. The first launch generates a database password and encryption master key and creates an administrator account. Subsequent launches preserve existing configuration and data.

Save the configuration

Create an empty directory and save the complete block below as compose.yaml. Alternatively, download the raw configuration and rename it to compose.yaml.

name: 1flowbase
services:
  api:
    depends_on:
      db:
        condition: service_healthy
        required: true
      init:
        condition: service_completed_successfully
    entrypoint:
    - /usr/local/bin/1flowbase-api-start
    environment:
      API_ALLOWED_ORIGINS: ${API_ALLOWED_ORIGINS:-http://localhost:3100,http://127.0.0.1:3100}
      API_APPLICATION_TEMPLATE_AUTO_UPDATE: 'true'
      API_COOKIE_NAME: flowbase_console_session
      API_COOKIE_SECURE: ${API_COOKIE_SECURE:-false}
      API_DATABASE_POOL_MAX_CONNECTIONS: '5'
      API_ENV: production
      API_HOST_EXTENSION_DROPIN_ROOT: /app/api/plugins/host-extension/dropins
      API_OFFICIAL_EXTENSION_ARTIFACT_DOWNLOAD_TIMEOUT_SECONDS: '300'
      API_OFFICIAL_EXTENSION_CATALOG_REQUEST_TIMEOUT_SECONDS: '8'
      API_OFFICIAL_EXTENSION_SOURCE_CONNECT_TIMEOUT_SECONDS: '2'
      API_OFFICIAL_PLUGIN_GITHUB_PROXY_URL: ''
      API_OFFICIAL_PLUGIN_REGISTRY_URL: https://raw.githubusercontent.com/taichuy/1flowbase-official-plugins/main/official-registry.json
      API_OFFICIAL_PLUGIN_REPOSITORY: taichuy/1flowbase-official-plugins
      API_OFFICIAL_PLUGIN_SIGNATURE_REQUIRED: 'true'
      API_OFFICIAL_PLUGIN_TRUSTED_PUBLIC_KEYS_JSON: '[{"key_id":"1flowbase-signing-20261010-e7a2c47a","algorithm":"ed25519","public_key_pem":"-----BEGIN
        PUBLIC KEY-----\nMCowBQYDK2VwAyEAOMjRrNChRtu4aR+yVpFUwvOVxonoNizhWuQ4+DwJjrg=\n-----END
        PUBLIC KEY-----"}]'
      API_PLUGIN_ALLOW_UNVERIFIED_FILESYSTEM_DROPINS: 'false'
      API_PLUGIN_ALLOW_UPLOADED_HOST_EXTENSIONS: 'false'
      API_PLUGIN_SET: default
      API_PROVIDER_INSTALL_ROOT: /app/api/plugins
      API_SECRET_RESOLVER: env
      API_SERVER_ADDR: 0.0.0.0:7800
      API_SESSION_TTL_DAYS: '7'
      API_SYSTEM_BACKUP_PASSWORD: ''
      BOOTSTRAP_ROOT_ACCOUNT: ${BOOTSTRAP_ROOT_ACCOUNT:-root}
      BOOTSTRAP_ROOT_EMAIL: root@example.com
      BOOTSTRAP_ROOT_NAME: Root
      BOOTSTRAP_ROOT_NICKNAME: Root
      BOOTSTRAP_WORKSPACE_NAME: 1flowbase
      RUST_LOG: info
    expose:
    - '7800'
    image: ${FLOWBASE_REGISTRY:-crpi-hwltzgye5cs5bk40.cn-guangzhou.personal.cr.aliyuncs.com}/${FLOWBASE_API_REPOSITORY:-taichuy/1flowbase-api-server}:${FLOWBASE_API_SERVER_VERSION:-latest}
    pull_policy: always
    restart: unless-stopped
    volumes:
    - ./config:/config:ro
    - ./api/storage:/app/api/storage
    - ./api/plugins/packages:/app/api/plugins/packages
    - ./api/plugins/installed:/app/api/plugins/installed
    - ./api/plugins/host-extension/dropins:/app/api/plugins/host-extension/dropins
  db:
    command:
    - postgres
    - -c
    - max_connections=300
    environment:
      POSTGRES_DB: 1flowbase
      POSTGRES_INITDB_ARGS: --encoding=UTF8 --locale=C
      POSTGRES_USER: postgres
      POSTGRES_PASSWORD_FILE: /config/postgres-password
    healthcheck:
      test:
      - CMD-SHELL
      - pg_isready -U $${POSTGRES_USER:-postgres} -d $${POSTGRES_DB:-1flowbase}
      timeout: 3s
      interval: 5s
      retries: 20
    image: ${FLOWBASE_REGISTRY:-crpi-hwltzgye5cs5bk40.cn-guangzhou.personal.cr.aliyuncs.com}/${FLOWBASE_POSTGRES_REPOSITORY:-taichuy/postgres}:${FLOWBASE_POSTGRES_VERSION:-18-alpine}
    pull_policy: always
    restart: unless-stopped
    shm_size: '536870912'
    volumes:
    - ./postgres/data/pgdata:/var/lib/postgresql
    - ./config:/config:ro
    depends_on:
      init:
        condition: service_completed_successfully
  web:
    depends_on:
      api:
        condition: service_started
        required: true
    image: ${FLOWBASE_REGISTRY:-crpi-hwltzgye5cs5bk40.cn-guangzhou.personal.cr.aliyuncs.com}/${FLOWBASE_WEB_REPOSITORY:-taichuy/1flowbase-web}:${FLOWBASE_WEB_VERSION:-latest}
    pull_policy: always
    ports:
    - ${WEB_PORT:-3100}:80
    restart: unless-stopped
    volumes:
    - ./web/external-npm:/usr/share/nginx/html/external-npm:ro
  init:
    image: ${FLOWBASE_REGISTRY:-crpi-hwltzgye5cs5bk40.cn-guangzhou.personal.cr.aliyuncs.com}/${FLOWBASE_API_REPOSITORY:-taichuy/1flowbase-api-server}:${FLOWBASE_API_SERVER_VERSION:-latest}
    pull_policy: always
    user: 0:0
    entrypoint:
    - /usr/local/bin/1flowbase-initialize
    volumes:
    - ./config:/config
    - ./api/storage:/app/api/storage
    - ./api/plugins/packages:/app/api/plugins/packages
    - ./api/plugins/installed:/app/api/plugins/installed
    - ./api/plugins/host-extension/dropins:/app/api/plugins/host-extension/dropins
    - ./postgres/data/pgdata:/pgdata:ro
    restart: 'no'
    environment:
      BOOTSTRAP_ROOT_ACCOUNT: ${BOOTSTRAP_ROOT_ACCOUNT:-root}
      BOOTSTRAP_ROOT_PASSWORD: ${BOOTSTRAP_ROOT_PASSWORD:-change-me-root-password}
      POSTGRES_PASSWORD: ${POSTGRES_PASSWORD:-}
      API_PROVIDER_SECRET_MASTER_KEY: ${API_PROVIDER_SECRET_MASTER_KEY:-}

Start and sign in

Run from the directory containing compose.yaml:

docker compose up -d

If your machine provides the standalone Compose v2 binary, use docker-compose up -d.

Open http://localhost:3100, or http://SERVER_IP:3100 for a remote server. The initial account is root with password change-me-root-password; change it after signing in. You can set your own initial password in .env before the first launch.

Check service state and API health:

docker compose ps -a
curl http://localhost:3100/health

An init exit code of 0 means initialization completed successfully. The database should be healthy, and API and Web should stay running. The first launch downloads images and initializes the database.

Public repositories do not require a registry login. If you switch to a private repository, run docker login REGISTRY_HOST with an authorized account before deployment. Do not put registry passwords in Compose or public documentation.

Optional ports and version pins

A .env next to compose.yaml controls Compose interpolation. It is separate from the automatically generated config/.env.

For example, change an occupied port and pin the validated release:

WEB_PORT=33100
FLOWBASE_API_SERVER_VERSION=v0.5.6
FLOWBASE_WEB_VERSION=v0.5.6
FLOWBASE_POSTGRES_VERSION=18.6-alpine
BOOTSTRAP_ROOT_PASSWORD=replace-with-your-own-long-password

Remove the three version settings to use the default API/Web latest and PostgreSQL 18-alpine tags. Bootstrap settings apply only when configuration is first created; changing them later does not reset an existing administrator.

Repository locations are configurable too:

FLOWBASE_REGISTRY=crpi-hwltzgye5cs5bk40.cn-guangzhou.personal.cr.aliyuncs.com
FLOWBASE_API_REPOSITORY=taichuy/1flowbase-api-server
FLOWBASE_WEB_REPOSITORY=taichuy/1flowbase-web
FLOWBASE_POSTGRES_REPOSITORY=taichuy/postgres

Set API_COOKIE_SECURE=true for a browser-facing HTTPS endpoint, including HTTPS terminated by an outer reverse proxy. For cross-origin API access, set API_ALLOWED_ORIGINS to the actual site origin, such as http://SERVER_IP:3100.

Upgrade and preserve data

Read the release notes and back up the database, config, and api/storage. Then run from the original deployment directory:

docker compose up -d

The configuration declares pull_policy: always, so startup checks the default tags or your pinned versions. Generated configuration, database files and uploads persist in host directories. Stopping with docker compose down does not remove those directories.

Keep config/.env and config/postgres-password. Do not delete them to reset an administrator account. They contain database credentials and the encryption key and must be backed up with the database, without committing them to Git.

Database files live under postgres/data/pgdata, mounted at /var/lib/postgresql. A PostgreSQL major-version upgrade requires a separate migration; changing the image tag alone is insufficient.

Mirror maintenance

API and Web use separate repositories with independent version tags and latest; PostgreSQL uses taichuy/postgres. Copying preserves the two runtime architectures without recompiling the application or database. Personal ACR rejects some OCI build attestations, so those are omitted from the domestic index; runtime image digests are checked per architecture.

Container images download from domestic registries. Model providers, plugin installation and other external services still use the endpoints you configure later.

Clone this wiki locally