Skip to content

Installation

Comprehensive guide for installing FlexGate across different platforms and deployment scenarios.

System Requirements

Minimum Requirements

  • CPU: 1 core
  • RAM: 2GB
  • Disk: 1GB free space
  • OS: Linux, macOS, or Windows (WSL2)
  • Node.js: 18.0.0 or higher
  • CPU: 4 cores
  • RAM: 8GB
  • Disk: 10GB SSD
  • OS: Ubuntu 22.04 LTS or macOS 13+
  • Node.js: 18.20.0 LTS

Production Requirements

  • CPU: 8+ cores
  • RAM: 16GB+
  • Disk: 50GB+ SSD
  • OS: Ubuntu 22.04 LTS (recommended)
  • Node.js: 18.20.0 LTS
  • Database: PostgreSQL 15+
  • Cache: Redis 7+
  • Load Balancer: HAProxy 2.8+

Platform-Specific Installation

macOS

bash
# Install Node.js (if not already installed)
brew install node@18

# Install PostgreSQL and Redis
brew install postgresql@15 redis

# Start services
brew services start postgresql@15
brew services start redis

# Install FlexGate
npm install -g flexgate-proxy

# Verify installation
flexgate --version

Using Podman

bash
# Install Podman
brew install podman

# Initialize Podman machine
podman machine init
podman machine start

# Clone FlexGate repository
git clone https://github.com/tapas100/flexgate-proxy.git
cd flexgate-proxy

# Start all services
make podman:start

Ubuntu/Debian

APT Installation

bash
# Update package index
sudo apt update

# Install Node.js 18
curl -fsSL https://deb.nodesource.com/setup_18.x | sudo -E bash -
sudo apt install -y nodejs

# Install PostgreSQL 15
sudo sh -c 'echo "deb http://apt.postgresql.org/pub/repos/apt $(lsb_release -cs)-pgdg main" > /etc/apt/sources.list.d/pgdg.list'
wget --quiet -O - https://www.postgresql.org/media/keys/ACCC4CF8.asc | sudo apt-key add -
sudo apt update
sudo apt install -y postgresql-15

# Install Redis
sudo apt install -y redis-server

# Start services
sudo systemctl start postgresql
sudo systemctl start redis-server
sudo systemctl enable postgresql
sudo systemctl enable redis-server

# Install FlexGate
sudo npm install -g flexgate-proxy

# Create database user
sudo -u postgres psql -c "CREATE USER flexgate WITH PASSWORD 'flexgate';"
sudo -u postgres psql -c "CREATE DATABASE flexgate OWNER flexgate;"

# Initialize FlexGate
flexgate init

# Start FlexGate
flexgate start

Docker Installation

bash
# Install Docker
curl -fsSL https://get.docker.com -o get-docker.sh
sudo sh get-docker.sh
sudo usermod -aG docker $USER
newgrp docker

# Clone repository
git clone https://github.com/tapas100/flexgate-proxy.git
cd flexgate-proxy

# Start services
docker-compose up -d

# Check status
docker-compose ps

CentOS/RHEL/Fedora

YUM/DNF Installation

bash
# Install Node.js 18
curl -fsSL https://rpm.nodesource.com/setup_18.x | sudo bash -
sudo dnf install -y nodejs

# Install PostgreSQL 15
sudo dnf install -y https://download.postgresql.org/pub/repos/yum/reporpms/EL-$(rpm -E %{rhel})-x86_64/pgdg-redhat-repo-latest.noarch.rpm
sudo dnf install -y postgresql15-server

# Initialize and start PostgreSQL
sudo /usr/pgsql-15/bin/postgresql-15-setup initdb
sudo systemctl enable postgresql-15
sudo systemctl start postgresql-15

# Install Redis
sudo dnf install -y redis
sudo systemctl enable redis
sudo systemctl start redis

# Install FlexGate
sudo npm install -g flexgate-proxy

# Configure database
sudo -u postgres psql -c "CREATE USER flexgate WITH PASSWORD 'flexgate';"
sudo -u postgres psql -c "CREATE DATABASE flexgate OWNER flexgate;"

