Ideon Logo
Ideon
GitHub

Installation

Ideon is designed to be self-hosted and easy to deploy using Docker.

Requirements

  • Docker (Engine 24+)
  • Docker Compose (v2+)

If you can run containers, you can run Ideon.

Automated Installation (Recommended)

Ideon includes an ultra-automated installation script (install.sh) that handles everything for you: dependency checks, secret generation, environment configuration, and startup.

1. Clone the repository

git clone https://github.com/3xpyth0n/ideon.git
cd ideon

2. Run the wizard

./install.sh

This interactive wizard will:

  • Check prerequisites: Verifies Docker, Docker Compose, and OpenSSL.
  • Configure environment: Generates a .env file with secure random keys.
  • Setup SMTP (Optional): Configures email for invitations.
  • Launch Ideon: Starts the application.

Configuration (.env)

The application is configured via environment variables.

App Settings

  • APP_PORT: Port to expose (default: 3000)
  • APP_URL: Public URL (e.g., https://ideon.example.com)
  • TIMEZONE: Server timezone (default: UTC)

Database

  • DB_HOST: Hostname (default: ideon-db for Docker)
  • DB_PORT: Port (default: 5432)
  • DB_NAME: Database name
  • DB_USER: Username
  • DB_PASS: Password

Security

  • SECRET_KEY: Critical. 32+ char random string used for signing sessions and encryption.

SMTP (Email)

Required for invitations and magic links.

  • SMTP_HOST: Mail server host
  • SMTP_PORT: Port (e.g., 587)
  • SMTP_USER: Username
  • SMTP_PASSWORD: Password
  • SMTP_FROM_EMAIL: Sender address
  • SMTP_USE_TLS: true or false

Manual Setup (Docker Compose)

For manual deployment, create a docker-compose.yml:

services:
  ideon-app:
    image: ghcr.io/3xpyth0n/ideon:latest
    container_name: ideon-app
    environment:
      - DB_HOST=ideon-db
      - DB_PORT=5432
      - DB_USER=ideon
      - DB_PASS=ideon
      - DB_NAME=ideon
      - APP_PORT=3000
      - APP_URL=http://localhost:3000
      - SECRET_KEY=change_this_to_a_secure_random_string
    depends_on:
      ideon-db:
        condition: service_healthy
    restart: unless-stopped
    ports:
      - "3000:3000"
    volumes:
      - ideon-app-data:/app/storage

  ideon-db:
    image: postgres:15-alpine
    container_name: ideon-db
    environment:
      - POSTGRES_USER=ideon
      - POSTGRES_PASSWORD=ideon
      - POSTGRES_DB=ideon
    volumes:
      - ideon-db-data:/var/lib/postgresql/data
    healthcheck:
      test: ["CMD-SHELL", "pg_isready -U ideon"]
      interval: 5s
      timeout: 5s
      retries: 5

volumes:
  ideon-app-data:
  ideon-db-data: