Skip to content

Detailed Installation Guide

This comprehensive guide provides multiple installation methods for ANTE ERP, from fully automated CLI installation to manual Docker setup.

Installation Methods

Time: ~5 minutes | Difficulty: Easy

The ANTE CLI automates the entire installation process. Best for most users.

Jump to CLI Installation →

Method 2: Manual Docker Installation

Time: ~45 minutes | Difficulty: Medium

Step-by-step Docker installation with full control over configuration.

Jump to Manual Installation →


The ANTE CLI is the fastest and most reliable way to install ANTE ERP. It handles everything automatically while still giving you full control.

Why Use the CLI?

Advantages:

  • 5-minute setup - Fully automated installation
  • 🛡️ Secure by default - Generates strong credentials automatically
  • Validates system - Checks requirements before starting
  • 🎮 Built-in management - Commands for all operations
  • 📦 Easy updates - One-command updates with automatic backups
  • 🔍 Diagnostics - Built-in health checks and troubleshooting
  • 💾 Backup/Restore - Integrated backup and restore tools

When to use CLI:

  • ✅ Standard installations (covers 95% of use cases)
  • ✅ Production deployments
  • ✅ Quick evaluation/testing
  • ✅ First-time installations

When to use Manual instead:

  • Custom Docker networking requirements
  • External database services
  • Non-standard port configurations
  • Advanced customizations

Prerequisites

Before installing the CLI, ensure you have:

Required Software

  • Node.js 24.0 or higher (LTS)
  • npm (comes with Node.js)
  • Docker 20.10+ with Docker Compose v2
  • Linux/Ubuntu operating system

System Resources

  • RAM: 2GB minimum, 4GB recommended
  • Disk: 20GB minimum, 50GB recommended
  • Network: Internet connection for downloading packages

Install Node.js (if needed)

Check if Node.js is installed:

bash
node --version
# Should show v24.0.0 or higher

If not installed, install Node.js on Ubuntu/Debian:

bash
# Install Node.js 24.x LTS
curl -fsSL https://deb.nodesource.com/setup_24.x | sudo -E bash -
sudo apt-get install -y nodejs

# Verify installation
node --version
npm --version

Installation Steps

Step 1: Install the ANTE CLI

Install the CLI globally using npm:

bash
# Install CLI
npm install -g ante-erp-cli

# Verify installation
ante --version
# Should show: 1.0.0 (or later)

First Time Installation

The CLI will be installed in your npm global directory. You can run ante commands from anywhere on your system.

Step 2: Run the Installation

Start the interactive installation wizard:

bash
ante install

The CLI will guide you through:

  1. System Check - Validates Docker, disk space, memory
  2. Directory Setup - Prompts for installation location (default: ./ante-erp)
  3. Configuration - Asks for basic settings (ports, domain)
  4. Credential Generation - Creates secure passwords automatically
  5. Docker Setup - Generates optimized docker-compose.yml
  6. Service Start - Pulls images and starts all services
  7. Database Init - Runs migrations automatically

Installation Process (2-3 minutes):

🔍 Checking system requirements...
✓ Docker: 24.0.5 (✓ Version OK)
✓ Docker Compose: v2.20.0 (✓ Version OK)
✓ Node.js: 24.0.0 (✓ Version OK)
✓ Disk Space: 45GB available (✓ Sufficient)
✓ Memory: 4GB available (✓ Sufficient)

📂 Installation directory: /home/user/ante-erp

🔐 Generating secure credentials...
✓ Database passwords generated
✓ JWT secret generated
✓ API keys generated
✓ Credentials saved to installation-credentials.txt

📦 Creating Docker configuration...
✓ docker-compose.yml created
✓ .env file created

🐳 Pulling Docker images...
✓ postgres:15-alpine
✓ redis:7-alpine
✓ mongo:7
✓ ante-backend:latest
✓ ante-frontend:latest

