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 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_USE_TLS:trueorfalse
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: