Getting Started

Create Your First Product

Set up a product with Docker images, versions, and Stripe integration.

Creating a product involves four steps:

  1. Create the product
  2. Push your Docker image
  3. Create a version with install configuration
  4. Link a Stripe product for payments

Create the product

From your dashboard, go to Products and click Add Product.

  • Name — The display name customers will see (e.g., "Bugflow")
  • URL — A unique slug for this product (e.g., bugflowshpcr.io/your-team/bugflow)
  • Logo — Optional product icon

You can also add optional support links:

  • Support email
  • Documentation URL
  • GitHub repository
  • Discord server
  • Community forum

Push your Docker image

Before creating a version, push your Docker image to the Self-Host Pro registry.

Generate registry credentials

  1. Go to your product's Images tab
  2. Click Generate Access Token
  3. Save the username (your email) and token — the token is only shown once

Push your image

# Log in to the registry
docker login shpcr.io -u [email protected] -p your-token

# Tag your image
docker tag my-app:latest shpcr.io/your-team/your-product:latest

# Push
docker push shpcr.io/your-team/your-product:latest

After pushing, your image appears in the Images tab with the push timestamp.

Use semantic versioning for tags (e.g., 1.0.0, 1.0, latest). This lets customers pin to specific versions or follow the latest release.

Create a version

Versions define how your software gets installed. Go to your product's Versions tab and click Add Version.

Basic details

  • Name — Version display name (e.g., "Version 1.0")
  • Slug — URL-safe identifier (e.g., v1 or 1.0.0)

System requirements

Set minimum requirements for customer servers:

  • CPU cores — Minimum CPU cores required
  • Memory — Minimum RAM in GB
  • Disk space — Minimum free disk space in GB

The install script checks these before proceeding.

Docker configuration

  • Default image — Select which pushed image tag to install by default
  • Docker Compose file — Your docker-compose.yml content

Example compose file:

services:
  app:
    image: shpcr.io/your-team/your-product:latest
    ports:
      - "8080:8080"
    environment:
      - APP_URL=${APP_URL}
    restart: unless-stopped

Installation options

  • Start application after install — Automatically run docker compose up -d after setup
  • Prompt for install hostname — Ask customers for their domain/IP during install (sets APP_URL and APP_DOMAIN environment variables)

Configuration files (optional)

Add files that should be created in the project directory during install:

  • Name — Filename (e.g., .env, traefik.yml)
  • Contents — File contents
  • Permissions — chmod value (e.g., 600 for sensitive files)
  • Owner — UID and GID for file ownership
  • Prompt to edit — Let customers edit this file during install

Initialize commands (optional)

Commands to run after containers start (e.g., database migrations):

docker compose run --rm app php artisan migrate --force
docker compose run --rm app php artisan db:seed --force

Commands run in order. Installation fails if any command exits with an error.

To sell this version, link it to a Stripe product.

In Stripe

  1. Go to your Stripe Dashboard
  2. Create a product with your desired pricing (one-time or subscription)
  3. Copy the product ID (starts with prod_)

In Self-Host Pro

  1. Edit your version
  2. Under Purchase Access, click Add Marketplace Product
  3. Select your connected Stripe account
  4. Choose the Stripe product
  5. Set access duration:
    • Indefinite — Customer has permanent access
    • Expires after X days — Access revoked after the specified period (useful for subscriptions)

Test the flow

Before going live:

  1. Use Stripe test mode to create a test product
  2. Make a test purchase
  3. Check that you receive access and can generate an install script
  4. Run the install script on a test server
  5. Verify everything works

When ready, switch to Stripe live mode and update your marketplace product link.