Skip to content

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 접속한 뒤:

Terminal window
# 컨테이너 중지·삭제
docker stop prego-frappe-bench 2>/dev/null || true
docker rm prego-frappe-bench 2>/dev/null || true
# bench 데이터 디렉터리 삭제 (초기화 상태로 되돌림)
sudo rm -rf /var/lib/frappe-bench

2.2 DB 서버 (db_01) — 필요 시

DB까지 완전히 처음부터 하려면:

Terminal window
docker stop prego-mariadb 2>/dev/null || true
docker rm prego-mariadb 2>/dev/null || true
sudo rm -rf /var/lib/prego-mariadb

DB를 그대로 두고 App(Frappe)만 다시 설치하려면 2.1만 수행하면 됩니다.

2.3 Redis 서버 (redis_01) — Redis 분리 사용 시

Redis 전용 서버까지 처음부터 하려면:

Terminal window
docker stop redis 2>/dev/null || true
docker rm redis 2>/dev/null || true
sudo rm -rf /var/lib/redis

Ref: redis-migration.md, redis-separation-pulumi-ansible-plan.md.

2.4 Playbook 재실행

로컬에서:

Terminal window
cd /Users/marco/prego-ansible
ansible-playbook -i inventory/inventory.yml playbook.yml \
-e tenant_id=YOUR_TENANT_ID \
-e db_root_password=YOUR_DB_ROOT_PASSWORD

Redis 분리 사용 시: -e redis_requirepass=... (Redis 서버), -e redis_password=... (App 쪽 common_site_config용).
(SSH 키·ssh-agent는 기존처럼 사용.)


3. 방법 B — Ansible ad-hoc으로 정리

로컬에서 한 번에 정리할 수 있습니다.

3.1 App 서버만 초기화 (Frappe·bench만 제거)

Terminal window
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_PASSWORD

3.2 Redis 서버만 초기화 (Redis 분리 사용 시)

Terminal window
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

3.3 App + DB 둘 다 초기화

Terminal window
# 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_PASSWORD

4. 요약

목표할 일
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 등을 처음부터 수행합니다.

Help