Skip to content

English {#english}

Docker Hub Stack (DB · Redis · App) and Ansible Deploy Plan

Purpose: Define strategy to install a MariaDB, Redis, Application stack (optimized for Frappe/ERPNext v16) from Docker Hub and deploy with Ansible.
No code generation — plan, strategy, and alignment with current system only.

References: saas-db-separation-and-scaling-plan; redis-separation-pulumi-ansible-plan; ansible-implementation-plan; frappe-v15-to-v16-upgrade-plan.


MariaDB 10.11, Redis 7-alpine, Node 24, Python 3.12+. Images chosen from Docker Hub to match.


2–8. Image sources, deployment patterns, IaC, alignment, run, next steps, summary

  • §2 Images: MariaDB mariadb:10.11; Redis redis:7-alpine; App frappe/bench:latest or custom iamfork/prego-repo:latest. Custom image may require Docker Hub login (PAT).
  • §3 Pattern A (current Prego): Separate hosts — prego_db_servers (mariadb:10.11), prego_redis_servers (redis:7-alpine), prego_nodes (bench or prego-repo); firewall 3306/6379 from App only. Pattern B: Single host, one bridge network; DB/Redis no external ports; for dev/small single-tenant.
  • §4 IaC: docker_login (if custom image), image pull, network (B only), mariadb/redis/app containers (env, volumes, restart). Principles: network isolation, idempotency, persistence (volumes).
  • §5 Prego Ansible: mariadb_server → mariadb:10.11; redis_server → redis:7-alpine; frappe_bench → variable (e.g. iamfork/prego-repo:latest). Keep structure; variable image versions, Docker Hub login when needed, optional Pattern B playbook.
  • §6 Run: Docker Hub PAT; vars via Vault or -e; inventory per pattern; ansible-playbook.
  • §7 Next: Edge routing (cloudflare-orchestration-and-gtape-backup-plan); MariaDB my.cnf (mariadb-mycnf-optimization-plan); Ansible Vault for secrets.
  • §8 Summary: Pull DB/Redis/App from Docker Hub; Ansible IaC; Prego already Pattern A — align with image versions and custom app image.

Full tables (§1–§8) and exact wording are in the Korean section below.


한국어 {#korean}

Docker Hub 기반 DB·Redis·Application 서버 설치 기획서

목적: Frappe/ERPNext v16 환경에 최적화된 MariaDB·Redis·Application 스택을 Docker Hub에서 이미지를 받아 설치하고, Ansible으로 프로덕션급 자동 배포하는 전략을 정의한다.
코드 생성 없음 — 기획·전략·현재 시스템과의 정합성만 정리.

참조:


1. Frappe v16 추천 기술 스택 (Standard Stack)

Frappe v16은 공식적으로 아래 버전과의 호환·테스트를 권장한다.

컴포넌트추천 버전역할
MariaDB10.11v16 공식 예시 기준. 10.6+ 멀티테넌트 성능 최적화.
Redis7-alpine캐시·메시지 브로커. v16은 Redis 6+ 요구.
Node.js24에셋 빌드(Vite)·서버 사이드 렌더링.
Python3.12+Frappe v16 필수 요구사항.

— Docker Hub에서 사용할 이미지는 위 버전을 기준으로 선택한다.


2. Docker Hub 이미지 소스 전략

컴포넌트이미지 소스비고
MariaDBmariadb:10.11 (공식)Docker Hub 공식 이미지. v16 공식 예시 기준.
Redisredis:7-alpine (공식)v16 권장. 경량·안정.
Application(1) frappe/bench:latest (공식) 또는 (2) 커스텀 iamfork/prego-repo:latest(1) bench CLI·Frappe 프레임워크. (2) ERPNext·HRMS·CRM·prego-saas-app 포함 v16 프로덕션용 커스텀 이미지.
  • 커스텀 앱 이미지 사용 시: Docker Hub 로그인(PAT)이 필요할 수 있음. Ansible에서 community.docker.docker_login으로 인증 후 image 풀.
  • 공식 이미지만 사용 시: 로그인 없이 pull 가능.

3. 배포 패턴 두 가지

3.1 패턴 A: 서버 분리형 (현행 Prego)

DB·Redis·App을 물리적으로 다른 호스트에 배치. 확장·장애 격리에 유리.

역할호스트 그룹Docker 이미지비고
DBprego_db_serversmariadb:10.11방화벽으로 3306은 App만 허용.
Redisprego_redis_serversredis:7-alpine방화벽으로 6379는 App만 허용. DB 1/2/3 역할 분리.
Appprego_nodesfrappe/bench:latest 또는 iamfork/prego-repo:latest원격 DB·Redis URL로 연결. v16 이미지에 ERPNext·HRMS·CRM·prego-saas-app 포함.
  • Ansible: 현재 playbook이 이미 이 패턴(역할별 play, docker + mariadb_server, docker + redis_server, docker + frappe_bench + frappe_site).
  • 이미지 버전만 변수로 통일하면 됨(MariaDB 10.11, Redis 7-alpine, 앱 이미지 태그).

3.2 패턴 B: 단일 호스트 통합 스택

한 대의 서버에 DB·Redis·App을 전용 브릿지 네트워크로 묶어 구성. 소규모·단일 테넌트에 적합.

항목내용
네트워크erp-network 등 하나의 Docker 네트워크 생성. DB·Redis는 외부 포트 노출 없이 컨테이너명으로만 통신.
보안Security by Design — DB·Redis는 앱 컨테이너 내부에서만 접근.
Playbook단일 hosts: all_servers play에서 docker_network → mariadb → redis → app 컨테이너 순서로 배포.
  • Prego가 멀티테넌트·서버 분리를 전제로 하므로, 패턴 A를 기본으로 하고 패턴 B는 개발·스테이징 또는 소규모 단일 테넌트용 옵션으로 둘 수 있음.

4. Ansible을 이용한 인프라 배포 전략 (IaC)

구글 SRE의 Infrastructure as Code 원칙에 따라 Ansible으로 환경을 표준화한다.

4.1 Playbook 구성 요소 (개념)

요소내용
Docker 로그인커스텀 이미지(예: iamfork/prego-frappe) 사용 시 community.docker.docker_login으로 Docker Hub 인증. docker_hub_token환경 변수 또는 Ansible Vault로 전달.
이미지 풀명시적 docker_image: pull 또는 컨테이너 기동 시 자동 pull.
네트워크패턴 B 시 community.docker.docker_networkerp-network 생성 후 컨테이너에 연결. 패턴 A는 호스트 간 통신이므로 네트워크는 호스트 로컬만 필요 시 사용.
MariaDB 컨테이너mariadb:10.11, 환경변수 MYSQL_ROOT_PASSWORD, 볼륨 db_data:/var/lib/mysql, restart_policy, (패턴 B 시) networks.
Redis 컨테이너redis:7-alpine, restart_policy, (패턴 B 시) networks. 필요 시 redis.conf·비밀번호·메모리 정책.
App 컨테이너이미지 변수(app_image), 환경변수 DB_HOST, REDIS_CACHE 등, ports 노출(예: 8000), volumes·networks.

4.2 Principal Engineer 인사이트

원칙내용
네트워크 격리전용 브릿지 네트워크 사용 시 DB·Redis는 외부 포트를 열지 않고 앱 컨테이너 내부에서만 통신. Security by Design.
멱등성(Idempotency)동일 playbook을 여러 번 실행해도 이미 올바른 상태면 변경 없음. 서버 증설·재배포 시 재현성(Reproducibility) 보장.
데이터 보존(Persistence)MariaDB·Redis 데이터는 Docker 볼륨 또는 호스트 바인드 마운트에 두어, 컨테이너 삭제 후에도 유지.

5. 현재 Prego Ansible과의 정합성

현행 prego-ansible본 기획과의 관계
mariadb_servermariadb:10.11 사용. Docker Hub 공식 이미지. v16 공식 예시 기준.
redis_server전용 서버에 Redis 컨테이너. redis:7-alpine (redis_version 변수).
frappe_benchfrappe/bench:latest 사용. 커스텀 이미지 도입 시 변수 frappe_bench_image: "iamfork/prego-repo:latest" 등으로 교체. v16 이미지에 ERPNext·HRMS·CRM·prego-saas-app 포함.
서버 분리DB·Redis·App 역할별 호스트 그룹·play — 패턴 A와 동일.

정리: 현재 구조를 유지한 채 (1) 이미지 버전 변수화(MariaDB 10.11, Redis 7-alpine, 앱 태그), (2) Docker Hub 로그인(커스텀 앱 이미지 사용 시), (3) 선택적으로 패턴 B용 playbook을 별도로 두는 방안이 기획과 부합한다.


6. 실행 방법 (기획 수준)

단계내용
1. Docker Hub 토큰Docker Hub PAT(Personal Access Token) 발급. Private 이미지 또는 rate limit 완화용.
2. 변수 전달docker_hub_token, db_root_password, redis_requirepass 등은 Ansible Vault 또는 -e로 전달. 평문 저장 금지.
3. 인벤토리패턴 A: prego_db_servers, prego_redis_servers, prego_nodes 각각 호스트·변수 설정. 패턴 B: all_servers 등 단일 그룹.
4. Playbook 실행ansible-playbook -i inventory.yml deploy.yml --extra-vars "docker_hub_token=..." 또는 Vault 암호화 파일 로드.

7. 다음 단계 제안

순서제안비고
1Cloudflare Workers Edge Routing테넌트 요청을 이 스택이 올라간 서버들로 분산. 기획서: cloudflare-orchestration-and-gtape-backup-plan.md.
2MariaDB my.cnf 최적화10.11 기준 8GB~16GB RAM 환경·Frappe 특화 파라미터. 상세: mariadb-mycnf-optimization-plan.md — buffer_pool·flush·연결·utf8mb4, R2 백업 병행 권장.
3Ansible Vault비밀번호·Docker Hub 토큰을 Vault로 암호화하고, playbook 실행 시 --ask-vault-pass 또는 vault password 파일 사용.

8. 요약

  • Docker Hub에서 DB(mariadb:10.11)·Redis(7-alpine)·Application(frappe/bench 또는 iamfork/prego-repo) 이미지를 받아 설치.
  • Ansible으로 IaC화: 역할별 play·변수·Docker 로그인(필요 시)·네트워크·볼륨·재시작 정책.
  • 현재 Prego는 서버 분리형(패턴 A)으로 이미 구성되어 있으므로, 이미지 버전·커스텀 앱 이미지·Vault만 보강하면 Frappe v16 추천 스택 및 Principal Engineer 가이드와 정합된다.
Help