Skip to content

Installing AngusTester

Note

  1. Before installing and running the AngusTester application, you must first install and run the AngusGM base application.
  2. The following instructions are for the Enterprise version installation process. To install other versions, replace the version type flag Enterprise with Community or Datacenter.

I. Prerequisites

  • System Requirements

    • Operating System: Supports Linux / MacOS / Windows Server.
    • Compute Resources: Minimum configuration requires 2-core CPU, 4GB RAM, recommended configuration 4-core CPU, 8GB RAM.
    • Disk Space: Minimum 10GB free space, recommended configuration 100GB.
  • Runtime Environment

    • Manual installation: Requires OpenJDK 17+, which will be installed by default.
    • 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, requires a license. Supports more advanced features and more users.
    • Datacenter Edition (Datacenter): Paid version, requires a license. Supports more advanced features, multi-tenancy, and more users.

II. Manual Configuration Installation

1. Download and Extract

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

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

# Navigate to the installation directory
cd /opt/AngusTester

2. Configure the Application

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

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

Modify the following options with your configuration:

dotenv
# Set to `AngusTester` for initial installation or reinstallation; will be cleared automatically after installation
INSTALL_APPS=AngusTester
# Specify the database type (required)
DATABASE_TYPE=MYSQL

# Application IP (v4) or hostname. If not configured, the IPv4 address of the runtime environment will be used automatically.
# Note: In a Docker environment, this must be set to the host machine's IP address.
TESTER_HOST=
# Application port, default value is `8901`
TESTER_PORT=8901
# Configure the web access URL in the format: `http(s)://domain_or_IP:port`. If not specified, it will default to `http://GM_HOST:GM_PORT`.
GM_WEBSITE=

# Administrator name (optional)
GM_ADMIN_FULL_NAME=
# Administrator email (optional)
GM_ADMIN_EMAIL=
# Administrator username, defaults to `admin` if not specified
GM_ADMIN_USERNAME=admin
# Administrator password, defaults to `admin@123` if not specified
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, required)
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

# Configure AngusTester access domain (optional)
TESTER_WEBSITE=
# ------------------------

Note

  1. Except for INSTALL_APPS and TESTER_WEBSITE, all other configuration options should match those in the AngusGM application configuration.
  2. For more configuration options and details, refer to the Configuration Reference -> Application Configuration section below.

3. Start the Application

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

# View the startup logs
tail -f -n1000 logs/tester.log

Note

  1. This script runs the application as a background process. Automatic installation and startup take approximately 2 minutes. Check the logs directory for detailed execution information.
  2. If you need to proxy the AngusTester application via Nginx or configure a domain name for the application using Nginx virtual hosting, refer to the Configuration Reference -> Nginx Proxy Configuration section below.

III. Docker Installation

1. Prepare the Installation Directory and Permissions

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

# Navigate to the installation directory
cd /opt/AngusTester

# Create subdirectories for the application (configuration, data, logs, etc.)
mkdir -p {data,logs,plugins,tmp}

# Set directory permissions (ensure the container user has read/write access)
# Note: For production environments, use more granular permission controls (e.g., chown 1000:1000)
chmod -R 777 /opt/AngusTester

2. Pull the Image and Initialize Configuration

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

# Temporarily run a container to export default configuration files to the host directory
# This step only needs to be performed once to initialize the configuration template
docker create --name temp_container xcancloud/angustester-enterprise:1.0.0
docker cp temp_container:/opt/AngusTester/default-conf conf
docker rm -f temp_container

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

# Edit the configuration file to set database connections, Redis, and other critical parameters
# The configuration content is the same as in "Manual Configuration Installation -> Configure the Application"
vi conf/.priv.env

3. Start the Application Container

bash
# Start the application container (in detached mode)
# Prerequisites:
#   1. The database service is deployed and running.
#   2. The Redis service is deployed and running.
#   3. The conf/.priv.env file is correctly configured with the above service connection details.
docker run \
  --name angustester -d \
  -p 8901:8901 \
  -p 6806:6806 \
  -v ./conf:/opt/AngusTester/conf \
  -v ./data:/opt/AngusTester/data \
  -v ./logs:/opt/AngusTester/logs \
  -v ./plugins:/opt/AngusTester/plugins \
  -v ./tmp:/opt/AngusTester/tmp \
  xcancloud/angustester-enterprise:1.0.0

Parameter Explanation:

