feat: Add support for AWS RDS deployment and enhance maintenance scheduling documentation with pg_cron and Systemd Timer options.
This commit is contained in:
@@ -25,28 +25,66 @@ docker compose down -v
|
||||
```
|
||||
|
||||
## Partitioning
|
||||
See [PARTITIONING.md](../PARTITIONING.md) for details on the implemented declarative partitioning.
|
||||
See [ARCHITECTURE.md](../ARCHITECTURE.md) for details on the implemented declarative partitioning.
|
||||
|
||||
## 🐳 Docker Deployment (Production)
|
||||
The `run_test_env.sh` script automatically populates `init_scripts` for the test environment. To deploy this in your own Docker setup:
|
||||
## AWS RDS / External Database Testing
|
||||
|
||||
1. **Mount Scripts**: Map the SQL procedures to `/docker-entrypoint-initdb.d/` in your PostgreSQL container.
|
||||
2. **Order Matters**: Scripts execute alphabetically. Ensure they run **after** the Zabbix schema import.
|
||||
You can run these partitioning tests against a real AWS RDS (or any external PostgreSQL instance).
|
||||
|
||||
**Example `docker-compose.yml` snippet:**
|
||||
```yaml
|
||||
services:
|
||||
postgres-server:
|
||||
image: postgres:16
|
||||
volumes:
|
||||
# Mount Zabbix Schema first (e.g., as 01_schema.sql)
|
||||
- ./zabbix_schema.sql:/docker-entrypoint-initdb.d/01_schema.sql
|
||||
|
||||
# Mount Partitioning Procedures (Prefix to run AFTER schema)
|
||||
- ../postgresql/procedures/00_partitions_init.sql:/docker-entrypoint-initdb.d/02_00_part_init.sql
|
||||
- ../postgresql/procedures/01_auditlog_prep.sql:/docker-entrypoint-initdb.d/02_01_audit_prep.sql
|
||||
- ../postgresql/procedures/02_maintenance.sql:/docker-entrypoint-initdb.d/02_02_maintenance.sql
|
||||
- ../postgresql/procedures/03_enable_partitioning.sql:/docker-entrypoint-initdb.d/02_03_enable.sql
|
||||
- ../postgresql/procedures/04_monitoring_view.sql:/docker-entrypoint-initdb.d/02_04_monitor.sql
|
||||
```
|
||||
The container will automatically execute these scripts on first startup, partitioning the tables.
|
||||
### 1. Configure Credentials
|
||||
First, create a `db_credentials` file in the `postgresql/` directory. (This file is ignored by Git to keep your passwords safe).
|
||||
Example `postgresql/db_credentials`:
|
||||
```bash
|
||||
# Admin credentials
|
||||
export DB_HOST="your-rds-endpoint.rds.amazonaws.com"
|
||||
export DB_PORT="5432"
|
||||
export DB_NAME="postgres"
|
||||
export DB_USER="postgres"
|
||||
export DB_PASSWORD="your_admin_password"
|
||||
|
||||
# SSL Configuration
|
||||
export DB_SSL_MODE="verify-full"
|
||||
export DB_PEM_URL="https://truststore.pki.rds.amazonaws.com/global/global-bundle.pem"
|
||||
export DB_SSL_ROOT_CERT="./global-bundle.pem"
|
||||
|
||||
# Zabbix credentials to be created
|
||||
export ZBX_DB_NAME="zabbix"
|
||||
export ZBX_DB_USER="zabbix"
|
||||
export ZBX_DB_PASSWORD="zabbix_password"
|
||||
```
|
||||
|
||||
### 2. Automated Testing
|
||||
You can run the same automated deployment script, but instruct it to deploy directly to your RDS instance instead of a local Docker container:
|
||||
|
||||
```bash
|
||||
cd postgresql/docker
|
||||
./run_test_env.sh --pg 16 --zabbix 7.0 --rds
|
||||
```
|
||||
|
||||
If you want to completely clean up the RDS database and start fresh (terminating existing connections and dropping all data), use the `--rds-drop` flag. You will be prompted to type `yes` to safely confirm the deletion:
|
||||
```bash
|
||||
./run_test_env.sh --pg 16 --zabbix 7.0 --rds-drop
|
||||
```
|
||||
|
||||
### 3. Manual Setup & Zabbix Integration
|
||||
If you want to prepare the real database for your Production Zabbix Server manually, you can just run the initialization script directly:
|
||||
|
||||
```bash
|
||||
cd postgresql
|
||||
./setup_rds.sh
|
||||
# To drop an existing database and start fresh, use:
|
||||
# ./setup_rds.sh --drop
|
||||
```
|
||||
|
||||
The script will automatically connect as the `postgres` user, conditionally download the SSL certificates if needed, and set up the `zabbix` user and database.
|
||||
Upon success, the script will output the exact block you need to copy into your `zabbix_server.conf`, e.g.:
|
||||
|
||||
```ini
|
||||
DBHost=your-rds-endpoint.rds.amazonaws.com
|
||||
DBName=zabbix
|
||||
DBUser=zabbix
|
||||
DBPassword=zabbix_password
|
||||
DBPort=5432
|
||||
DBTLSConnect=verify_full
|
||||
DBTLSCAFile=/full/path/to/global-bundle.pem
|
||||
```
|
||||
Reference in New Issue
Block a user