GH GambleHub

불가능: 구성 및 배포

(섹션: 기술 및 인프라)

간략한 요약

Ansible은 인프라가 이미 생성 된 (Terraform/IaC) VM/호스트, 서비스 및 응용 프로그램의 반복 구성에 이상적인 선언적 구성 및 오케스트레이션 도구이며 환경을 "부활" 해야합니다. 템플릿 출시, 다운 타임없이 서비스 재시작, 보안 정책 적용. 성공의 열쇠: 모듈 식 구조 (역할/수집), 엄격한 dempotence, 비밀을 이용한 깔끔한 작업 (Vault), 동적 인벤토리, 테스트 및 GitOps 분야.

적절한시기는 언제입니까 (그리고 Terram에 어떻게 맞습니까)

테라 폼-리소스 (VPC, 클러스터, 데이터베이스) 를 생성합니다.
Ansible-OS/소프트웨어를 구성하고 버전을 출시하며 마이그레이션을 유도하며 파일 및 서비스를 편집합니다.
링크: Terraform은 아티팩트에 '인벤토리 '/IP/비밀을 출력하고 Ansible은 CD 단계로 읽습니다.

리포지토리 구조 (권장 템플릿)


ansible/
inventories/
prod/
inventory. ini # or inventory. yaml group_vars/
all. yml web. yml db. yml host_vars/
web-01. yml stage/
...
roles/
webapp/
defaults/main. yml vars/main. yml tasks/main. yml handlers/main. yml templates/.j2 files/
meta/main. yml hardening/
...
playbooks/
site. yml deploy_webapp. yml hardening. yml collections/requirements. yml ansible. cfg
가능합니다. cfg (최소):
ini
[defaults]
inventory = inventories/stage/inventory. ini stdout_callback = yaml callbacks_enabled = timer, profile_tasks interpreter_python = auto retry_files_enabled = False forks = 25 host_key_checking = True

인벤토리: 정적 및 동적

정적 (ini):
ini
[web]
web-01 ansible_host=10. 0. 1. 10 web-02 ansible_host=10. 0. 1. 11

[db]
db-01 ansible_host=10. 0. 2. 10

[all:vars]
ansible_user=ansible ansible_ssh_common_args='-o ProxyJump=bastion@1. 2. 3. 4'

동적

클라우드 플러그인 (또는 자신의 스크립트) 을 사용하여 호스트를 태그하십 환경/태그 변수 → 'group _ vars'.

역할 및 컬렉션

Role = 독립적 인 재사용 모듈 (작업, 파일, 템플릿, 핸들러).
컬렉션-역할/플러그인/모듈 세트. '컬렉션/요구 사항의 수정 버전 핀. yml '.

yaml collections/requirements. yml collections:
- name: community. general version: ">=8. 0. 0,<9. 0. 0"
- name: ansible. posix

플레이 북: Idempotent 스크립트

일반 플레이 북의 예:
yaml playbooks/site. yml
- hosts: all gather_facts: true become: true roles:
- hardening

- hosts: web become: true roles:
- webapp
'웹' 역할 (조각):
yaml roles/webapp/tasks/main. yml
- name: Install packages:
name: ["nginx", "python3-venv"]
state: present

- name: Template configuration template:
src: nginx. conf. j2 dest: /etc/nginx/nginx. conf mode: "0644"
notify: Restart nginx

- name: unarchive artifact deploy:
src: "{{ webapp_package_url }}"  # артефакт из CI dest: /opt/webapp remote_src: true creates: /opt/webapp/current

- name: Link to the current version of file:
src: "/opt/webapp/releases/{{ release_id }}"
dest: /opt/webapp/current state: link notify: Reload webapp
처리기:
yaml roles/webapp/handlers/main. yml
- name: Restart nginx service: { name: nginx, state: restarted }

- name: Reload webapp systemd: { name: webapp, state: reloaded, daemon_reload: true }

Jinja2 템플릿 및 변형

기본 변수를 '기본값/주' 로 저장합니다. yml ', 민감성-Vault.
필터 사용 ('| to _ nice _ yaml', '| b64encode', '| 기본값') 및 '언제' 조건.

'nginx' 의 예. 혼자. j2 ':
jinja2 worker_processes auto;
http {
server {
listen 80;
server_name {{ inventory_hostname }};
location / {
proxy_pass http://127. 0. 0. 1:{{ webapp_port }};
}
}
}

비밀: 불안한 금고 및 비밀 관리자

변수 파일을 암호화하는 Vault ('group _ vars/all. 금고. yml ').
해당 모듈을 통해 외부 관리자 (KMS/비밀 관리자/SSM) 의 비밀을 읽고 링크/ARN 만 Vault에 저장하는 것이 좋습니다.

암호화된 파일 (예: 구조):
yaml group_vars/all. vault. yml (ansible-vault encrypted)
webapp_db_password: "..."
jwt_signing_key: "..."
권장 사항:
  • 액세스 공유: 개발자는 개발/단계, prod-CI만 참조하십시오.
  • 비밀 회전 및 액세스 감사를 활성화하십시오

이념과 올바른 변화

'쉘/명령' 대신 모듈 ('패키지', '사용자', '라인 파일', '템플릿', '시스템') 을 사용하십시오.
"시끄러운" 작업을 표시하십시오.
역할에 대한 체크 모드 ('-확인') 및 diff를 지원합니다.
불안정한 작업의 경우: '재시도', '지연', '까지'.

예:
yaml
- name: Wait for HTTP uri availability:
url: "http://localhost/health"
status_code: 200 register: health retries: 10 delay: 5 until: health. status == 200

성능: 큰 농장과 봉우리

포크: 동시성 인상 (주의: 과부하 대상 없음).
전략 = 이웃을 기다리지 않고 자유 실행 작업.
파이프 라이닝 = 진정한식으로 표현할 수 있습니다. cfg '는 RTT를 감소시킵니다.

(PHP 3 = 3.0.6, PHP 4)

장기 운영을위한 async/poll; 파동 배치를위한 스로틀/직렬.
단일 작업 (예: 데이터베이스 마이그레이션) 에 대해 _ to 및 run _ once를 위임합니다.

제로 다운 타임 패턴

롤링 배포 (각각 20%)

yaml
- hosts: web serial: "20%"
max_fail_percentage: 10 roles: [webapp]

카나리아

'-웹 카나리아 제한' (그룹의 하위 집합) 으로 플레이 북을 실행하고 메트릭을 확인한 다음 전체 그룹으로 롤아웃하십시오.

청록색

두 개의 호스트 그룹 'web _ blue' 및 'web _ green'; 플레이 북으로 새로운 웨이브를 준비한 다음 '커뮤니티 작업으로 트래픽 (DNA/LB) 을 전환하십시오. 일반. 계열사 _ lb '/API는 밸런서입니다.

보안 및 강화

강화 역할: NOPASSWD가없는 SSH 정책, 배너, 'sudo', 방화벽, 감사/r소 로그, 시간 -NTP, 'fail2ban'.
SELinux/AppArmor를 사용하면 모듈을 통해 정책을 관리하십시오.
요새: 점프 호스트를 통해서만 대상으로 SSH를 제한합니다 ('ProxyJump' 참조).
'진정하다' 를 최소화하십시오. 재고 수준 (어떤 플레이 북을 실행할 수 있는지) 에서 RBAC를 작성합니다.

윈도 및 네트워크 하드웨어

Windows: 모듈 'win _', WinRM 연결, PowerShell 스크립트-마지막 인수입니다.
네트워크: Cisco/Juniper/F5 용 모듈 인 'network _ cli '/' 많은 papi'; '저장 _ 언제: 변경되었습니다' 를 통한 원자 성.

테스트 및 품질

사용할 수있는 보푸라기 + yamllint 15CI.
분자: 로컬/컨테이너 역할 테스트, demempotency 점검 (이중 실행 변경 없음).
샌드 박스: 개별 VM 임시 인벤토리/이미지.

분자 (단편) 의 예:
yaml provisioner:
name: ansible verifier:
name: ansible scenario:
name: default

CI/CD 및 GitOps와의 통합

일반적인 파이프 라인:

1. 린 → 구문 점검 → 분자.

2. 건물 응용 아티팩트.

3. 배포: 'ansible-playbook -i 인벤토리/prod 사이트. yml -웹 태그 배포 제한 '.

4. 변경된 호스트, 로그 아티팩트에 대해보고하십시오

단계 (개념) 예:
bash ansible-galaxy collection install -r collections/requirements. yml ansible-lint ansible-playbook playbooks/deploy_webapp. yml \
-i inventories/prod/inventory. ini \
-e release_id=${GIT_SHA} --diff

관찰 및 감사

콜백 플러그인 (json/yaml/timer/profile _ works) 을 연결하십시오. 시간과 변경 사항을보고하십시오.
플레이 북 로그를 중앙 집중식 스토리지에 저장합니다.
'태그:' 라벨을 붙입니다. 선택적 실행 및 신속한 조사 작업.

iGaming을위한 빈번한 레시피

웹/API 노드: Nginx + 시스템 단위, 건강 검진, 관리자의 비밀, 롤 재시작.
게임 서비스: 'group _ vars' 를 통해 지역/테넌트 별 템플릿 설정.
지불 커넥터: 키에 대한 엄격한 커넥터, 알림으로 다시 시작, 끝점 확인 후.
ETL 작업: CronJob 스크립트를 'cron' 모듈, demempotent lock 파일로 배포합니다.
모니터링: 에이전트 설치 (node _ extrater/otelcol), 모니터링 자동 등록.

안티 패턴

모듈이있는 경우 '쉘/명령' 을 사용합니다.
'핸들러' 가없는 플레이 북 → 불필요한 재시작 및 서비스 지터.
공개 'group _ vars' 에 비밀을 저장합니다.
생산 파 고갈 동안 '직렬 '/' max _ fail _ percent' 의 부재.
글로벌 'colled _ facts: 참' 과 '비: 참' 불필요하게.
분자 테스트가없고 '-확인' 지원이없는 역할.
전체 파동을 차단하는 'async/poll' 이없는 긴 명령.

구현 체크리스트

1. 저장소 프레임 워크 및 이름 지정 규칙에 동의하십시오.

2. 동적 인벤토리 및 요새 설정

3. 역할 (웹 앱/경화/모니터링) 및 핀 버전의 컬렉션을 만듭니다.

4. Vault 사용 및/또는 비밀 관리자와의 통합

5. demotency, '-확인/-diff', 처리기 및 태그를 확인하십시오.
6. ansible-lint, yamllint, Molecule을 CI에 연결하십시오.
7. 배포 패턴 (롤링/카나리아/청록색) 및 '직렬' 한계를 설명하십시오.

8. 콜백 플러그인, 로그 수집, 보고서 변경 추가

9. 문서 롤백 런북 및 사건 조치.
10. 정기적으로 게임 일을 개최하십시오: SS 브레이크, 노드 드롭, 버전 롤백.

결과

Ansible은 생성 된 인프라와 작동하는 판매 간의 "마지막 마일" 을 신속하고 안전하며 예측 가능한 구성 및 릴리스 변경으로 마감합니다. Ansible은 최소한의 재사용 장치, 동적 인벤토리, 올바른 비밀 처리 및 검증 된 제로 다운 타임 패턴의 역할을 통해 iGaming 팀이 시간 대 배포를 줄이고 야간 사고를 줄이며 p99를 SLO 수준으로 유지하도록 도와줍니다.

Contact

문의하기

질문이나 지원이 필요하시면 언제든지 연락하십시오.우리는 항상 도울 준비가 되어 있습니다!

Telegram
@Gamble_GC
통합 시작

Email — 필수. Telegram 또는 WhatsApp — 선택 사항.

이름 선택 사항
Email 선택 사항
제목 선택 사항
메시지 선택 사항
Telegram 선택 사항
@
Telegram을 입력하시면 Email과 함께 Telegram에서도 답변드립니다.
WhatsApp 선택 사항
형식: +국가 코드 + 번호 (예: +82XXXXXXXXX).

버튼을 클릭하면 데이터 처리에 동의하는 것으로 간주됩니다.