Install Paideia LMS
Paideia LMS offers two installation methods: single binary (recommended for quick deployment) and Docker Compose (for production environments with full control). Choose the method that best fits your needs.
Prerequisites
Section titled “Prerequisites”Single Binary Installation
Section titled “Single Binary Installation”- Operating System: macOS (ARM64 or x64) or Linux (ARM64 or x64)
- Terminal: Access to command-line interface
Docker Compose Installation
Section titled “Docker Compose Installation”- Docker: Docker Engine 20.10 or higher
- Docker Compose: Docker Compose v2.0 or higher
- Ports: Ports 3000, 3001, 5432, 9000, and 9001 should be available
Single Binary Installation
Section titled “Single Binary Installation”The single binary installation is the fastest way to get Paideia LMS running. Inspired by PocketBase, Paideia LMS is distributed as a single executable file that contains everything you need.
-
Download the binary for your platform:
Terminal window curl -L -o paideia https://github.com/paideia-lms/paideia/releases/latest/download/paideia-macos-arm64chmod +x paideiaxattr -c paideiaTerminal window curl -L -o paideia https://github.com/paideia-lms/paideia/releases/latest/download/paideia-linux-arm64chmod +x paideiaTerminal window curl -L -o paideia https://github.com/paideia-lms/paideia/releases/latest/download/paideia-linux-x64chmod +x paideia -
Run Paideia LMS:
Terminal window ./paideia -
Configure your environment:
The binary will guide you through initial setup. You’ll need to provide:
- Database connection (PostgreSQL)
- S3/MinIO configuration for file storage
- Admin user credentials
Or set environment variables before running:
Terminal window export DATABASE_URL="postgresql://user:password@localhost:5432/paideia_db"export S3_URL="http://localhost:9000"export S3_ACCESS_KEY="your-access-key"export S3_SECRET_KEY="your-secret-key"export S3_BUCKET="paideia-bucket"./paideia -
Access Paideia LMS:
Open your browser and navigate to
http://localhost:3000(or the port configured viaFRONTEND_PORTenvironment variable).
Docker Compose Installation
Section titled “Docker Compose Installation”For production deployments or when you need full control over the infrastructure, use Docker Compose. This setup includes Paideia LMS, PostgreSQL database, MinIO (S3-compatible storage).
-
Create a
docker-compose.ymlfile:Create a new file named
docker-compose.ymlin your project directory:version: '3.8'services:paideia:image: hananoshikayomaru/paideia:latestcontainer_name: paideiarestart: noports:- "3000:3000"- "3001:3001"environment:# DatabaseDATABASE_URL: postgresql://paideia:paideia_password@postgres:5432/paideia_db# S3/MinIOS3_URL: http://minio:9000S3_ACCESS_KEY: paideia_minioS3_SECRET_KEY: paideia_minio_secretS3_ENDPOINT_URL: http://minio:9000S3_BUCKET: paideia-bucketS3_REGION: us-east-1# PayloadPAYLOAD_SECRET: change-this-to-a-secure-random-string# Ports (optional, defaults shown)PORT: 3001FRONTEND_PORT: 3000# Email (optional - uncomment if using SMTP)# SMTP_HOST: smtp.example.com# SMTP_USER: your-email@example.com# SMTP_PASS: your-password# RESEND_API_KEY: your-resend-api-key# Email sender (optional, defaults shown)EMAIL_FROM_ADDRESS: info@paideialms.comEMAIL_FROM_NAME: Paideia LMSCORS_ORIGINS: "*"# CSRF_ORIGINS: "https://paideia-13.localcan.dev"# Sandbox mode (optional, default: 0)# SANDBOX_MODE: 0networks:paideia_net:ipv4_address: 172.28.0.2depends_on:- postgres- miniopostgres:image: postgres:18container_name: paideia_postgresrestart: unless-stoppedenvironment:POSTGRES_USER: paideiaPOSTGRES_PASSWORD: paideia_passwordPOSTGRES_DB: paideia_dbports:- "5432:5432"volumes:- postgres_data:/var/lib/postgresqlhealthcheck:test: ["CMD-SHELL", "pg_isready -U paideia"]interval: 5stimeout: 5sretries: 10networks:paideia_net:ipv4_address: 172.28.0.3minio:image: minio/minio:latestcontainer_name: paideia_miniorestart: unless-stoppedports:- "9000:9000"- "9001:9001"environment:MINIO_ROOT_USER: paideia_minioMINIO_ROOT_PASSWORD: paideia_minio_secretvolumes:- minio_data:/datacommand: server /data --console-address ":9001"networks:paideia_net:ipv4_address: 172.28.0.4volumes:minio_data:postgres_data:networks:paideia_net:driver: bridgeipam:config:- subnet: 172.28.0.0/16 -
Configure environment variables:
Important: Before starting, update the following in
docker-compose.yml:PAYLOAD_SECRET: Generate a secure random string for productionPOSTGRES_PASSWORD: Change the default passwordMINIO_ROOT_PASSWORD: Change the default passwordS3_ACCESS_KEYandS3_SECRET_KEY: Update for production use- Email configuration: Uncomment and configure if using SMTP
-
Start all services:
Terminal window docker-compose up -d -
Verify services are running:
Terminal window docker-compose psYou should see all three services (paideia, postgres, minio) in “Up” status.
-
Access Paideia LMS:
- Frontend:
http://localhost:3000 - API:
http://localhost:3001 - MinIO Console:
http://localhost:9001(login withpaideia_minio/paideia_minio_secret) - PostgreSQL:
localhost:5432
- Frontend:
-
Create your admin user:
On first access, you’ll be prompted to create an admin account. Follow the on-screen instructions.
Configuration
Section titled “Configuration”Environment Variables
Section titled “Environment Variables”Both installation methods support the following environment variables:
| Variable | Description | Default | Required |
|---|---|---|---|
DATABASE_URL | PostgreSQL connection string | - | Yes |
S3_URL | S3/MinIO endpoint URL | - | Yes |
S3_ACCESS_KEY | S3 access key | - | Yes |
S3_SECRET_KEY | S3 secret key | - | Yes |
S3_BUCKET | S3 bucket name | - | Yes |
S3_REGION | S3 region | us-east-1 | No |
PORT | Backend API port | 3001 | No |
FRONTEND_PORT | Frontend port | 3000 | No |
PAYLOAD_SECRET | Secret for payload encryption | - | Yes |
CORS_ORIGINS | Allowed CORS origins | * | No |
EMAIL_FROM_ADDRESS | Email sender address | info@paideialms.com | No |
EMAIL_FROM_NAME | Email sender name | Paideia LMS | No |
SMTP_HOST | SMTP server host | - | No |
SMTP_USER | SMTP username | - | No |
SMTP_PASS | SMTP password | - | No |
RESEND_API_KEY | Resend API key | - | No |
SANDBOX_MODE | Enable sandbox mode | 0 | No |
Security Recommendations
Section titled “Security Recommendations”- Change default passwords: Always update default passwords in production
- Generate secure secrets: Use a cryptographically secure random string for
PAYLOAD_SECRET - Configure CORS properly: Replace
CORS_ORIGINS: "*"with your actual domain(s) - Use HTTPS: Configure a reverse proxy (nginx, Traefik, etc.) for HTTPS in production
- Database security: Use strong PostgreSQL passwords and consider network restrictions
Next Steps
Section titled “Next Steps”Once Paideia LMS is installed and running:
- Configure your first course: Create courses, add content, and manage students
- Set up user management: Configure roles, permissions, and access controls
- Integrate with Microsoft: Set up Microsoft Teams, OneDrive, and Office 365 integration
- Enable LTI: Configure Learning Tools Interoperability for external tool integration
- Explore AI features: Set up and configure AI-native capabilities
See our configuration guide for detailed setup instructions.
Learn