# Initialize and start
flexgate init
flexgate start
bash
# Install Podman (usually pre-installed on RHEL 8+)
sudo dnf install -y podman podman-compose

# Clone repository
git clone https://github.com/tapas100/flexgate-proxy.git
cd flexgate-proxy

# Start services with Podman
make podman:start

Windows (WSL2)

Prerequisites

  1. Install WSL2:
powershell
# Run in PowerShell as Administrator
wsl --install
  1. Install Ubuntu from Microsoft Store

  2. Continue in Ubuntu terminal:

bash
# Update packages
sudo apt update && sudo apt upgrade -y

# Install Node.js 18
curl -fsSL https://deb.nodesource.com/setup_18.x | sudo -E bash -
sudo apt install -y nodejs

# Install PostgreSQL and Redis
sudo apt install -y postgresql redis-server

# Start services
sudo service postgresql start
sudo service redis-server start

# Install FlexGate
npm install -g flexgate-proxy

# Configure database
sudo -u postgres psql -c "CREATE USER flexgate WITH PASSWORD 'flexgate';"
sudo -u postgres psql -c "CREATE DATABASE flexgate OWNER flexgate;"

# Initialize
flexgate init
flexgate start

Container Deployment

Docker

Quick Start

bash
# Pull the latest image
docker pull flexgate/flexgate-proxy:latest

# Run with basic configuration
docker run -d \
  --name flexgate \
  -p 3000:3000 \
  -e DB_HOST=host.docker.internal \
  -e DB_PORT=5432 \
  -e DB_NAME=flexgate \
  -e DB_USER=flexgate \
  -e DB_PASSWORD=flexgate \
  flexgate/flexgate-proxy:latest

Docker Compose (Full Stack)

Create docker-compose.yml:

yaml
version: '3.8'

services:
  postgres:
    image: postgres:15-alpine
    environment:
      POSTGRES_USER: flexgate
      POSTGRES_PASSWORD: flexgate
      POSTGRES_DB: flexgate
    volumes:
      - postgres-data:/var/lib/postgresql/data
    ports:
      - "5432:5432"

  redis:
    image: redis:7-alpine
    ports:
      - "6379:6379"
    volumes:
      - redis-data:/data

  flexgate:
    image: flexgate/flexgate-proxy:latest
    environment:
      DB_HOST: postgres
      DB_PORT: 5432
      DB_NAME: flexgate
      DB_USER: flexgate
      DB_PASSWORD: flexgate
      REDIS_HOST: redis
      REDIS_PORT: 6379
    ports:
      - "3000:3000"
    depends_on:
      - postgres
      - redis

  prometheus:
    image: prom/prometheus:latest
    volumes:
      - ./infra/prometheus/prometheus.yml:/etc/prometheus/prometheus.yml
      - prometheus-data:/prometheus
    ports:
      - "9090:9090"

  grafana:
    image: grafana/grafana:latest
    environment:
      GF_SECURITY_ADMIN_PASSWORD: admin
    volumes:
      - grafana-data:/var/lib/grafana
    ports:
      - "3001:3000"

volumes:
  postgres-data:
  redis-data:
  prometheus-data:
  grafana-data:

Start the stack:

bash
docker-compose up -d

Podman

bash
# Install Podman
# macOS
brew install podman

# Ubuntu/Debian
sudo apt install -y podman

# Fedora/RHEL/CentOS
sudo dnf install -y podman

# Initialize Podman machine (macOS only)
podman machine init
podman machine start

# Clone repository
git clone https://github.com/tapas100/flexgate-proxy.git
cd flexgate-proxy

# Build image
podman build -t localhost/flexgate-proxy:latest -f Containerfile .

# Start with podman-compose
pip3 install --user podman-compose
podman-compose -f podman-compose.yml up -d

# Check status
podman ps

Podman with systemd

Create systemd service file /etc/systemd/system/flexgate.service:

