Detailed Installation Guide
This comprehensive guide provides multiple installation methods for ANTE ERP, from fully automated CLI installation to manual Docker setup.
Installation Methods
Method 1: CLI Installation (Recommended) ⭐
Time: ~5 minutes | Difficulty: Easy
The ANTE CLI automates the entire installation process. Best for most users.
Method 2: Manual Docker Installation
Time: ~45 minutes | Difficulty: Medium
Step-by-step Docker installation with full control over configuration.
Method 1: CLI Installation (Recommended)
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:
node --version
# Should show v24.0.0 or higherIf not installed, install Node.js on Ubuntu/Debian:
# 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 --versionInstallation Steps
Step 1: Install the ANTE CLI
Install the CLI globally using npm:
# 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:
ante installThe CLI will guide you through:
- System Check - Validates Docker, disk space, memory
- Directory Setup - Prompts for installation location (default: ./ante-erp)
- Configuration - Asks for basic settings (ports, domain)
- Credential Generation - Creates secure passwords automatically
- Docker Setup - Generates optimized docker-compose.yml
- Service Start - Pulls images and starts all services
- 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.txtSave 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:8080Or from another computer:
http://YOUR_SERVER_IP:8080On first access, create your administrator account.
Managing Your Installation
The CLI provides commands for all management tasks:
Check Status
ante statusShows all services and their health status.
View Logs
# All services
ante logs
# Follow logs in real-time
ante logs --follow
# Specific service
ante logs --service backend --followRestart Services
# Restart all services
ante restart
# Restart specific service
ante restart --service backendCreate Backups
# Create backup
ante backup
# List backups
ante backup:list
# Restore from backup
ante restoreDatabase Operations
# Run migrations
ante db:migrate
# Open database shell
ante db:shell
# Optimize database
ante db:optimize
# View database info
ante db:infoSystem Health
# Run comprehensive health check
ante doctorUpdates
# Update to latest version (with automatic backup)
ante updateGet Help
# Show all commands
ante --help
# Help for specific command
ante install --helpPost-Installation
After installation:
- ✅ Create Admin Account - First login creates admin user
- ✅ Configure Company - Settings → Company Information
- ✅ Set up Departments - HR → Departments
- ✅ Add Users - Settings → User Management
- ✅ 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
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:
# 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 psStep 2: Create Directory Structure
Create a dedicated directory for ANTE ERP:
# 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:
nano docker-compose.ymlAdd this complete configuration (see example file):
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/16Save the file (Ctrl+X, Y, Enter).
Step 4: Configure Environment Variables
Create a .env file with all configuration:
nano .envMinimum Required Configuration
# ==============================================================================
# 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:
# 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 fileSecurity Important
- Never commit
.envor.env.secretsto 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:
# 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 PulledStep 7: Start Database Services First
Start databases and wait for them to be ready:
# 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 psAll 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/tcpStep 8: Start Application Services
Now start the backend and frontend:
# 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 frontendStep 9: Verify All Services
Check that everything is running:
# Check all services status
docker compose ps
# Should see all 5 services as "Up" and "healthy"Test each component:
# 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 OKStep 10: Access the Application
Open your web browser:
http://localhost:8080Or from another computer:
http://YOUR_SERVER_IP:8080First 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:
Company Information
- Navigate to Settings → Company
- Enter company name, address, contact details
User Roles
- Go to Settings → User Management
- Create user roles (Admin, Manager, Employee, etc.)
Departments
- Navigate to HR → Departments
- Add your company departments
Email Configuration (if not done in .env)
- Go to Settings → Email
- Configure SMTP settings
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 logsDocker 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 filesPost-Installation Tasks
1. Set up Automated Backups
# Create backup script
nano ~/ante-erp/backup.shSee Maintenance Guide for complete backup scripts.
2. Configure SSL/HTTPS
For production use, set up SSL:
3. Set up Monitoring
Consider adding:
- Disk space monitoring
- Container health checks
- Log rotation
- Performance monitoring
Common Installation Issues
Issue: Container fails to start
# Check logs
docker compose logs [service-name]
# Common causes:
# - Port already in use
# - Insufficient memory
# - Invalid environment variablesIssue: Database connection failed
# 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 frontendIssue: Permission denied errors
# Fix volume permissions
docker compose down
sudo chown -R $USER:$USER ~/ante-erp
docker compose up -dIssue: Out of memory
# Check Docker memory usage
docker stats
# Solutions:
# - Add swap space
# - Increase available RAM
# - Optimize container memory limitsNext Steps
Your ANTE ERP installation is complete! Recommended next steps:
- Configure Advanced Settings - Customize your installation
- Set up SSL/HTTPS - Secure your instance
- Configure Backups - Protect your data
- Import Data - Migrate existing data
- User Training - Learn how to use ANTE ERP
Getting Help
Installation Complete! 🎉
Last Updated: October 27, 2025