ParameterPurpose
-dRun the container in detached mode (background)
--name angustesterAssign the name angustester to the container (for easier management)
-p 8901:8901Port mapping: Bind host port 8901 to container port 8901 (format: host_port:container_port)
-p 6806:6806Embedded request proxy service (AngusProxy) port mapping: Bind host port 6806 to container port 6806 (format: host_port:container_port)
-v ./conf:/opt/AngusTester/confConfiguration file mount: Host directory ./conf → Container directory /opt/AngusTester/conf
-v ./data:/opt/AngusTester/dataApplication data mount: Host directory ./data → Container directory /opt/AngusTester/data
-v ./logs:/opt/AngusTester/logsLog file mount: Host directory ./logs → Container directory /opt/AngusTester/logs
-v ./plugins:/opt/AngusTester/pluginsPlugin directory mount: Host directory ./plugins → Container directory /opt/AngusTester/plugins
-v ./tmp:/opt/AngusTester/tmpTemporary file mount: Host directory ./tmp → Container directory /opt/AngusTester/tmp
xcancloud/angustester-enterprise:1.0.0Specify the image name and tag to run (format: repository/image_name:tag)

IV. Docker Compose Installation

Install Only AngusGM Application

Important Notes

  • This deployment plan is designed for scenarios using independent middleware (MySQL/Redis).
  • Before starting the application, ensure:
    • MySQL/Redis services are deployed and running.
    • The database service is operational.
    • AngusGM is running normally.
    • Network connectivity is verified (containers can access middleware).

1) Prepare the Installation Directory and Permissions

The process is the same as Docker Installation -> Prepare the Installation Directory and Permissions.

2) Pull the Image and Initialize Configuration

The process is the same as Docker Installation -> Pull the Image and Initialize Configuration.

3) Create and Configure the tester.yml File

bash
cat << EOF > tester.yml
services:
  angustester:
    image: xcancloud/angustester-enterprise:1.0.0
    container_name: angustester
    restart: unless-stopped
    volumes:
      - ./conf:/opt/AngusTester/conf
      - ./data:/opt/AngusTester/data
      - ./logs:/opt/AngusTester/logs
      - ./plugins:/opt/AngusTester/plugins
      - ./tmp:/opt/AngusTester/tmp
    ports:
      - "8901:8901"
      - "6806:6806"
    environment:
      TZ: ${TIMEZONE:-UTC}
EOF

4) Start the Application Container

bash
# Start the container
docker compose -f tester.yml up -d
# View real-time logs
docker compose -f tester.yml logs -f

Install Full Application and Middleware

Important Notes

  • Full installation includes: Nginx, MySQL, Redis, AngusGM, AngusTester.
  • This solution includes all services, using Nginx to configure virtual hosting. Ensure the access domain is pre-configured (use IP if no domain is available).
  • For MySQL and Redis, change the default passwords to strong passwords for security.
  • For HTTPS access, prepare valid certificates and modify SSL-related configurations in ./templates/nginx/gm.conf and ./templates/nginx/tester.conf.
  • In this installation mode, AngusGM will auto-initialize default configurations. To modify default parameters, edit ./templates/gm/.priv.env and ./templates/tester/.priv.env.

1) Download and Extract

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

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

2) Configure Application Parameters

bash
# Navigate to the installation directory
cd /opt/AngusTester

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

# Edit the environment configuration file
vi .env

# Example configuration:
##############Application Configuration##############
# Application server IP
APP_HOST=192.168.3.7
# Database name
APP_DATABASE_NAME=angus
# System timezone
TIMEZONE=Asia/Shanghai
# AngusGM access domain (or IP)
NGINX_GM_DOMAIN=my-gm.xcan.cloud
# AngusTester access domain (or IP)
NGINX_GM_DOMAIN=my-tester.xcan.cloud

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

3) Start the Application Container

bash
# Start the container
docker compose -f tester-full.yml up -d
# View real-time logs
docker compose -f tester-full.yml logs -f

V. Deployment Verification

  1. Check Runtime Logs
bash
tail -f /opt/AngusTester/logs/tester.log

Expected output: Application started successfully [PID=21601] and Http(s) port 8901 is ready, indicating successful startup.

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

Expected output: {"status":"UP"}, indicating successful startup.

  1. Login Verification
  • Access URL: http://<deployment_IP>:8901 or http://<deployment_domain>
  • Log in using an AngusGM user account. Navigate to AngusTester from the top-left application navigator to confirm successful installation.

VI. Application Management

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

VII. Troubleshooting

1. Common Issues

  • Issue: Port Conflict

    • Error example: Error: Port 8901 already in use
    • Solution: Modify the GM_PORT parameter or terminate the process using the port.
  • Issue: Database Connection Failure

    • Error example: Connection refused to MySQL at 127.0.0.1:3306
    • Solution: Check network connectivity, firewall rules, and database credentials.

2. Log Analysis

  • Log Paths
    1. Runtime logs: /opt/AngusTester/logs/tester.log
    2. Error logs: /opt/AngusTester/logs/tester-error.log
  • Key Search Terms: ERROR, Connection refused

