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.

Quick Start

The easiest way to install Ideon is using our automated installer:

curl -fsSL https://install.theideon.com | sh

This command handles everything: dependency checks, secret generation, environment configuration, and startup.

For Contributors (Manual Setup)

If you want to contribute or need full control over the installation:

1. Clone the repository

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

2. Configure environment

Copy the example environment file and adjust it to your needs:

cp env.example .env

3. Start the application

Run Ideon using Docker Compose:

docker compose up -d

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

Ideon supports both SQLite and PostgreSQL.

  • PostgreSQL (Production/Docker): Used by default in the Docker Compose setup.

    • DB_HOST: Hostname (default: ideon-db)
    • DB_PORT: Port (default: 5432)
    • DB_NAME: Database name
    • DB_USER: Username
    • DB_PASS: Password
  • SQLite (Development/Simple): Used automatically if DB_HOST is not set or if running in development mode without Docker.

    • SQLITE_PATH: Path to the database file (default: ./storage/dev.db)

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: