Docs

Run from Docker Hub images

Use docker-compose.prod.yml to start GIF Creator from the published Docker Hub images.

Overview

The repository includes docker-compose.prod.yml for running GIF Creator directly from the published Docker Hub images instead of building locally.

What this file does

docker-compose.prod.yml starts three services:

  • api from garrardkitchen/gif-creator-api:latest
  • encoder from garrardkitchen/gif-creator-encoder:latest
  • web from garrardkitchen/gif-creator-web:latest

It also mounts a persistent gif_data volume and configures the production connection string, storage path, and internal service URLs.

Required environment

Set GH_TOKEN before you start the stack so AI blur detection can call the GitHub Models API.

Create a GitHub Personal Access Token that includes the read:models scope:

  1. Open GitHub and go to Settings.
  2. Open Developer settings.
  3. Choose Personal access tokens.
  4. Create a new token and enable the read:models scope.
  5. Copy the token and export it as GH_TOKEN before starting the stack.

Do not commit this token into source control. Keep it in your shell environment or a local .env file that is not checked in.

export GH_TOKEN=ghp_your_token_here
docker compose -f docker-compose.prod.yml up -d

The services will come up on:

  • Frontend: http://localhost:8001
  • API: http://localhost:5232
  • Swagger: http://localhost:5232/swagger

Included production compose file

services:
  api:
    image: garrardkitchen/gif-creator-api:latest
    container_name: gif-creator-api
    restart: unless-stopped
    volumes:
      - gif_data:/data
    environment:
      - ASPNETCORE_ENVIRONMENT=Production
      - ConnectionStrings__DefaultConnection=Data Source=/data/gifcreator.db
      - Storage__BasePath=/data/storage
      - Ai__GitHubToken=${GH_TOKEN}
      - Ai__DefaultModelId=gpt-4o
      - Ai__CropLeftPercent=37
      - Ai__CropTopPercent=28
      - Cors__AllowedOrigins=http://localhost
      - Encoder__BaseUrl=http://encoder:8002
      - Api__InternalBaseUrl=http://api:8002
    ports:
      - "5232:8002"
    depends_on:
      - encoder
    healthcheck:
      test: ["CMD", "curl", "-f", "http://localhost:8002/health"]
      interval: 30s
      timeout: 10s
      retries: 3
      start_period: 20s

  encoder:
    image: garrardkitchen/gif-creator-encoder:latest
    container_name: gif-creator-encoder
    restart: unless-stopped
    volumes:
      - gif_data:/data
    environment:
      - ASPNETCORE_ENVIRONMENT=Production
      - Storage__BasePath=/data/storage
    healthcheck:
      test: ["CMD", "curl", "-f", "http://localhost:8002/health"]
      interval: 30s
      timeout: 10s
      retries: 3
      start_period: 20s

  web:
    image: garrardkitchen/gif-creator-web:latest
    container_name: gif-creator-web
    restart: unless-stopped
    depends_on:
      - api
    ports:
      - "8001:80"
    healthcheck:
      test: ["CMD", "curl", "-f", "http://localhost:80"]
      interval: 30s
      timeout: 10s
      retries: 3

volumes:
  gif_data:
    driver: local

When to use this path

Use docker-compose.prod.yml when you want:

  • the quickest local trial of the full stack
  • a demo environment without a local .NET or Node build
  • to stay aligned with the images published from release tags