English {#english}
Purpose: Clean existing Docker/MariaDB/Frappe bench from the server and re-run the playbook for a fresh install. Resources to remove: App node — container prego-frappe-bench, /var/lib/frappe-bench; DB — prego-mariadb container, /var/lib/prego-mariadb; Redis (if separate) — redis container, /var/lib/redis. Methods: (A) Manual SSH cleanup then ansible-playbook from prego-ansible; (B) Optional playbook to automate cleanup. Ref: pulumi-to-ansible-handoff, naming-conventions.
flowchart LR A[App: stop/rm bench container] --> B[Remove /var/lib/frappe-bench] B --> C[DB: stop/rm mariadb] C --> D[Run ansible-playbook]
Full details: see Korean section below.
한국어 {#korean}
Runbook: Ansible 대상 서버 초기화 후 처음부터 재설치
목적: 이미 Docker·MariaDB·Frappe bench가 일부 설치된 서버를 깨끗이 지운 뒤 playbook을 다시 실행해 처음부터 설치하는 방법.
Ref: pulumi-to-ansible-handoff, naming-conventions.
1. 정리할 리소스
| 서버 | 제거 대상 | 호스트 경로/이름 |
|---|---|---|
| App (node_01) | Frappe bench 컨테이너 | 컨테이너 이름: prego-frappe-bench |
| App (node_01) | Bench 데이터 | /var/lib/frappe-bench |
| DB (db_01) | MariaDB 컨테이너 | 컨테이너 이름: prego-mariadb |
| DB (db_01) | MariaDB 데이터 | /var/lib/prego-mariadb |
| Redis (redis_01) | Redis 컨테이너 | 컨테이너 이름: redis (Redis 분리 사용 시) |
| Redis (redis_01) | Redis 데이터 | /var/lib/redis |
Docker 자체는 제거하지 않아도 됩니다. 컨테이너 + 데이터만 지우면 playbook이 다시 설치합니다.
2. 방법 A — 수동 (SSH로 서버 접속 후 정리)
2.1 App 서버 (node_01)
인벤토리의 App 서버 IP로 SSH 접속한 뒤:
# 컨테이너 중지·삭제docker stop prego-frappe-bench 2>/dev/null || truedocker rm prego-frappe-bench 2>/dev/null || true
# bench 데이터 디렉터리 삭제 (초기화 상태로 되돌림)sudo rm -rf /var/lib/frappe-bench2.2 DB 서버 (db_01) — 필요 시
DB까지 완전히 처음부터 하려면:
docker stop prego-mariadb 2>/dev/null || truedocker rm prego-mariadb 2>/dev/null || truesudo rm -rf /var/lib/prego-mariadbDB를 그대로 두고 App(Frappe)만 다시 설치하려면 2.1만 수행하면 됩니다.
2.3 Redis 서버 (redis_01) — Redis 분리 사용 시
Redis 전용 서버까지 처음부터 하려면:
docker stop redis 2>/dev/null || truedocker rm redis 2>/dev/null || truesudo rm -rf /var/lib/redisRef: redis-migration.md, redis-separation-pulumi-ansible-plan.md.
2.4 Playbook 재실행
로컬에서:
cd /Users/marco/prego-ansibleansible-playbook -i inventory/inventory.yml playbook.yml \ -e tenant_id=YOUR_TENANT_ID \ -e db_root_password=YOUR_DB_ROOT_PASSWORDRedis 분리 사용 시: -e redis_requirepass=... (Redis 서버), -e redis_password=... (App 쪽 common_site_config용).
(SSH 키·ssh-agent는 기존처럼 사용.)
3. 방법 B — Ansible ad-hoc으로 정리
로컬에서 한 번에 정리할 수 있습니다.
3.1 App 서버만 초기화 (Frappe·bench만 제거)
cd /Users/marco/prego-ansible
# 컨테이너 중지·삭제ansible prego_nodes -i inventory/inventory.yml -m shell \ -a "docker stop prego-frappe-bench 2>/dev/null; docker rm prego-frappe-bench 2>/dev/null; rm -rf /var/lib/frappe-bench" \ --become
# 이후 playbook 재실행 (Redis 분리 시 -e redis_requirepass=... -e redis_password=... 추가)ansible-playbook -i inventory/inventory.yml playbook.yml \ -e tenant_id=YOUR_TENANT_ID \ -e db_root_password=YOUR_DB_ROOT_PASSWORD3.2 Redis 서버만 초기화 (Redis 분리 사용 시)
ansible prego_redis_servers -i inventory/inventory.yml -m shell \ -a "docker stop redis 2>/dev/null; docker rm redis 2>/dev/null; rm -rf /var/lib/redis" \ --become3.3 App + DB 둘 다 초기화
# DB 서버: MariaDB 컨테이너·데이터 삭제ansible prego_db_servers -i inventory/inventory.yml -m shell \ -a "docker stop prego-mariadb 2>/dev/null; docker rm prego-mariadb 2>/dev/null; rm -rf /var/lib/prego-mariadb" \ --become
# App 서버: Frappe bench 컨테이너·데이터 삭제ansible prego_nodes -i inventory/inventory.yml -m shell \ -a "docker stop prego-frappe-bench 2>/dev/null; docker rm prego-frappe-bench 2>/dev/null; rm -rf /var/lib/frappe-bench" \ --become
# (선택) Redis 서버: Redis 컨테이너·데이터 삭제ansible prego_redis_servers -i inventory/inventory.yml -m shell \ -a "docker stop redis 2>/dev/null; docker rm redis 2>/dev/null; rm -rf /var/lib/redis" \ --become
# 이후 playbook 재실행ansible-playbook -i inventory/inventory.yml playbook.yml \ -e tenant_id=YOUR_TENANT_ID \ -e db_root_password=YOUR_DB_ROOT_PASSWORD4. 요약
| 목표 | 할 일 |
|---|---|
| Frappe만 처음부터 | App 서버에서 prego-frappe-bench 컨테이너 + /var/lib/frappe-bench 삭제 → playbook 재실행. |
| DB 포함 전부 처음부터 | 위 + DB 서버에서 prego-mariadb 컨테이너 + /var/lib/prego-mariadb 삭제 → playbook 재실행. |
| Redis 포함 (분리 구성) | 위 + Redis 서버에서 redis 컨테이너 + /var/lib/redis 삭제 → playbook 재실행 시 -e redis_requirepass=... -e redis_password=... 전달. |
Docker·apt 레포는 그대로 두고 컨테이너와 데이터만 지우면, playbook이 다시 컨테이너를 만들고 bench init·new-site 등을 처음부터 수행합니다.