Ideas-to-Action

Leap Academy · Customer deployment

Self-hosted Docker installation

Install Ideas-to-Action on your own infrastructure using pre-built Docker images. You do not need application source code or Git access — only the deployment package, registry credentials, and a license key from Leap Academy.

What you received

ItemDescription
Deployment filesdocker-compose.yml, nginx.conf, .env.example
Docker imagesPre-built Ideas-to-Action API (ideas-to-action-api) and Web (ideas-to-action-web) images from a private registry
Registry credentialsUsername / password (or token) to pull images
License keyOrganization subscription key from Leap Academy
APP_KEYLaravel encryption key (from support if not included)

The Compose stack runs Nginx, Next.js, Laravel API, MySQL, Redis, a queue worker, and a scheduler.

1. Server requirements

RequirementMinimum
OSLinux (Ubuntu 22.04+ or equivalent)
Docker24+ with Compose v2 (docker compose)
CPU / RAM2 vCPU, 4 GB RAM (8 GB recommended)
Disk20 GB free (grows with DB + uploads)
Outbound HTTPSRequired for license activation and validation

2. DNS

Point your portal hostname at the server (or load balancer) that will run Docker. Use the same hostname everywhere in .env.

RecordExamplePoints to
Aportal.yourcompany.comPublic IP of your server
CNAMEportal.yourcompany.comLoad balancer hostname

3. HTTPS (TLS)

The bundled Nginx container listens on port 80. Terminate TLS in front of Docker:

  • Cloudflare, AWS ALB, Azure App Gateway, or host Nginx / Caddy
  • Forward https://portal.yourcompany.com http://<server-ip>:80
  • Preserve Host, X-Forwarded-For, X-Forwarded-Proto

After TLS works, all URLs in .env should use https://.

4. Configure .env

cp .env.example .env

Edit .env before starting the stack.

Required

VariableNotes
APP_KEYbase64:... from Leap Academy if blank
APP_URL / NEXT_PUBLIC_SITE_URLPublic site URL, e.g. https://portal.yourcompany.com
LICENSE_DOMAINHostname only (no scheme)
LICENSE_INSTALL_URLhttps://portal.yourcompany.com/setup
DB_PASSWORD / DB_ROOT_PASSWORDStrong MySQL passwords
REDIS_PASSWORDRequired — container will not start without it
API_IMAGE / WEB_IMAGEideas-to-action-api and ideas-to-action-web tags from Leap Academy
ORGANIZATION_LICENSE_SERVER_URLLeap Academy cloud control plane (not your instance)
ORGANIZATION_LICENSE_HMAC_SECRETShared secret with cloud — openssl rand -hex 32

Fill every blank secret in .env.example before starting. Enterprise administrators are created in the /setup wizard — not via Docker env vars.

Customer instance mode (leave as shipped)

APP_INSTANCE_MODE=customer
LICENSE_REQUIRE_ACTIVATION=true
ORGANIZATION_LICENSE_USE_LOCAL=false
NEXT_PUBLIC_API_URL=/api

Recommended — mail

Set MAIL_HOST, MAIL_PORT, MAIL_USERNAME, MAIL_PASSWORD, MAIL_FROM_ADDRESS, and MAIL_FROM_NAME for password resets and notifications.

5. Install

On the server, in the folder that contains docker-compose.yml:

docker login registry.ideastoaction.com
docker compose pull
docker compose up -d

docker compose ps
curl -s https://portal.yourcompany.com/api/v1/health

Allow 1–2 minutes for MySQL and the API to become healthy before opening the setup wizard.

6. First-time setup wizard

Open /setup on your domain (for example https://portal.yourcompany.com/setup).

StepWhat you do
WelcomeConfirm you are on the correct domain
RequirementsAuto-checks PHP, DB, Redis, permissions
DatabaseConfirms MySQL connectivity
LicenseEnter the license key from Leap Academy
AdministratorCreate the first Enterprise admin
InstallActivates the instance and binds your domain
CompletedRedirect to Enterprise login

Setup can only be completed once per installation. Keep the admin credentials secure.

7. First login

PortalURL
Enterprise/enterprise
Setup (first install only)/setup

Branding (logo, colors, company name) is configured in Enterprise settings after login — not baked into the Docker images.

8. Updates

When Leap Academy publishes a new version:

# Update API_IMAGE / WEB_IMAGE in .env if instructed
docker compose pull
docker compose up -d

MySQL volumes and uploaded files are preserved across updates.

9. Optional — external database or Redis

By default Compose starts bundled MySQL and Redis. To use managed services instead:

  • Set DB_HOST, DB_PORT, DB_DATABASE, DB_USERNAME, DB_PASSWORD to your database
  • Set REDIS_HOST, REDIS_PORT, REDIS_PASSWORD to your Redis
  • Remove or comment out the mysql / redis services in docker-compose.yml if you do not need them locally

Queue workers and the scheduler stay in Compose — they reuse the backend image and your .env.

10. Troubleshooting

SymptomCheck
502 on /apiBackend still booting — wait, then docker compose restart nginx. If it persists, check docker compose logs backend for missing secrets in .env.
License invalidKey typo, wrong domain, or cloud cannot reach instance
Site loads, API failsAPP_URL / LICENSE_DOMAIN mismatch
Mail not sendingFill MAIL_*, then recreate containers
View logsdocker compose logs -f backend

11. Support

When contacting Leap Academy, include your domain, APP_VERSION from .env, and the output of docker compose ps.