3. Technical Support

  • Contact email: technical_support@xcan.cloud
  • Email requirements: Include error log screenshots and environment details (e.g., deployment method, version number).

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=AngusTester
# 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=
# 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 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

#-----------------------------------------------------------------------------------
# AngusTester Application Configuration
#-----------------------------------------------------------------------------------
# Application IP(v4) or hostname. Automatically obtain the IPv4 address of the running environment when not configured.
# Note: In the docker environment, the host IP address must be specified.
TESTER_HOST=
# Application port, default value is `8901`.
TESTER_PORT=8901
# Linked website domain url. If empty, it will be set to http://TESTER_HOST:TESTER_PORT. Example value: https://tester.xcan.cloud.
TESTER_WEBSITE=
# Application web static resources directory, efault value is `classpath:/static/,file:./statics/`.
TESTER_WEB_STATICS=classpath:/static/,file:./statics/
# Specify the plugins to load, only load the specified plugins when configured, load all plugins when not configured.
TESTER_PLUGIN_LOADED=import-openapi-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.
TESTER_PLUGIN_IGNORED=
# Specify the Mock service connection to the AngusTester service address. If empty, it will be set to http://TESTER_HOST:TESTER_PORT
TESTER_APIS_SERVER_URL=
#-----------------------------------------------------------------------------------
# AngusTester Database Configuration
#-----------------------------------------------------------------------------------
# Note: If it is a shared installation (INSTALL_TYPE=SHARED), AngusTester will use the database configuration of the AngusGM application.
# Database IP or hostname, default value is `127.0.0.1`.
TESTER_DB_HOST=127.0.0.1
# Database port, default value is `3306`.
TESTER_DB_PORT=3306
# Database name, default value is `angus`.
TESTER_DB_NAME=angus
# Database authentication username, default value is `root`.
TESTER_DB_USER=root
# Database authentication user password, default value is `Angus123`.
TESTER_DB_PASSWORD=Angus123
#-----------------------------------------------------------------------------------
# AngusTester Agent Server Configuration
#-----------------------------------------------------------------------------------
# Agent server port, default value is `5036`.
AGENT_REMOTING_SERVER_PORT=5035
# Timeout for Agent to send messages to node agent client, default `60s`.
AGENT_REMOTING_SEND_TIMEOUT=60000
# Heartbeat interval for agent server connection check, default `30s`.
AGENT_REMOTING_ALLOW_MAX_HEARTBEAT_INTERVAL=30000
#-----------------------------------------------------------------------------------
# AngusTester Agent Installation Script Configuration
#-----------------------------------------------------------------------------------
# Agent package and installation script download URL prefix. For Web UI automation installation.
AGENT_CLOUD_STORAGE_APIS_PREFIX=https://bj-c1-prod-files.xcan.cloud
# Agent version to install.
AGENT_VERSION=1.0.0
# Agent installation package file ID.
AGENT_FILE_ID=297761877096661000
# Linux Agent auto-installation script ID.
AGENT_LINUX_INSTALL_SCRIPT_ID=297761877096660998
# Windows Agent auto-installation script ID.
AGENT_WINDOWS_INSTALL_SCRIPT_ID=245588291569582089
#-----------------------------------------------------------------------------------
# AngusTester Request Proxy Configuration
#-----------------------------------------------------------------------------------
# Whether to start an embedded api request proxy service when launching AngusTester.
# This option is enabled by default and should be disabled during independent deployment.
PROXY_STARTUP_IN_TESTER=true

#-----------------------------------------------------------------------------------
# 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=localhost
# 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=

#-----------------------------------------------------------------------------------
# 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
ini
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;
    }
}
  • tester.conf
nginx
server {
    listen 80;
    server_name my-tester.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:8901;
         expires 1d;
         add_header Cache-Control "public, max-age=86400, immutable";
         access_log off;
    }

    location /angusProxy {
        if ($request_method = OPTIONS){
          access_log off;
          return 200;
        }

        proxy_pass http://192.168.3.7:6806/angusProxy;
        proxy_http_version 1.1;

        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "upgrade";
        proxy_set_header Referer $http_referer;
        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_connect_timeout 3d;
        proxy_read_timeout 3d;
        proxy_send_timeout 3d;
        proxy_socket_keepalive on;
        proxy_hide_header Vary;

        add_header 'Access-Control-Allow-Origin' * always;
        add_header 'Access-Control-Allow-Credentials' 'true' always;
        add_header 'Access-Control-Allow-Methods' 'GET, POST, OPTIONS, PUT, PATCH, DELETE' always;
        add_header 'Access-Control-Allow-Headers' * always;
    }

    location / {
         proxy_pass http://192.168.3.7:8901;
         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.