ini
[Unit]
Description=FlexGate API Gateway
After=network.target postgresql.service redis.service

[Service]
Type=notify
ExecStartPre=-/usr/bin/podman pull flexgate/flexgate-proxy:latest
ExecStart=/usr/bin/podman run \
  --name flexgate \
  --network host \
  -e DB_HOST=localhost \
  -e DB_PORT=5432 \
  flexgate/flexgate-proxy:latest
ExecStop=/usr/bin/podman stop -t 10 flexgate
ExecStopPost=/usr/bin/podman rm -f flexgate
Restart=on-failure
RestartSec=30

[Install]
WantedBy=multi-user.target

Enable and start:

bash
sudo systemctl daemon-reload
sudo systemctl enable flexgate
sudo systemctl start flexgate
sudo systemctl status flexgate

Kubernetes Deployment

Prerequisites

  • Kubernetes cluster 1.24+
  • kubectl configured
  • Helm 3+ (optional)

Using kubectl

1. Create namespace

bash
kubectl create namespace flexgate

2. Deploy PostgreSQL

yaml
# postgres.yaml
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: postgres-pvc
  namespace: flexgate
spec:
  accessModes:
    - ReadWriteOnce
  resources:
    requests:
      storage: 10Gi
---
apiVersion: apps/v1
kind: Deployment
metadata:
  name: postgres
  namespace: flexgate
spec:
  replicas: 1
  selector:
    matchLabels:
      app: postgres
  template:
    metadata:
      labels:
        app: postgres
    spec:
      containers:
      - name: postgres
        image: postgres:15-alpine
        env:
        - name: POSTGRES_USER
          value: flexgate
        - name: POSTGRES_PASSWORD
          valueFrom:
            secretKeyRef:
              name: flexgate-secrets
              key: db-password
        - name: POSTGRES_DB
          value: flexgate
        ports:
        - containerPort: 5432
        volumeMounts:
        - name: postgres-storage
          mountPath: /var/lib/postgresql/data
      volumes:
      - name: postgres-storage
        persistentVolumeClaim:
          claimName: postgres-pvc
---
apiVersion: v1
kind: Service
metadata:
  name: postgres
  namespace: flexgate
spec:
  selector:
    app: postgres
  ports:
  - port: 5432
    targetPort: 5432

3. Deploy Redis

yaml
# redis.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
  name: redis
  namespace: flexgate
spec:
  replicas: 1
  selector:
    matchLabels:
      app: redis
  template:
    metadata:
      labels:
        app: redis
    spec:
      containers:
      - name: redis
        image: redis:7-alpine
        ports:
        - containerPort: 6379
---
apiVersion: v1
kind: Service
metadata:
  name: redis
  namespace: flexgate
spec:
  selector:
    app: redis
  ports:
  - port: 6379
    targetPort: 6379

4. Create secrets

bash
kubectl create secret generic flexgate-secrets \
  --from-literal=db-password=your-secure-password \
  --from-literal=jwt-secret=$(openssl rand -base64 32) \
  --from-literal=session-secret=$(openssl rand -base64 32) \
  -n flexgate

5. Deploy FlexGate

yaml
# flexgate.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
  name: flexgate
  namespace: flexgate
spec:
  replicas: 3
  selector:
    matchLabels:
      app: flexgate
  template:
    metadata:
      labels:
        app: flexgate
    spec:
      containers:
      - name: flexgate
        image: flexgate/flexgate-proxy:latest
        env:
        - name: DB_HOST
          value: postgres
        - name: DB_PORT
          value: "5432"
        - name: DB_NAME
          value: flexgate
        - name: DB_USER
          value: flexgate
        - name: DB_PASSWORD
          valueFrom:
            secretKeyRef:
              name: flexgate-secrets
              key: db-password
        - name: REDIS_HOST
          value: redis
        - name: REDIS_PORT
          value: "6379"
        - name: JWT_SECRET
          valueFrom:
            secretKeyRef:
              name: flexgate-secrets
              key: jwt-secret
        ports:
        - containerPort: 3000
          name: http
        livenessProbe:
          httpGet:
            path: /health
            port: 3000
          initialDelaySeconds: 30
          periodSeconds: 10
        readinessProbe:
          httpGet:
            path: /health
            port: 3000
          initialDelaySeconds: 5
          periodSeconds: 5
        resources:
          requests:
            memory: "512Mi"
            cpu: "250m"
          limits:
            memory: "2Gi"
            cpu: "1000m"
---
apiVersion: v1
kind: Service
metadata:
  name: flexgate
  namespace: flexgate
spec:
  type: LoadBalancer
  selector:
    app: flexgate
  ports:
  - port: 80
    targetPort: 3000
    protocol: TCP

6. Deploy all resources

bash
kubectl apply -f postgres.yaml
kubectl apply -f redis.yaml
kubectl apply -f flexgate.yaml

# Check status
kubectl get pods -n flexgate
kubectl get svc -n flexgate

Using Helm

bash
# Add FlexGate Helm repository
helm repo add flexgate https://charts.flexgate.io
helm repo update

# Install FlexGate
helm install flexgate flexgate/flexgate \
  --namespace flexgate \
  --create-namespace \
  --set postgresql.enabled=true \
  --set redis.enabled=true \
  --set replicaCount=3 \
  --set ingress.enabled=true \
  --set ingress.hosts[0].host=api.yourdomain.com

# Check status
helm status flexgate -n flexgate

Cloud Platform Deployment

AWS

ECS Fargate

See Cloud Deployment Guide

EKS

See Kubernetes Deployment Guide

Azure

Azure Container Instances

See Cloud Deployment Guide

Google Cloud

Cloud Run

See Cloud Deployment Guide

Build from Source

Clone Repository

bash
git clone https://github.com/tapas100/flexgate-proxy.git
cd flexgate-proxy

Install Dependencies

bash
npm install

Configure Environment

bash
cp .env.example .env
# Edit .env with your configuration

Build TypeScript

bash
npm run build

Run Database Migrations

bash
# Start database
npm run db:start

# Run migrations
npm run migrate

Start Development Server

bash
npm run start:dev

Build Container Image

bash
# Using Docker
docker build -t flexgate-proxy:local .

# Using Podman
podman build -t flexgate-proxy:local -f Containerfile .

Post-Installation Steps

1. Verify Installation

bash
# Check version
flexgate --version

# Check health
curl http://localhost:3000/health

2. Change Default Credentials

bash
# Using CLI
flexgate admin:password

# Or edit config
vim ~/.flexgate/config/proxy.yml

3. Configure TLS/SSL

See SSL/TLS Configuration

4. Set Up Monitoring

See Observability Guide

5. Create Backups

See Backup Guide

Troubleshooting

Installation Failed

Error: npm install -g flexgate-proxy fails

Solution:

bash
# Clear npm cache
npm cache clean --force

# Try with sudo (not recommended for global installs)
sudo npm install -g flexgate-proxy --unsafe-perm=true

# Or use nvm for local installation
nvm install 18
nvm use 18
npm install -g flexgate-proxy

Database Connection Issues

Error: ECONNREFUSED 127.0.0.1:5432

Solution:

bash
# Check PostgreSQL is running
sudo systemctl status postgresql

# Start if not running
sudo systemctl start postgresql

# Check connection
psql -U flexgate -d flexgate -h localhost

Port Conflicts

Error: EADDRINUSE :::3000

Solution:

bash
# Find process using port
lsof -i :3000

# Kill process
kill -9 <PID>

# Or use different port
export FLEXGATE_PORT=3001
flexgate start

Uninstallation

NPM Global

bash
npm uninstall -g flexgate-proxy

Container

bash
# Docker
docker-compose down -v

# Podman
podman-compose down
podman system prune -af

Source Build

bash
# Stop service
flexgate stop

# Remove installation
rm -rf ~/.flexgate
npm uninstall -g flexgate-proxy

Next Steps


Need help? Check our GitHub Discussions or open an issue.

Released under the MIT License.