Activepieces
AI-first, no-code workflow automation platform
Alternative to: zapier, make, n8n, ifttt
Activepieces is an open source replacement for Zapier: a visual, no-code builder for automating workflows across 280+ integrations, with AI-first capabilities and MCP (Model Context Protocol) server support for connecting LLM agents to tools. The Community Edition is fully self-hostable, with an extensible TypeScript pieces framework for building custom integrations.
Activepieces Docker Compose example
Self-host Activepieces on your own server, homelab, or VPS starting from this Docker Compose example.
It runs Activepieces in Docker containers using the official ghcr.io/activepieces/activepieces:latest, ghcr.io/activepieces/activepieces:latest, pgvector/pgvector:pg16, redis:7 images, with persistent volumes and automatic restarts preconfigured.
Review the environment variables and adjust them to your setup, save the file as compose.yml (or docker-compose.yml), and start the stack with docker compose up -d.
services:
app:
image: ghcr.io/activepieces/activepieces:latest
restart: unless-stopped
depends_on:
- postgres
- redis
environment:
AP_CONTAINER_TYPE: "APP"
AP_ENGINE_EXECUTABLE_PATH: "dist/packages/engine/main.js"
AP_ENVIRONMENT: "prod"
# Public URL where Activepieces is served. Must match how the browser
# reaches it, e.g. https://automate.example.com.
AP_FRONTEND_URL: "http://localhost:8080"
# 32-character hex string used to encrypt stored connection credentials.
# Generate one with: openssl rand -hex 16
AP_ENCRYPTION_KEY: "0123456789abcdef0123456789abcdef"
# Secret used to sign authentication JWTs. Use a long random string.
AP_JWT_SECRET: "changeme-please-generate-a-long-random-secret"
# How flows run. UNSANDBOXED is the supported mode for the standard
# single-container image (no extra kernel privileges required).
AP_EXECUTION_MODE: "UNSANDBOXED"
# Set to true to send anonymous usage telemetry to Activepieces.
AP_TELEMETRY_ENABLED: "false"
AP_POSTGRES_DATABASE: "activepieces"
AP_POSTGRES_HOST: "postgres"
AP_POSTGRES_PORT: "5432"
AP_POSTGRES_USERNAME: "postgres"
AP_POSTGRES_PASSWORD: "activepieces"
AP_REDIS_HOST: "redis"
AP_REDIS_PORT: "6379"
worker:
image: ghcr.io/activepieces/activepieces:latest
restart: unless-stopped
depends_on:
- app
environment:
AP_CONTAINER_TYPE: "WORKER"
AP_ENGINE_EXECUTABLE_PATH: "dist/packages/engine/main.js"
AP_ENVIRONMENT: "prod"
# Public URL where Activepieces is served (must match the app service).
AP_FRONTEND_URL: "http://localhost:8080"
# 32-character hex encryption key (must match the app service).
AP_ENCRYPTION_KEY: "0123456789abcdef0123456789abcdef"
# JWT signing secret (must match the app service).
AP_JWT_SECRET: "changeme-please-generate-a-long-random-secret"
AP_EXECUTION_MODE: "UNSANDBOXED"
AP_TELEMETRY_ENABLED: "false"
AP_POSTGRES_DATABASE: "activepieces"
AP_POSTGRES_HOST: "postgres"
AP_POSTGRES_PORT: "5432"
AP_POSTGRES_USERNAME: "postgres"
AP_POSTGRES_PASSWORD: "activepieces"
AP_REDIS_HOST: "redis"
AP_REDIS_PORT: "6379"
postgres:
image: pgvector/pgvector:pg16
restart: unless-stopped
environment:
POSTGRES_DB: "activepieces"
POSTGRES_USER: "postgres"
POSTGRES_PASSWORD: "activepieces"
volumes:
- postgres_data:/var/lib/postgresql/data
redis:
image: redis:7
restart: unless-stopped
volumes:
- redis_data:/data
volumes:
postgres_data:
redis_data:
Values set to changeme are required — replace them with your own
values before starting Activepieces.
Prefer a managed setup? WinterFlow installs, configures, and updates Activepieces for you using this same Docker Compose configuration.