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.
Manual Setup
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 app
Use the development command:
npm install
npm run dev
This rebuilds the Docker image and restarts the stack. Run it again after each code change.
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: Used when
DB_HOSTis not set.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: