Skip to content

AngusGM Application Installation and Deployment

Note

  1. AngusGM serves as a foundational application. Other Angus business applications must run after AngusGM is operational.
  2. The following instructions are for the Enterprise Edition installation. To install other versions, replace the version identifier Enterprise with Community or Datacenter.

I. Pre-Deployment Preparation

  • System Requirements

    • Operating System: Supports Linux/Windows/macOS.
    • Computational Resources: Minimum 2 CPU cores, 4GB RAM; recommended 4 CPU cores, 8GB RAM.
    • Disk Space: Minimum 10GB free space; recommended 100GB.
  • Runtime Environment

    • ZIP Package Deployment: Requires OpenJDK 17+.
    • Docker and Compose Deployment: Requires Docker (recommended version V20.10+).
  • Middleware

    • Database: Requires MySQL 5.7+.
    • Redis Cache: Requires Redis 7.0+.
  • Application Versions

    • Community Edition (Community): Permanently free version.
    • Enterprise Edition (Enterprise): Paid version requiring a license. Functionally identical to the Community Edition but supports more users.
    • Datacenter Edition (Datacenter): Paid version requiring a license. Functionally identical to the Community Edition but supports multi-tenancy and more users.

    Note: The following instructions are for the Enterprise Edition. Replace Enterprise with Community or Datacenter for other versions.

II. Manual Configuration and Installation

1. Download and Extract

bash
# Download the installation package  
curl -LO https://nexus.xcan.cloud/repository/release/package/AngusGM-Enterprise-1.0.0.zip  

# Extract the package to the target directory  
mkdir -p /opt/AngusGM  
unzip -qo AngusGM-Enterprise-1.0.0.zip -d /opt/AngusGM  

# Navigate to the installation directory  
cd /opt/AngusGM

2. Configure the Application

bash
# Copy the configuration template  
cp conf/.priv-template.env conf/.priv.env  

# Edit the configuration file  
vi conf/.priv.env

Modify the following options with your settings:

dotenv
# Set to `AngusGM` for initial installation or reinstallation (automatically cleared post-installation)  
INSTALL_APPS=AngusGM  
# Specify the database type (required)  
DATABASE_TYPE=MYSQL  

# Application IP (IPv4) or hostname. If unset, the system auto-detects the IPv4 address.  
# Note: In Docker environments, this must be set to the host machine's IP.  
GM_HOST=  
# Application port (default: `8802`)  
GM_PORT=8802  
# Web access URL (format: `http(s)://domain_or_IP:port`). If unset, defaults to `http://GM_HOST:GM_PORT`.  
GM_WEBSITE=  

# Administrator email (optional)  
GM_ADMIN_EMAIL=  
# Administrator username (default: `admin`)  
GM_ADMIN_USERNAME=admin  
# Administrator password (default: `admin@123`)  
GM_ADMIN_PASSWORD=admin@123  

# Database IP or hostname (required)  
GM_DB_HOST=127.0.0.1  
# Database port (required)  
GM_DB_PORT=3306  
# Database name (required)  
GM_DB_NAME=angus  
# Database username (must have full permissions for Angus databases)  
GM_DB_USER=Angus  
# Database password (required)  
GM_DB_PASSWORD=Angus123  

# Redis deployment type (required)  
REDIS_DEPLOYMENT=SINGLE  
# Redis IP or hostname (required)  
REDIS_HOST=127.0.0.1  
# Redis port (required)  
REDIS_PORT=6379  
# Redis password (required)  
REDIS_PASSWORD=Angus123  
# ------------------------

Note

  1. AngusGM offers flexible deployment. The above are recommended key configurations for quick installation.
  2. For additional configuration options, refer to Configuration Reference -> Application Configuration.

3. Start the Application

bash
# Run the startup command  
./startup-gm.sh  

# Monitor startup logs  
tail -f -n1000 logs/gm.log

Note: This script runs the application as a background process. Installation and startup take ~2 minutes. Check logs for details.

Other management commands:

bash
# Stop the application  
./shutdown-gm.sh  

# Check application status  
./status-gm.sh  

# Uninstall the application  
./shutdown-gm.sh && rm -rf /opt/AngusGM

Note

  1. The script runs the application in the background. Startup takes ~1 minute. Check logs for details.
  2. For Nginx proxy or virtual host setup, refer to Configuration Reference -> Nginx Proxy Configuration.

III. Docker Installation

1. Prepare Installation Directory and Permissions

bash
# Create the main installation directory (required for volume mounting)  
mkdir -p /opt/AngusGM  

# Navigate to the directory  
cd /opt/AngusGM  

# Create subdirectories (configs, data, logs, etc.)  
mkdir -p {data,logs,plugins,tmp}  

# Set permissions (ensure container user has RW access)  
# Note: Production environments should use finer-grained permissions (e.g., chown 1000:1000).  
chmod -R 777 /opt/AngusGM

2. Pull Image and Initialize Configuration

bash
# Pull the official Enterprise image from Docker Hub  
docker pull xcancloud/angusgm-enterprise:1.0.0  

# Temporarily run a container to export default configs  
docker create --name temp_container xcancloud/angusgm-enterprise:1.0.0  
docker cp temp_container:/opt/AngusGM/default-conf conf  
docker rm -f temp_container  

# Create a private config file from the template  
cp conf/.priv-template.env conf/.priv.env  

# Edit the config file (align with manual setup)  
vi conf/.priv.env

3. Start the Application Container

bash
# Run the container in detached mode  
# Prerequisites:  
#   1. Database service is running.  
#   2. Redis service is running.  
#   3. conf/.priv.env is correctly configured.  
docker run \  
  --name angusgm -d \  
  -p 8802:8802 \  
  -v ./conf:/opt/AngusGM/conf \  
  -v ./data:/opt/AngusGM/data \  
  -v ./logs:/opt/AngusGM/logs \  
  -v ./plugins:/opt/AngusGM/plugins \  
  -v ./tmp:/opt/AngusGM/tmp \  
  xcancloud/angusgm-enterprise:1.0.0

Parameter Descriptions:

ParameterPurpose
-dRun container in detached mode.
--name angusgmAssign container name angusgm for management.
-p 8802:8802Map host port 8802 to container port 8802.
-v ./conf:/opt/AngusGM/confMount config directory.
-v ./data:/opt/AngusGM/dataMount data directory.
-v ./logs:/opt/AngusGM/logsMount logs directory.
-v ./plugins:/opt/AngusGM/pluginsMount plugins directory.
-v ./tmp:/opt/AngusGM/tmpMount temp directory.
xcancloud/angusgm-enterprise:1.0.0Specify the image name and tag (repository/image:tag).

IV. Docker Compose Installation

1. Install Only AngusGM

Important

  • This setup is for standalone middleware (MySQL/Redis).
  • Ensure:
    • MySQL/Redis services are deployed and running.
    • Network connectivity is verified.

1) Prepare Directory and Permissions

Same as Docker Installation -> Step 1.

2) Pull Image and Initialize Config

Same as Docker Installation -> Step 2.

3) Create and Configure gm.yml

bash
cat << EOF > gm.yml  
services:  
  angusgm:  
    image: xcancloud/angusgm-enterprise:1.0.0  
    container_name: angusgm  
    restart: unless-stopped  
    volumes:  
      - ./conf:/opt/AngusGM/conf  
      - ./data:/opt/AngusGM/data  
      - ./logs:/opt/AngusGM/logs  
      - ./plugins:/opt/AngusGM/plugins  
      - ./tmp:/opt/AngusGM/tmp  
    ports:  
      - "8802:8802"  
    healthcheck:  
      test: [ "CMD", "sh", "-c", "wget -q -O - http://127.0.0.1:8802/actuator/health | grep '\"status\":\"UP\"'" ]  
      interval: 15s  
      timeout: 5s  
      retries: 20  
EOF

4) Start the Container

bash
# Start the container  
docker compose -f gm.yml up -d  
# Monitor logs  
docker compose -f gm.yml logs -f

2. Full Installation with Middleware

Important

  • Includes: Nginx, MySQL, Redis, AngusGM.
  • Requires:
    • Pre-configured domain (or IP for Nginx virtual host).
    • Strong passwords for MySQL/Redis.
    • SSL certificates for HTTPS (configured in ./templates/nginx/gm.conf).
    • Default parameters can be modified in ./templates/gm/.priv.env.

1) Download and Extract

bash
# Download the package  
curl -LO https://nexus.xcan.cloud/repository/release/compose/AngusGM-Enterprise-1.0.0.zip  

# Extract to target directory  
mkdir -p /opt/AngusGM  
unzip -qo AngusGM-Enterprise-1.0.0.zip -d /opt/AngusGM

2) Configure Parameters

bash
# Navigate to the directory  
cd /opt/AngusGM  

# Create subdirectories  
mkdir -p {nginx/conf.d,nginx/logs,mysql/data,mysql/conf,redis/data}  
mkdir -p gm/{data,logs,plugins,tmp}  

# Edit the environment file  
vi .env  

# Example configuration:  
############## App Config ##############  
# Server IP  
APP_HOST=192.168.3.7  
# Database name  
APP_DATABASE_NAME=angus  
# Timezone  
TIMEZONE=Asia/Shanghai  
# AngusGM domain (or IP)  
NGINX_GM_DOMAIN=my-gm.xcan.cloud  

############## Credentials ##############  
# MySQL root password (change this!)  
MYSQL_ROOT_PASSWORD=Angus123  
# Redis password (change this!)  
REDIS_PASSWORD=Angus123

3) Start Containers

bash
# Start containers  
docker compose -f gm-full.yml up -d  
# Monitor logs  
docker compose -f gm-full.yml logs -f

V. Deployment Verification

  1. Check Logs
bash
tail -f /opt/AngusGM/logs/gm.log

Expected output: Application started successfully [PID=21601] and Http(s) port 8802 is ready.

  1. Health Check Endpoint
bash
curl http://localhost:8802/actuator/health

Expected output: {"status":"UP"}.

  1. Login Verification
  • URL: http://<IP>:8802 or http://<domain>
  • Default credentials:
    • Username: admin
    • Password: admin@123

VI. Application Management

  • Linux/MacOS
bash
# Start  
./startup-gm.sh  
# Stop  
./shutdown-gm.sh  
# View logs  
tail -f logs/gm.log
  • Docker
bash
# Start  
docker start angusgm  
# Stop  
docker stop angusgm  
# View logs  
docker logs angusgm
  • Docker Compose
bash
# Start  
docker compose -f gm-full.yml up -d  
# Stop  
docker compose -f gm-full.yml stop  
# View logs  
docker compose -f gm-full.yml logs

VII. Troubleshooting

1. Common Issues

  • Port Conflict

    • Error: Error: Port 8802 already in use
    • Solution: Change GM_PORT or terminate the conflicting process.
  • Database Connection Failure

    • Error: Connection refused to MySQL at 127.0.0.1:3306
    • Solution: Verify network, firewall, and credentials.

2. Log Analysis

  • Log Paths
    1. Runtime logs: /opt/AngusGM/logs/gm.log
    2. Error logs: /opt/AngusGM/logs/gm-error.log
  • Keywords: ERROR, Connection refused

3. Technical Support

  • Email: technical_support@xcan.cloud
  • Requirements: Attach error logs and environment details (e.g., deployment method, version).

VIII. Configuration Reference

Application Configuration (.priv.env)

ini
#-----------------------------------------------------------------------------------
# Installation Configuration
#-----------------------------------------------------------------------------------
# Enable automatic initialization and installation application options, which are enabled by default and will automatically
# turn off after successful installation. Important: Enabling reinstallation will result in data loss in the database.
INSTALL_APPS=
# Installation and deploy type, default to SHARED, supporting options:
#  - SHARED: shared installation, all applications share one database.
#  - STANDALONE: tandalone installation, each application uses its own database.
# Note: When all applications share one database, other applications will share a database with the global management application,
# that is, all applications share the database configuration in gm.env; if each application uses an independent database,
# each application needs to configure its own independent database separately.
INSTALL_TYPE=SHARED
# Database type, default is `MYSQL`, supporting options: MYSQL, POSTGRES.
DATABASE_TYPE=MYSQL
# Application deployment and runtime environment, default is `HOST`, supporting options: CONTAINER (Docker, Kubernetes), HOST(Physical/Virtual Machine).
RUNTIME=HOST
# Application and database timezone configuration.
TIMEZONE=Asia/Shanghai
# Maximum upload file size, default value is 1000MB.
MAX_UPLOAD_FILE_SIZE=1000MB
# Maximum upload request size, limiting the total size of multiple files in batch upload, default value is 2000MB.
MAX_UPLOAD_REQUEST_SIZE=2000MB

