Installing AngusTester
Note
- Before installing and running the AngusTester application, you must first install and run the AngusGM base application.
- The following instructions are for the
Enterprise
version installation process. To install other versions, replace the version type flagEnterprise
withCommunity
orDatacenter
.
I. Prerequisites
System Requirements
- Operating System: Supports Linux / MacOS / Windows Server.
- Compute Resources: Minimum configuration requires
2-core CPU, 4GB RAM
, recommended configuration4-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+
.
- Manual installation: Requires
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
# 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
# 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:
# 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
- Except for
INSTALL_APPS
andTESTER_WEBSITE
, all other configuration options should match those in the AngusGM application configuration. - For more configuration options and details, refer to the
Configuration Reference -> Application Configuration
section below.
3. Start the Application
# Run the startup command
./startup-tester.sh
# View the startup logs
tail -f -n1000 logs/tester.log
Note
- 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. - 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
# 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
# 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
# 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:
Parameter | Purpose |
---|---|
-d | Run the container in detached mode (background) |
--name angustester | Assign the name angustester to the container (for easier management) |
-p 8901:8901 | Port mapping: Bind host port 8901 to container port 8901 (format: host_port:container_port ) |
-p 6806:6806 | Embedded request proxy service (AngusProxy) port mapping: Bind host port 6806 to container port 6806 (format: host_port:container_port ) |
-v ./conf:/opt/AngusTester/conf | Configuration file mount: Host directory ./conf → Container directory /opt/AngusTester/conf |
-v ./data:/opt/AngusTester/data | Application data mount: Host directory ./data → Container directory /opt/AngusTester/data |
-v ./logs:/opt/AngusTester/logs | Log file mount: Host directory ./logs → Container directory /opt/AngusTester/logs |
-v ./plugins:/opt/AngusTester/plugins | Plugin directory mount: Host directory ./plugins → Container directory /opt/AngusTester/plugins |
-v ./tmp:/opt/AngusTester/tmp | Temporary file mount: Host directory ./tmp → Container directory /opt/AngusTester/tmp |
xcancloud/angustester-enterprise:1.0.0 | Specify 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
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
# 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
# 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
# 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
# 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
- Check Runtime Logs
tail -f /opt/AngusTester/logs/tester.log
Expected output: Application started successfully [PID=21601] and Http(s) port 8901 is ready
, indicating successful startup.
- Health Check Endpoint Verification
curl http://localhost:8901/actuator/health
Expected output: {"status":"UP"}
, indicating successful startup.
- Login Verification
- Access URL:
http://<deployment_IP>:8901
orhttp://<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
# Start the application
./startup-tester.sh
# Stop the application
./shutdown-tester.sh
# View application logs
tail -f logs/tester.log
- Docker
# Start the application
docker start angustester
# Stop the application
docker stop angustester
# View application logs
docker logs angustester
- Docker Compose
# 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.
- Error example:
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.
- Error example:
2. Log Analysis
- Log Paths
- Runtime logs:
/opt/AngusTester/logs/tester.log
- Error logs:
/opt/AngusTester/logs/tester-error.log
- Runtime logs:
- 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)
#-----------------------------------------------------------------------------------
# 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
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
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
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;
}
}