🚀 Starting services...
✓ PostgreSQL started (healthy)
✓ Redis started (healthy)
✓ MongoDB started (healthy)
✓ Backend API started (healthy)
✓ Frontend started (healthy)

🗄️ Running database migrations...
✓ Migrations applied successfully

✅ Installation complete!

Access ANTE ERP at: http://localhost:8080
Credentials saved to: /home/user/ante-erp/installation-credentials.txt

Save Your Credentials

The CLI generates and saves all credentials to installation-credentials.txt in your installation directory. Keep this file secure!

Step 3: Access ANTE ERP

Open your web browser:

http://localhost:8080

Or from another computer:

http://YOUR_SERVER_IP:8080

On first access, create your administrator account.

Managing Your Installation

The CLI provides commands for all management tasks:

Check Status

bash
ante status

Shows all services and their health status.

View Logs

bash
# All services
ante logs

# Follow logs in real-time
ante logs --follow

# Specific service
ante logs --service backend --follow

Restart Services

bash
# Restart all services
ante restart

# Restart specific service
ante restart --service backend

Create Backups

bash
# Create backup
ante backup

# List backups
ante backup:list

# Restore from backup
ante restore

Database Operations

bash
# Run migrations
ante db:migrate

# Open database shell
ante db:shell

# Optimize database
ante db:optimize

# View database info
ante db:info

System Health

bash
# Run comprehensive health check
ante doctor

Updates

bash
# Update to latest version (with automatic backup)
ante update

Get Help

bash
# Show all commands
ante --help

# Help for specific command
ante install --help

Post-Installation

After installation:

  1. Create Admin Account - First login creates admin user
  2. Configure Company - Settings → Company Information
  3. Set up Departments - HR → Departments
  4. Add Users - Settings → User Management
  5. Configure Modules - Enable needed modules

CLI Installation Complete!

Your ANTE ERP installation is ready. For ongoing management, use the CLI commands listed above.

Next Steps:


Method 2: Manual Docker Installation

This method provides full control over the installation process. Use this if you need custom configurations or want to understand every step.

Installation Overview

mermaid
graph TD
    A[Verify Prerequisites] --> B[Create Directory Structure]
    B --> C[Download Configuration Files]
    C --> D[Configure Environment Variables]
    D --> E[Generate Security Keys]
    E --> F[Pull Docker Images]
    F --> G[Start Database Services]
    G --> H[Initialize Database]
    H --> I[Start Application Services]
    I --> J[Verify Installation]
    J --> K[Configure System]

Estimated Time: 45-60 minutes

Step 1: Verify Prerequisites

Ensure your system meets all requirements:

bash
# Check Docker version (need 20.10+)
docker --version

# Check Docker Compose (need v2.0+)
docker compose version

# Check available disk space (need 20GB+)
df -h

# Check available memory (need 2GB+)
free -h

# Verify Docker is running
docker ps

→ Full Prerequisites Guide

Step 2: Create Directory Structure

Create a dedicated directory for ANTE ERP:

bash
# Create main directory
mkdir -p ~/ante-erp
cd ~/ante-erp

# Create subdirectories for organization
mkdir -p config
mkdir -p backups
mkdir -p logs

# Set up directory structure
# ~/ante-erp/
# ├── docker-compose.yml    (main configuration)
# ├── .env                  (environment variables)
# ├── config/               (application configs)
# ├── backups/              (database backups)
# └── logs/                 (application logs)

Step 3: Create Docker Compose Configuration

Create the main docker-compose.yml file:

bash
nano docker-compose.yml

Add this complete configuration (see example file):

yaml
version: '3.8'

