v1.0
This commit is contained in:
160
INSTALL.md
Normal file
160
INSTALL.md
Normal file
@@ -0,0 +1,160 @@
|
||||
# PostgreSQL Production Deployment Guide via Ansible
|
||||
|
||||
## 1. Instalacja serwerów
|
||||
|
||||
Dwa serwery Debian 12:
|
||||
|
||||
| Serwer | Rola | IP |
|
||||
| ------ | ------- | -------- |
|
||||
| pg-1 | Primary | 10.0.0.1 |
|
||||
| pg-2 | Replica | 10.0.0.2 |
|
||||
|
||||
Na każdym serwerze wykonaj:
|
||||
|
||||
```bash
|
||||
sudo apt update
|
||||
sudo apt upgrade -y
|
||||
sudo apt install -y sudo vim curl gnupg rsync unzip
|
||||
```
|
||||
|
||||
Opcjonalnie utwórz konto do Ansible:
|
||||
|
||||
```bash
|
||||
sudo adduser ansible
|
||||
sudo usermod -aG sudo ansible
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 2. Konfiguracja IP i DNS
|
||||
|
||||
Edytuj `/etc/hosts` na obu serwerach:
|
||||
|
||||
**pg-1 (/etc/hosts)**
|
||||
|
||||
```
|
||||
10.0.0.1 pg1
|
||||
10.0.0.2 pg2
|
||||
```
|
||||
|
||||
**pg-2 (/etc/hosts)**
|
||||
|
||||
```
|
||||
10.0.0.1 pg1
|
||||
10.0.0.2 pg2
|
||||
```
|
||||
|
||||
Upewnij się, że hostnames `pg1` i `pg2` są rozpoznawane w sieci.
|
||||
|
||||
---
|
||||
|
||||
## 3. Przygotowanie repozytorium Ansible na pg-1
|
||||
|
||||
Skopiuj paczkę Ansible na pg-1:
|
||||
|
||||
```bash
|
||||
scp postgres_ansible_prod_full.zip user@pg-1:/home/user/
|
||||
ssh pg-1
|
||||
unzip postgres_ansible_prod_full.zip -d ~/postgres_ansible_prod
|
||||
cd ~/postgres_ansible_prod
|
||||
```
|
||||
|
||||
Edytuj `inventory.ini`, jeśli IP lub hostnames są inne:
|
||||
|
||||
```ini
|
||||
[primary]
|
||||
pg1 ansible_host=10.0.0.1
|
||||
|
||||
[replica]
|
||||
pg2 ansible_host=10.0.0.2
|
||||
|
||||
[all:vars]
|
||||
ansible_user=root
|
||||
pg_version=16
|
||||
pg_cluster=main
|
||||
pg_data=/var/lib/postgresql/16/main
|
||||
```
|
||||
|
||||
Ustaw hasła w `group_vars/all/secrets.yml`:
|
||||
|
||||
```yaml
|
||||
replicator_password: "SILNE_HASLO_REPL"
|
||||
mailuser_password: "SILNE_HASLO_DB"
|
||||
```
|
||||
|
||||
Opcjonalnie zaszyfruj je Ansible Vault:
|
||||
|
||||
```bash
|
||||
ansible-vault encrypt group_vars/all/secrets.yml
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 4. Uruchomienie playbooka
|
||||
|
||||
Zainstaluj Ansible na pg-1:
|
||||
|
||||
```bash
|
||||
sudo apt install -y ansible
|
||||
ansible --version
|
||||
```
|
||||
|
||||
Test połączenia z pg-2:
|
||||
|
||||
```bash
|
||||
ansible -i inventory.ini all -m ping
|
||||
```
|
||||
|
||||
Uruchomienie wdrożenia:
|
||||
|
||||
```bash
|
||||
ansible-playbook -i inventory.ini site.yml
|
||||
```
|
||||
|
||||
Playbook automatycznie:
|
||||
|
||||
- Instaluje PostgreSQL 16 na obu serwerach
|
||||
- Konfiguruje primary i replica
|
||||
- Tworzy użytkownika `mailuser` i bazę `mailarchiver`
|
||||
- Ustawia pgBackRest i cron backupów (full i incremental)
|
||||
|
||||
---
|
||||
|
||||
## 5. Test działania
|
||||
|
||||
Na pg-1:
|
||||
|
||||
```bash
|
||||
sudo -u postgres psql -c "\l"
|
||||
sudo -u postgres psql -c "\du"
|
||||
```
|
||||
|
||||
Sprawdź replikację:
|
||||
|
||||
```bash
|
||||
sudo -u postgres psql -c "SELECT * FROM pg_stat_replication;"
|
||||
```
|
||||
|
||||
Test backupów (pgBackRest):
|
||||
|
||||
```bash
|
||||
sudo -u postgres pgbackrest --stanza=main info
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 6. Przywracanie w razie awarii
|
||||
|
||||
Jeśli pg-1 padnie, przywracasz z pg-2:
|
||||
|
||||
```bash
|
||||
ansible-playbook -i inventory.ini restore_primary.yml
|
||||
```
|
||||
|
||||
Ręczny failover (promowanie pg-2 na primary):
|
||||
|
||||
```bash
|
||||
sudo -u postgres pg_ctl promote
|
||||
```
|
||||
|
||||
Następnie zmień DNS lub connection string w aplikacji, aby wskazywał nowy primary.
|
||||
Reference in New Issue
Block a user