Prerequisites

  • Linux VM with at least 4GB RAM
  • x86_64 CPU architecture
  • Docker and Docker Compose installed

Quick Start

1

Create Directory

mkdir /opt/speckle/
cd /opt/speckle/
2

Create Docker Compose File

Create a file named docker-compose.yml with the following content:

version: '2.3'
name: 'speckle-server'

services:
  postgres:
    image: 'postgres:16.9-alpine'
    restart: always
    environment:
      POSTGRES_DB: speckle
      POSTGRES_USER: speckle
      POSTGRES_PASSWORD: speckle
    volumes:
      - ./postgres-data:/var/lib/postgresql/data/

  redis:
    image: 'valkey/valkey:8-alpine'
    restart: always
    volumes:
      - ./redis-data:/data

  minio:
    image: 'minio/minio'
    command: server /data --console-address ":9001"
    restart: always
    volumes:
      - ./minio-data:/data

  speckle-ingress:
    image: speckle/speckle-docker-compose-ingress:2
    restart: always
    ports:
      - '0.0.0.0:80:8080'

  speckle-frontend-2:
    image: speckle/speckle-frontend-2:2
    restart: always
    environment:
      NUXT_PUBLIC_SERVER_NAME: 'local'
      NUXT_PUBLIC_API_ORIGIN: 'http://127.0.0.1'
      NUXT_PUBLIC_BACKEND_API_ORIGIN: 'http://speckle-server:3000'
      NUXT_PUBLIC_BASE_URL: 'http://127.0.0.1'
      NUXT_REDIS_URL: 'redis://redis'

  speckle-server:
    image: speckle/speckle-server:2
    restart: always
    depends_on:
      - postgres
      - redis
      - minio
    environment:
      CANONICAL_URL: 'http://127.0.0.1'
      SESSION_SECRET: 'your-secret-key-here'
      STRATEGY_LOCAL: 'true'
      POSTGRES_URL: 'postgres'
      POSTGRES_USER: 'speckle'
      POSTGRES_PASSWORD: 'speckle'
      POSTGRES_DB: 'speckle'
      REDIS_URL: 'redis://redis'
      S3_ENDPOINT: 'http://minio:9000'
      S3_ACCESS_KEY: 'minioadmin'
      S3_SECRET_KEY: 'minioadmin'
      S3_BUCKET: 'speckle-server'
      FRONTEND_ORIGIN: 'http://127.0.0.1'

  preview-service:
    image: speckle/speckle-preview-service:2
    restart: always
    depends_on:
      - speckle-server
    environment:
      PG_CONNECTION_STRING: 'postgres://speckle:speckle@postgres/speckle'

  webhook-service:
    image: speckle/speckle-webhook-service:2
    restart: always
    depends_on:
      - speckle-server
    environment:
      PG_CONNECTION_STRING: 'postgres://speckle:speckle@postgres/speckle'

  fileimport-service:
    image: speckle/speckle-fileimport-service:2
    restart: always
    depends_on:
      - speckle-server
    environment:
      SPECKLE_SERVER_URL: 'http://speckle-server:3000'
      PG_CONNECTION_STRING: 'postgres://speckle:speckle@postgres/speckle'
      S3_ENDPOINT: 'http://minio:9000'
      S3_ACCESS_KEY: 'minioadmin'
      S3_SECRET_KEY: 'minioadmin'
      S3_BUCKET: 'speckle-server'
3

Start the Server

docker compose up -d

Access Your Server

Once running, access your Speckle server at:

  • Frontend: http://your-server-ip
  • MinIO Console: http://your-server-ip:9001 (credentials: minioadmin/minioadmin)

Next Steps

  1. Create your first user by visiting the frontend URL
  2. Configure your server - see Deploying with Docker Compose for detailed configuration options
  3. Set up SSL certificates for production use
  4. Configure backups and monitoring

Getting Help


Important: This basic setup is not recommended for production use. For production deployments, see the complete Deploying with Docker Compose guide.