services:
  # PostgreSQL Database
  postgres:
    image: postgres:15-alpine
    container_name: ante-postgres
    restart: unless-stopped
    environment:
      POSTGRES_USER: ante
      POSTGRES_PASSWORD: ${DB_PASSWORD}
      POSTGRES_DB: ante_db
      PGDATA: /var/lib/postgresql/data/pgdata
    volumes:
      - postgres_data:/var/lib/postgresql/data
      - ./backups:/backups
    networks:
      - ante-network
    healthcheck:
      test: ["CMD-SHELL", "pg_isready -U ante"]
      interval: 10s
      timeout: 5s
      retries: 5
    logging:
      driver: "json-file"
      options:
        max-size: "10m"
        max-file: "3"

  # Redis Cache
  redis:
    image: redis:7-alpine
    container_name: ante-redis
    restart: unless-stopped
    command: >
      redis-server
      --requirepass ${REDIS_PASSWORD}
      --maxmemory 256mb
      --maxmemory-policy allkeys-lru
      --save 900 1
      --save 300 10
      --save 60 10000
    volumes:
      - redis_data:/data
    networks:
      - ante-network
    healthcheck:
      test: ["CMD", "redis-cli", "--pass", "${REDIS_PASSWORD}", "ping"]
      interval: 10s
      timeout: 5s
      retries: 5
    logging:
      driver: "json-file"
      options:
        max-size: "10m"
        max-file: "3"

  # MongoDB
  mongodb:
    image: mongo:7
    container_name: ante-mongodb
    restart: unless-stopped
    environment:
      MONGO_INITDB_ROOT_USERNAME: ante
      MONGO_INITDB_ROOT_PASSWORD: ${MONGO_PASSWORD}
    volumes:
      - mongodb_data:/data/db
      - mongodb_config:/data/configdb
    networks:
      - ante-network
    healthcheck:
      test: |
        echo 'db.runCommand("ping").ok' | 
        mongosh localhost:27017/test --quiet --username ante --password ${MONGO_PASSWORD} --authenticationDatabase admin
      interval: 10s
      timeout: 5s
      retries: 5
      start_period: 40s
    logging:
      driver: "json-file"
      options:
        max-size: "10m"
        max-file: "3"

  # ANTE Backend
  backend:
    image: ghcr.io/gtplusnet/ante-self-hosted-backend:latest
    container_name: ante-backend
    restart: unless-stopped
    depends_on:
      postgres:
        condition: service_healthy
      redis:
        condition: service_healthy
      mongodb:
        condition: service_healthy
    environment:
      # Node Environment
      NODE_ENV: production
      PORT: 3001
      
      # Database Configuration
      DATABASE_URL: postgresql://ante:${DB_PASSWORD}@postgres:5432/ante_db?schema=public&connection_limit=10
      DIRECT_URL: postgresql://ante:${DB_PASSWORD}@postgres:5432/ante_db?schema=public
      
      # Redis Configuration
      REDIS_HOST: redis
      REDIS_PORT: 6379
      REDIS_PASSWORD: ${REDIS_PASSWORD}
      REDIS_DB: 0
      REDIS_TLS: "false"
      
      # MongoDB Configuration
      MONGODB_URI: mongodb://ante:${MONGO_PASSWORD}@mongodb:27017/ante?authSource=admin
      
      # Security Keys
      JWT_SECRET: ${JWT_SECRET}
      JWT_EXPIRATION: ${JWT_EXPIRATION:-24h}
      DEVELOPER_KEY: ${DEVELOPER_KEY}
      ENCRYPTION_KEY: ${ENCRYPTION_KEY}
      
      # Application URLs
      FRONTEND_URL: ${FRONTEND_URL:-http://localhost:8080}
      API_URL: ${API_URL:-http://localhost:3001}
      SOCKET_URL: ${SOCKET_URL:-ws://localhost:4001}
      
      # Email Configuration
      SMTP_HOST: ${SMTP_HOST:-}
      SMTP_PORT: ${SMTP_PORT:-587}
      SMTP_SECURE: ${SMTP_SECURE:-false}
      SMTP_USERNAME: ${SMTP_USERNAME:-}
      SMTP_PASSWORD: ${SMTP_PASSWORD:-}
      SMTP_FROM_EMAIL: ${SMTP_FROM_EMAIL:-noreply@ante.local}
      SMTP_FROM_NAME: ${SMTP_FROM_NAME:-ANTE ERP}
      
      # File Storage
      UPLOAD_MAX_SIZE: ${UPLOAD_MAX_SIZE:-10485760}
      UPLOAD_ALLOWED_TYPES: ${UPLOAD_ALLOWED_TYPES:-image/*,application/pdf,application/vnd.ms-excel}
      
      # Optional: External Services
      SENTRY_DSN: ${SENTRY_DSN:-}
      NEW_RELIC_LICENSE_KEY: ${NEW_RELIC_LICENSE_KEY:-}
      
    ports:
      - "${BACKEND_PORT:-3001}:3001"
      - "${WEBSOCKET_PORT:-4001}:4001"
    volumes:
      - backend_uploads:/app/uploads
      - ./logs:/app/logs
    networks:
      - ante-network
    healthcheck:
      test: ["CMD", "wget", "--spider", "-q", "http://localhost:3001/health"]
      interval: 30s
      timeout: 10s
      retries: 3
      start_period: 60s
    logging:
      driver: "json-file"
      options:
        max-size: "50m"
        max-file: "5"

  # ANTE Frontend
  frontend:
    image: ghcr.io/gtplusnet/ante-self-hosted-frontend-main:latest
    container_name: ante-frontend
    restart: unless-stopped
    depends_on:
      backend:
        condition: service_healthy
    ports:
      - "${FRONTEND_PORT:-8080}:80"
    environment:
      - BACKEND_URL=${API_URL:-http://localhost:3001}
    networks:
      - ante-network
    healthcheck:
      test: ["CMD", "wget", "--spider", "-q", "http://localhost:80"]
      interval: 30s
      timeout: 10s
      retries: 3
    logging:
      driver: "json-file"
      options:
        max-size: "10m"
        max-file: "3"

volumes:
  postgres_data:
    driver: local
  redis_data:
    driver: local
  mongodb_data:
    driver: local
  mongodb_config:
    driver: local
  backend_uploads:
    driver: local

networks:
  ante-network:
    driver: bridge
    ipam:
      config:
        - subnet: 172.28.0.0/16

Save the file (Ctrl+X, Y, Enter).

Step 4: Configure Environment Variables

Create a .env file with all configuration:

bash
nano .env

Minimum Required Configuration

bash
# ==============================================================================
# ANTE ERP Self-Hosted Configuration
# ==============================================================================

# ------------------------------------------------------------------------------
# Database Passwords (REQUIRED - CHANGE THESE!)
# ------------------------------------------------------------------------------
DB_PASSWORD=your_very_secure_postgres_password_here
REDIS_PASSWORD=your_very_secure_redis_password_here
MONGO_PASSWORD=your_very_secure_mongo_password_here

# ------------------------------------------------------------------------------
# Security Keys (REQUIRED - CHANGE THESE!)
# ------------------------------------------------------------------------------
# JWT Secret: Used for authentication tokens (minimum 32 characters)
JWT_SECRET=your-super-secret-jwt-key-at-least-32-characters-long

# JWT Token Expiration (default: 24 hours)
JWT_EXPIRATION=24h

# Developer Key: Used for API authentication (16 characters recommended)
DEVELOPER_KEY=your16chardevkey1

# Encryption Key: Used for encrypting sensitive data (16 characters recommended)
ENCRYPTION_KEY=your16charenckey1

# ------------------------------------------------------------------------------
# Application URLs (REQUIRED)
# ------------------------------------------------------------------------------
# Frontend URL (where users access the application)
FRONTEND_URL=http://localhost:8080

# Backend API URL
API_URL=http://localhost:3001

# WebSocket URL
SOCKET_URL=ws://localhost:4001

# ------------------------------------------------------------------------------
# Port Configuration (Optional - defaults shown)
# ------------------------------------------------------------------------------
FRONTEND_PORT=8080
BACKEND_PORT=3001
WEBSOCKET_PORT=4001

# ------------------------------------------------------------------------------
# Email Configuration (Optional - for notifications)
# ------------------------------------------------------------------------------
SMTP_HOST=
SMTP_PORT=587
SMTP_SECURE=false
SMTP_USERNAME=
SMTP_PASSWORD=
SMTP_FROM_EMAIL=noreply@ante.local
SMTP_FROM_NAME=ANTE ERP

# ------------------------------------------------------------------------------
# File Upload Configuration (Optional)
# ------------------------------------------------------------------------------
# Maximum file size in bytes (default: 10MB)
UPLOAD_MAX_SIZE=10485760

# Allowed file types
UPLOAD_ALLOWED_TYPES=image/*,application/pdf,application/vnd.ms-excel,application/vnd.openxmlformats-officedocument.spreadsheetml.sheet

# ------------------------------------------------------------------------------
# Optional: Monitoring & Error Tracking
# ------------------------------------------------------------------------------
SENTRY_DSN=
NEW_RELIC_LICENSE_KEY=

Save the file.

Step 5: Generate Secure Passwords and Keys

Use these commands to generate secure values:

bash
# Generate all secrets at once
echo "# Generated Secrets - $(date)" > .env.secrets
echo "DB_PASSWORD=$(openssl rand -base64 24)" >> .env.secrets
echo "REDIS_PASSWORD=$(openssl rand -base64 32)" >> .env.secrets
echo "MONGO_PASSWORD=$(openssl rand -base64 24)" >> .env.secrets
echo "JWT_SECRET=$(openssl rand -base64 48)" >> .env.secrets
echo "DEVELOPER_KEY=$(openssl rand -hex 16)" >> .env.secrets
echo "ENCRYPTION_KEY=$(openssl rand -hex 16)" >> .env.secrets

# Display the generated secrets
cat .env.secrets

# Copy these values to your .env file

Security Important

  • Never commit .env or .env.secrets to version control
  • Store these credentials securely (password manager recommended)
  • Keep a backup copy in a secure location

Step 6: Pull Docker Images

Download all required Docker images:

bash
# Pull all images (may take 5-10 minutes depending on connection)
docker compose pull

# You should see progress for:
# - postgres:15-alpine (~80MB)
# - redis:7-alpine (~35MB)
# - mongo:7 (~450MB)
# - ghcr.io/gtplusnet/ante-self-hosted-backend:latest (~500MB)
# - ghcr.io/gtplusnet/ante-self-hosted-frontend-main:latest (~50MB)

Expected output:

[+] Pulling 5/5
 ✔ postgres Pulled
 ✔ redis Pulled
 ✔ mongodb Pulled
 ✔ backend Pulled
 ✔ frontend Pulled

Step 7: Start Database Services First

Start databases and wait for them to be ready:

bash
# Start only database services
docker compose up -d postgres redis mongodb

# Wait for databases to be healthy (may take 30-60 seconds)
echo "Waiting for databases to be ready..."
sleep 30

# Check database status
docker compose ps

All databases should show as "healthy":

NAME             STATUS                   PORTS
ante-mongodb     Up (healthy)             27017/tcp
ante-postgres    Up (healthy)             5432/tcp
ante-redis       Up (healthy)             6379/tcp

Step 8: Start Application Services

Now start the backend and frontend:

bash
# Start backend (this will run database migrations)
docker compose up -d backend

# Wait for backend to initialize (first time may take 2-3 minutes)
echo "Waiting for backend to initialize..."
docker compose logs -f backend

# Look for: "Application is running on: http://0.0.0.0:3001"
# Press Ctrl+C when you see this message

# Start frontend
docker compose up -d frontend

Step 9: Verify All Services

Check that everything is running:

bash
# Check all services status
docker compose ps

# Should see all 5 services as "Up" and "healthy"

Test each component:

bash
# 1. Test PostgreSQL
docker compose exec postgres psql -U ante -d ante_db -c "SELECT version();"

# 2. Test Redis
docker compose exec redis redis-cli -a "${REDIS_PASSWORD}" ping
# Should return: PONG

# 3. Test MongoDB
docker compose exec mongodb mongosh --username ante --password "${MONGO_PASSWORD}" --authenticationDatabase admin --eval "db.version()"

# 4. Test Backend API
curl http://localhost:3001/health
# Should return: {"status":"ok","timestamp":"..."}

# 5. Test Frontend
curl -I http://localhost:8080
# Should return: HTTP/1.1 200 OK

Step 10: Access the Application

Open your web browser:

http://localhost:8080

Or from another computer:

http://YOUR_SERVER_IP:8080

First Access

On first access, you'll be prompted to create an administrator account. Choose a strong password!

Step 11: Initial Configuration

After logging in, complete these setup steps:

  1. Company Information

    • Navigate to Settings → Company
    • Enter company name, address, contact details
  2. User Roles

    • Go to Settings → User Management
    • Create user roles (Admin, Manager, Employee, etc.)
  3. Departments

    • Navigate to HR → Departments
    • Add your company departments
  4. Email Configuration (if not done in .env)

    • Go to Settings → Email
    • Configure SMTP settings
  5. Modules

    • Enable/disable modules based on your needs
    • Configure module-specific settings

Verification Checklist

After installation, verify these items:

  • [ ] All Docker containers are running and healthy
  • [ ] Can access frontend at http://localhost:8080
  • [ ] Can log in with admin account
  • [ ] Backend API responds at http://localhost:3001/health
  • [ ] Database connections working (no errors in logs)
  • [ ] Can create test project/task
  • [ ] Can upload files
  • [ ] Real-time updates working (WebSocket)

Directory Structure After Installation

~/ante-erp/
├── docker-compose.yml       # Main configuration
├── .env                     # Environment variables
├── .env.secrets            # Generated secrets (backup)
├── config/                  # Additional configs
├── backups/                 # Database backups (empty initially)
└── logs/                    # Application logs

Docker volumes (managed by Docker):

postgres_data      # PostgreSQL database files
redis_data         # Redis data
mongodb_data       # MongoDB database files
mongodb_config     # MongoDB configuration
backend_uploads    # Uploaded files

Post-Installation Tasks

1. Set up Automated Backups

bash
# Create backup script
nano ~/ante-erp/backup.sh

See Maintenance Guide for complete backup scripts.

2. Configure SSL/HTTPS

For production use, set up SSL:

→ Security Guide - SSL Setup

3. Set up Monitoring

Consider adding:

  • Disk space monitoring
  • Container health checks
  • Log rotation
  • Performance monitoring

→ Maintenance Guide

Common Installation Issues

Issue: Container fails to start

bash
# Check logs
docker compose logs [service-name]

# Common causes:
# - Port already in use
# - Insufficient memory
# - Invalid environment variables

Issue: Database connection failed

bash
# Ensure databases are healthy before starting backend
docker compose ps

# Restart in correct order
docker compose down
docker compose up -d postgres redis mongodb
sleep 30
docker compose up -d backend frontend

Issue: Permission denied errors

bash
# Fix volume permissions
docker compose down
sudo chown -R $USER:$USER ~/ante-erp
docker compose up -d

Issue: Out of memory

bash
# Check Docker memory usage
docker stats

# Solutions:
# - Add swap space
# - Increase available RAM
# - Optimize container memory limits

→ Full Troubleshooting Guide

Next Steps

Your ANTE ERP installation is complete! Recommended next steps:

  1. Configure Advanced Settings - Customize your installation
  2. Set up SSL/HTTPS - Secure your instance
  3. Configure Backups - Protect your data
  4. Import Data - Migrate existing data
  5. User Training - Learn how to use ANTE ERP

Getting Help


Installation Complete! 🎉


Last Updated: October 27, 2025

Released under the MIT License.