Configure
Pigsty provides a configure script as a configuration wizard that automatically generates an appropriate pigsty.yml configuration file based on your current environment.
This is an optional script: if you already understand how to configure Pigsty, you can directly edit the pigsty.yml configuration file and skip the wizard.
Quick Start
Enter the pigsty source home directory and run ./configure to automatically start the configuration wizard. Without any arguments, it defaults to the meta single-node configuration template:
This command will use the selected template as a base, detect the current node’s IP address and region, and generate a pigsty.yml configuration file suitable for the current environment.
Features
The configure script performs the following adjustments based on environment and input, generating pigsty.yml in the Pigsty directory by default.
- Detects the current node IP address; if multiple IPs exist, prompts the user to input a primary IP address as the node’s identity
- Uses the IP address to replace the placeholder
10.10.10.10in the configuration template and sets it as theadmin_ipparameter value - Detects the current region, setting
regiontodefault(global default repos) orchina(using Chinese mirror repos) - For micro instances (vCPU < 4), uses the
tinyparameter template fornode_tuneandpg_confto optimize resource usage - If
-vis specified, switchespg_versionandpg18-*package-group aliases in the template to that major version; fixed-kernel templatesmssql,polar, andpg19are excluded from this replacement - If
-gis specified, replaces default passwords recognized by the configuration wizard with randomly generated strong passwords; review uncovered values against the Default Credentials Checklist (strongly recommended) - When PG major version ≥ 17, prioritizes the built-in
C.UTF-8locale, or the OS-supportedC.UTF-8 - Checks if the core dependency
ansiblefor deployment is available in the current environment - Also checks if the deployment target node is SSH-reachable and can execute commands with sudo (
-sto skip)
Usage Examples
Command Arguments
Argument Details
| Argument | Description |
|---|---|
-c, --conf |
Generate config from conf/<template>.yml, supports subdirectories like ha/full |
-i, --ip |
Replace placeholder 10.10.10.10 in config template with specified IP |
-v, --version |
Specify PostgreSQL major version (14-19); PG19 is Beta, so prefer the dedicated pg19 template |
-r, --region |
Set software repo mirror region: default, china (Chinese mirrors), europe (European) |
-o, --output |
Output path, default pigsty.yml; relative paths use Pigsty home, absolute paths are used as given |
-s, --skip |
Skip IP probing, target SSH/Sudo checks, and effective IP replacement; keep 10.10.10.10 |
-x, --proxy |
Write current environment proxy variables (HTTP_PROXY, HTTPS_PROXY, ALL_PROXY, NO_PROXY) to config |
-n, --non-interactive |
Non-interactive mode; a single/demo IP is auto-selected, while ambiguous multi-IP hosts require -i |
-p, --port |
SSH port used by readiness checks only; it does not write ansible_port into the generated config |
-g, --generate |
Generate random values for passwords in config file, improving security (strongly recommended) |
Execution Flow
The configure script executes detection and configuration in the following order:
Automatic Behaviors
Region Detection
The script automatically detects the network environment to determine if you’re in mainland China (behind GFW):
- If Google is reachable, uses the
region: defaultrepositories - If Google is unreachable but
https://pigsty.ccis reachable, setsregion: china - If neither endpoint is reachable, falls back to
region: defaultand emits an internet-unreachable warning - Can manually specify region via
-rargument
IP Address Handling
The script determines the primary IP address in the following priority:
- Command line argument: If IP is specified via
-i, use it directly - Single IP detection: If the current node has only one IP, use it automatically
- Demo IP detection: If
10.10.10.10is detected, select it automatically (for sandbox environments) - Interactive input: When multiple IPs exist, prompt user to choose or input
Low-End Hardware Optimization
When fewer than 4 CPU cores are detected (1-3 cores), the script automatically adjusts configuration:
This ensures smooth operation on low-spec virtual machines.
Locale Settings
The script automatically enables C.UTF-8 as the default locale when:
- PostgreSQL version ≥ 17 (built-in Locale Provider support)
- Or the current system supports
C.UTF-8/C.utf8locale
China Region Special Handling
When region is set to china, the script automatically:
- Enables
docker_registry_mirrorsDocker mirror acceleration - Enables
PIP_MIRROR_URLPython mirror acceleration
Password Generation
When using the -g argument, the script generates 24-character random strings for the following passwords:
| Password Parameter | Description |
|---|---|
grafana_admin_password |
Grafana admin password |
pg_admin_password |
PostgreSQL admin password |
pg_monitor_password |
PostgreSQL monitor user password |
pg_replication_password |
PostgreSQL replication user password |
patroni_password |
Patroni API password |
haproxy_admin_password |
HAProxy admin password |
minio_secret_key |
Silo Root Secret |
etcd_root_password |
ETCD Root password |
It also replaces the following placeholder passwords:
DBUser.Meta→ random passwordDBUser.Viewer→ random passwordS3User.Backup→ random passwordS3User.Meta→ random passwordS3User.Data→ random passwordDBUser.Supa→ random passwordVibe.Coding→ random password
Configuration Templates
The script reads templates from conf/. The value of -c is a path relative to that directory without the .yml suffix, such as ha/full or app/immich.
Core Templates
| Template | Description |
|---|---|
meta |
Default template: Single-node installation with INFRA + NODE + ETCD + PGSQL |
rich |
Feature-rich version: Includes almost all extensions, Silo, local repo |
slim |
Minimal version: PostgreSQL + ETCD only, no monitoring infrastructure |
fat |
Complete version: rich base with more extensions installed |
pgsql |
Pure PostgreSQL template |
pg19 |
Single-node PostgreSQL 19 Beta evaluation template |
infra |
Pure infrastructure template |
HA Templates (ha/)
| Template | Description |
|---|---|
ha/dual |
2-node HA cluster |
ha/trio |
3-node HA cluster |
ha/full |
4-node complete sandbox environment |
ha/safe |
Security-hardened HA configuration |
ha/octo |
Compact 8-node HA simulation |
ha/simu |
20-node production simulation environment |
ha/citus |
13-node Citus distributed cluster |
Application Templates
| Template | Description |
|---|---|
supabase |
Supabase self-hosted configuration |
app/dify |
Dify AI platform configuration |
app/odoo |
Odoo ERP configuration |
app/electric |
Electric sync engine configuration |
app/insforge |
Insforge backend platform configuration |
app/hindsight |
Hindsight application configuration |
app/teable |
Teable table database configuration |
app/mattermost |
Mattermost collaboration platform configuration |
app/maybe |
Maybe finance application configuration |
app/registry |
Docker Registry configuration |
app/immich |
Immich photo and video management |
app/jumpserver |
JumpServer bastion host |
Special Kernel Templates
| Template | Description |
|---|---|
ivory |
IvorySQL: Oracle-compatible PostgreSQL |
mssql |
Babelfish: SQL Server-compatible PostgreSQL |
polar |
PolarDB: Alibaba Cloud open-source distributed PostgreSQL |
ha/citus |
Citus: Distributed PostgreSQL HA cluster |
mysql |
OpenHalo: MySQL protocol-compatible PostgreSQL |
pgtde |
Percona PostgreSQL Server: transparent encryption |
oriole |
OrioleDB: Next-generation storage engine |
agens |
AgensGraph: graph database kernel |
pgedge |
pgEdge: distributed PostgreSQL kernel |
mongo |
MongoDB-compatible stack template |
Demo and Build Templates
| Template | Description |
|---|---|
vibe |
Vibe Coding development environment |
docker |
Run Pigsty inside a Docker container |
demo/bare |
Minimal readable single-node example |
demo/el |
Full parameter example for EL distributions |
demo/debian |
Full parameter example for Debian/Ubuntu |
demo/demo |
Multi-module demo environment |
demo/kernel |
Ten-node database-kernel matrix |
demo/redis |
Redis replica, Sentinel, and native Cluster demo |
demo/minio |
Multi-node, multi-drive Silo demo (source default) |
demo/kafka |
Kafka KRaft development and secure-cluster demo |
demo/mysql |
Native MySQL 8.4 pilot demo |
demo/remote |
Remote PostgreSQL/RDS monitoring example |
demo/saas |
Legacy single-node SaaS component bundle |
demo/wool |
Small cloud-instance example for China |
build/oss |
Cross-distribution open-source package build env |
build/dev |
Three-node development and build environment |
Output Example
Environment Variables
The script supports the following environment variables:
| Environment Variable | Description | Default |
|---|---|---|
PIGSTY_HOME |
Pigsty installation directory | ~/pigsty |
METADB_URL |
Metabase connection URL | service=meta |
HTTP_PROXY |
HTTP proxy | - |
HTTPS_PROXY |
HTTPS proxy | - |
ALL_PROXY |
Universal proxy | - |
NO_PROXY |
Proxy whitelist | Built-in default |
Notes
-
Passwordless access: Before running
configure, ensure the current user has passwordless sudo privileges and passwordless SSH to localhost. This can be automatically configured via thebootstrapscript. -
IP address selection: Choose an internal IP as the primary IP address, not a public IP or
127.0.0.1. -
Password security: In production, always change default passwords in the configuration file. Use
-gto randomize recognized credentials, then review the Default Credentials Checklist for remaining values. -
Configuration review: After the script completes, it’s recommended to review the generated
pigsty.ymlfile to confirm the configuration meets expectations. -
Multiple executions: You can run
configuremultiple times to regenerate configuration; each run will overwrite the existingpigsty.yml. -
macOS limitations: When running on macOS, the script skips some Linux-specific checks and uses placeholder IP
10.10.10.10. macOS can only serve as an admin node.
FAQ
How to use a custom configuration template?
Place your configuration file in the conf/ directory, then specify it with the -c argument:
How to generate different configurations for multiple clusters?
Use the -o argument to specify different output files:
Then specify the configuration file when running playbooks:
How to handle multiple IPs in non-interactive mode?
You must explicitly specify the IP address using the -i argument:
How to keep the placeholder IP in the template?
Use the -s argument to skip IP replacement:
Related Documentation
- Inventory: Understand the Ansible inventory structure
- Parameters: Understand Pigsty parameter hierarchy and priority
- Templates: View all available configuration templates
- Installation: Understand the complete installation process
- Metabase: Use PostgreSQL as a dynamic configuration source