#-----------------------------------------------------------------------------------
# AngusGM Application Configuration
#-----------------------------------------------------------------------------------
# Application IP(v4) or hostname. Automatically obtain the IPv4 address of the running environment when not configured.
GM_HOST=
# Application port, default value is `8802`.
GM_PORT=8802
# Linked website domain url. If empty, it will be set to http://GM_HOST:GM_PORT. Example value: https://gm.xcan.cloud.
GM_WEBSITE=
# Application web static resources directory, efault value is `classpath:/static/,file:./statics/`.
GM_WEB_STATICS=classpath:/static/,file:/Volumes/workspace/workspace_angus/seek/AngusGM/web/dist/
# Specify the plugins to load, only load the specified plugins when configured, load all plugins when not configured.
GM_PLUGIN_LOADED=aliyun-sms-plugin,huaweicloud-sms-plugin
# Specify the plugins to ignore, ignore loading the specified plugins when configured, load all plugins when not configured, set to * when ignoring all plugins.
GM_PLUGIN_IGNORED=
# SaaS cloud service API interface address, used to fetch data from the cloud.
GM_CLOUD_APIS_URL_PREFIX=https://bj-c1-prod-apis.xcan.cloud/gm
# Self-host service API interface address, used to read data from the current hosting service. If empty, it will be set to http://GM_HOST:GM_PORT
GM_APIS_URL_PREFIX=
#-----------------------------------------------------------------------------------
# AngusGM Administrator User Configuration
#-----------------------------------------------------------------------------------
# Administrator user email.
GM_ADMIN_EMAIL=
# Administrator user account, default value is `admin`.
GM_ADMIN_USERNAME=admin
# Administrator user password, default value is `admin@123`.
GM_ADMIN_PASSWORD=admin@123
#-----------------------------------------------------------------------------------
# AngusGM Database Configuration
#-----------------------------------------------------------------------------------
# Database IP or hostname, default value is `127.0.0.1`.
GM_DB_HOST=127.0.0.1
# Database port, default value is `3306`.
GM_DB_PORT=3306
# Database name, default value is `angus`.
GM_DB_NAME=angus
# Database authentication username, default value is `root`.
GM_DB_USER=root
# Database authentication user password, default value is `Angus123`.
GM_DB_PASSWORD=Angus123

#-----------------------------------------------------------------------------------
# Redis Configuration
#-----------------------------------------------------------------------------------
#-----------------------------------------------------------------------------------
# Redis deployment mode, default to SINGLE, supporting options: SINGLE (single instance), SENTINEL (sentinel mode), CLUSTER (cluster mode).
REDIS_DEPLOYMENT=SINGLE
# IP or hostname of Redis in single instance mode, default value is `127.0.0.1`.
REDIS_HOST=127.0.0.1
# Port of Redis in single instance mode, default value is `6379`.
REDIS_PORT=6379
# Redis authentication password, default value is `Angus123`, required when Redis security authentication is enabled.
REDIS_PASSWORD=Angus123
# Master node name in sentinel mode, configuration example: mymaster.
REDIS_SENTINEL_MASTER=
# Redis instance list in sentinel mode or cluster mode, configuration example: 192.168.0.100:6379,192.168.0.101:6379,192.168.0.102:6379.
REDIS_NODES=

