Ideon Logo
Ideon

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.

[!TIP] If you are deploying behind a reverse proxy (Nginx, Apache, etc.), please follow our Reverse Proxy Configuration guide to ensure WebSocket support is correctly enabled.

Quick Start (Docker Run)

If you prefer to skip the installer script or just want to try Ideon quickly using SQLite, you can run a single Docker command:

docker run -d \
  --name ideon \
  -p 3000:3000 \
  -v ideon-data:/app/storage \
  -e SECRET_KEY=$(openssl rand -hex 32) \
  ghcr.io/3xpyth0n/ideon:latest

This will start Ideon on http://localhost:3000 with a persistent SQLite database.

Automated Installer

For a production-ready setup (including PostgreSQL), use 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_FROM_NAME: Sender display name (optional)
  • SMTP_USE_TLS: true or false

General

  • TIMEZONE: Server timezone (default: UTC)

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: