Repository navigation
Docker Aliyun Deployment
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.
| 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.
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:-}Run from the directory containing compose.yaml:
docker compose up -dIf 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/healthAn 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.
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-passwordRemove 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/postgresSet 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.
Read the release notes and back up the database, config, and api/storage. Then run from the original deployment directory:
docker compose up -dThe 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.
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.