#-----------------------------------------------------------------------------------
# File Storage Configuration
#-----------------------------------------------------------------------------------
# Storage type, default to `LOCAL`, supporting options: LOCAL (local storage), AWS_S3 (S3 protocol object storage).
STORAGE_TYPE=LOCAL
# File storage path in local storage, default storage location is `${INSTALL_PATH}/data/files` if not specified.
STORAGE_LOCAL_DIR=
# Region name for object storage (S3), example value: us-west-2.
STORAGE_S3_REGION=
# Service address for object storage (S3), example value: http://oss-cn-beijing.aliyuncs.com.
STORAGE_S3_ENDPOINT=
# Access key for object storage (S3) service, must have bucket creation permission, example value: ltAI5tBmg9Ym14apePKaGMfm.
STORAGE_S3_ACCESSKEY=
# Secret key for object storage (S3) service, example value: ltAI5tBmg9Ym14apePKaGMfm.
STORAGE_S3_SECRETKEY=

#-----------------------------------------------------------------------------------
# Cloud Store Configuration
#-----------------------------------------------------------------------------------
STORE_CLOUD_APIS_URL_PREFIX=https://bj-c1-prod-apis.xcan.cloud/ess

#-----------------------------------------------------------------------------------
# Eureka Configuration
#-----------------------------------------------------------------------------------
# Configure the Eureka server and dashboard username and password. The default dashboard address is http://GM_HOST:GM_PORT/eureka-dashboard.
EUREKA_USER_NAME=eureka
EUREKA_USER_PASSWORD=eureka

#-----------------------------------------------------------------------------------
# OAuth2.0 Introspect Client Configuration
#-----------------------------------------------------------------------------------
OAUTH2_INTROSPECT_CLIENT_ID=client-credentials-introspect-client
OAUTH2_INTROSPECT_CLIENT_SECRET=secret

#-----------------------------------------------------------------------------------
# Disable SSL for Self-signed certificate
#-----------------------------------------------------------------------------------
DISABLE_SSL_VERIFICATION=false

Nginx Virtual Host Configuration

  • nginx.conf
nginx
worker_processes  auto;
error_log  /var/log/nginx/error.log;

events {
    worker_connections  1024;
    multi_accept on;
    use epoll;
}

http {
    include       mime.types;
    default_type  application/octet-stream;

    log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                 '$status $body_bytes_sent "$http_referer" '
                 '"$http_user_agent" "$http_x_forwarded_for"';

    access_log  /var/log/nginx/access.log  main;

    sendfile       on;
    tcp_nopush     on;
    keepalive_timeout  65;

    # Set security header
    add_header X-Frame-Options "SAMEORIGIN";
    add_header X-Content-Type-Options "nosniff";
    add_header X-XSS-Protection "1; mode=block";

    limit_conn_zone $binary_remote_addr zone=conn_limit:10m;
    limit_conn conn_limit 100;

    gzip on;
    gzip_min_length 100k;
    gzip_vary on;
    gzip_proxied any;
    gzip_comp_level 6;
    gzip_types text/plain text/css application/json application/javascript text/xml application/xml application/xml+rss text/javascript;

    include /etc/nginx/conf.d/*.conf;
}
  • gm.conf
nginx
server {
    listen 80;
    server_name my-gm.xcan.cloud;

    # Health check endpoint
    location = /health {
        access_log off;
        return 200 "OK";
    }

    # Caching static files
    location ~* \.(jpg|jpeg|png|gif|ico|css|js)$ {
         proxy_pass http://192.168.3.7:8802;
         expires 1d;
         add_header Cache-Control "public, max-age=86400, immutable";
         access_log off;
    }

    location /ws/ {
         proxy_pass http://192.168.3.7:8802;
         proxy_http_version 1.1;
         proxy_set_header Upgrade $http_upgrade;
         proxy_set_header Connection "upgrade";
         proxy_set_header Host $host;
         proxy_set_header X-Real-IP $remote_addr;
         proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
         proxy_set_header X-Forwarded-Proto $scheme;
         proxy_read_timeout 86400s;
         proxy_send_timeout 86400s;
    }

    location / {
         proxy_pass http://192.168.3.7:8802;
         proxy_set_header Priority "";
         proxy_set_header Host $host;
         proxy_set_header X-Real-IP $remote_addr;
         proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
         proxy_set_header X-Forwarded-Proto $scheme;
         proxy_connect_timeout 10s;
         proxy_read_timeout 300s;
         proxy_send_timeout 300s;
    }
}

Released under the GPL-3.0 License.