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 nameDB_USER: UsernameDB_PASS: Password
-
SQLite (Development/Simple): Used automatically if
DB_HOSTis 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 hostSMTP_PORT: Port (e.g., 587)SMTP_USER: UsernameSMTP_PASSWORD: PasswordSMTP_FROM_EMAIL: Sender addressSMTP_FROM_NAME: Sender display name (optional)SMTP_USE_TLS:trueorfalse
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: