Skip to content

jongmine/jongmin-server-infra

Folders and files

NameName
Last commit message
Last commit date

Latest commit

Β 

History

59 Commits
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 

Repository files navigation

🏠 Jongmin's Home Server Infrastructure

πŸ—οΈ System Architecture

이 μ„œλ²„λŠ” Proxy Tier μ „λž΅μ„ 톡해 λ³΄μ•ˆκ³Ό 접근성을 λΆ„λ¦¬ν•©λ‹ˆλ‹€.

graph TD
    %% External Access
    User((User)) -->|HTTPS/443| CF[Cloudflare Proxy]
    Dev((Developer)) -->|VPN/SSH| Tailscale[Tailscale Network]

    %% Gateway Layer
    CF -->|TLS Encrypted| Traefik[Traefik Gateway]
    Tailscale -.->|Admin Access| Server[Ubuntu Server]

    %% Docker Networks
    subgraph Docker Host [Home Server]
        direction TB

        subgraph Gateway Net [jongmin-net]
            Traefik
            Homepage[Homepage Dashboard]
            Portainer[Portainer]
            WebApp[App Frontend]
        end

        subgraph Internal Net [Isolated Networks]
            DB[(Database)]
            Redis[(Cache)]
            Worker[Background Worker]
        end

        %% Connections
        Traefik -->|Routing| Homepage
        Traefik -->|Routing| Portainer
        Traefik -->|Routing| WebApp

        WebApp <-->|Private| DB
        WebApp <-->|Private| Redis
    end

    %% Security
    Traefik -.->|Auth Check| BasicAuth[Global Basic Auth]
Loading

πŸ“‚ Project Structure

.
β”œβ”€β”€ ansible.cfg               # Ansible μ„€μ •
β”œβ”€β”€ inventory/
β”‚   β”œβ”€β”€ hosts.yml             # μ„œλ²„ 접속 정보
β”‚   └── group_vars/all/
β”‚       β”œβ”€β”€ vars              # 곡개 λ³€μˆ˜
β”‚       └── vault             # 민감 정보 (Vault μ•”ν˜Έν™”)
β”œβ”€β”€ playbooks/                # 메인 배포 슀크립트 (site.yml)
β”œβ”€β”€ roles/                    # Ansible Roles (Core Infra)
β”‚   β”œβ”€β”€ common/
β”‚   β”‚   β”œβ”€β”€ defaults/         # κΈ°λ³Έκ°’ λ³€μˆ˜
β”‚   β”‚   └── tasks/            # κΈ°λ³Έ μ„€μ •
β”‚   β”œβ”€β”€ cpu_power_management/
β”‚   β”‚   β”œβ”€β”€ defaults/         # κΈ°λ³Έκ°’ λ³€μˆ˜
β”‚   β”‚   β”œβ”€β”€ tasks/            # CPU λΆ€μŠ€νŠΈ λΉ„ν™œμ„±ν™”
β”‚   β”‚   β”œβ”€β”€ templates/        # Systemd μ„œλΉ„μŠ€ ν…œν”Œλ¦Ώ
β”‚   β”‚   └── handlers/         # μž¬μ‹œμž‘ ν•Έλ“€λŸ¬
β”‚   β”œβ”€β”€ docker/
β”‚   β”‚   β”œβ”€β”€ defaults/         # κΈ°λ³Έκ°’ λ³€μˆ˜
β”‚   β”‚   └── tasks/            # Docker Engine & Portainer
β”‚   β”œβ”€β”€ traefik/
β”‚   β”‚   β”œβ”€β”€ defaults/         # κΈ°λ³Έκ°’ λ³€μˆ˜
β”‚   β”‚   β”œβ”€β”€ tasks/            # Gateway & SSL
β”‚   β”‚   β”œβ”€β”€ templates/        # μ„€μ • 파일 ν…œν”Œλ¦Ώ
β”‚   β”‚   └── handlers/         # μž¬μ‹œμž‘ ν•Έλ“€λŸ¬
β”‚   β”œβ”€β”€ homepage/             # Dashboard
β”‚   β”œβ”€β”€ tailscale/            # VPN
β”‚   β”œβ”€β”€ ddns/                 # Dynamic DNS μ—…λ°μ΄νŠΈ
β”‚   β”œβ”€β”€ fail2ban/             # μΉ¨μž… 차단 (Brute-force λ°©μ–΄)
β”‚   └── monitoring/           # Grafana / Prometheus / Loki / Tempo μŠ€νƒ
β”œβ”€β”€ docs/                     # πŸ“š Documentation
β”‚   β”œβ”€β”€ CD_SCRIPT_GUIDE.md              # [μ€‘μš”] μ„œλΉ„μŠ€ 배포 κ°€μ΄λ“œ
β”‚   β”œβ”€β”€ MONITORING_GUIDE.md             # λͺ¨λ‹ˆν„°λ§ μŠ€νƒ κ°€μ΄λ“œ
β”‚   β”œβ”€β”€ TROUBLESHOOTING.md              # νŠΈλŸ¬λΈ”μŠˆνŒ… λͺ¨μŒ
β”‚   β”œβ”€β”€ ANSIBLE_DOCKER_GUIDE.md         # 인프라 vs μ•± 관리 κΈ°μ€€
β”‚   β”œβ”€β”€ ACCOUNT_AND_PERMISSION_MANAGEMENT.md # 계정 및 κΆŒν•œ 관리
β”‚   β”œβ”€β”€ TRAEFIK_GUIDE.md                # κ²Œμ΄νŠΈμ›¨μ΄ 상세 μ„€μ •
β”‚   β”œβ”€β”€ HOMEPAGE_GUIDE.md               # λŒ€μ‹œλ³΄λ“œ μ»€μŠ€ν„°λ§ˆμ΄μ§•
β”‚   β”œβ”€β”€ TAILSCALE_ACL_GUIDE.md          # VPN μ ‘κ·Ό μ œμ–΄ μ •μ±…
β”‚   └── PORTAINER_GUIDE.md              # μ»¨ν…Œμ΄λ„ˆ GUI 관리
└── README.md                 # 이 파일

λ³€μˆ˜ 관리 원칙

Ansible Best Practicesλ₯Ό 따라 λ³€μˆ˜λ₯Ό μ²΄κ³„μ μœΌλ‘œ κ΄€λ¦¬ν•©λ‹ˆλ‹€:

  • 곡개 λ³€μˆ˜ (inventory/group_vars/all/vars): 도메인, λ„€νŠΈμ›Œν¬ 이름 λ“±
  • 민감 λ³€μˆ˜ (inventory/group_vars/all/vault): API 토큰, λΉ„λ°€λ²ˆν˜Έ λ“± (vault_ 접두사)
  • Role κΈ°λ³Έκ°’ (roles/*/defaults/main.yml): 각 role의 κΈ°λ³Έ μ„€μ •κ°’

λ³€μˆ˜ μΆ”κ°€ 방법

곡개 λ³€μˆ˜ μΆ”κ°€:

vi inventory/group_vars/all/vars

민감 λ³€μˆ˜ μΆ”κ°€:

# 1. vars νŒŒμΌμ— μ°Έμ‘° μΆ”κ°€
echo 'new_token: "{{ vault_new_token }}"' >> inventory/group_vars/all/vars

# 2. vault νŒŒμΌμ— μ‹€μ œ κ°’ μΆ”κ°€ (μ•”ν˜Έν™”λœ 경우)
ansible-vault edit inventory/group_vars/all/vault

πŸš€ Quick Start

1. Prerequisites

  • Ubuntu 24.04 LTS
  • Ansible μ„€μΉ˜ (brew install ansible)
  • Git Clone & Vault μ„€μ •
# Vault ν…œν”Œλ¦Ώ 볡사
cp inventory/group_vars/all_vault.yml.template inventory/group_vars/all/vault

# Vault 파일 νŽΈμ§‘ (μ‹€μ œ API 토큰 λ“± μž…λ ₯)
ansible-vault edit inventory/group_vars/all/vault

2. Configure Inventory

inventory/hosts.yml νŒŒμΌμ—μ„œ νƒ€κ²Ÿ μ„œλ²„μ˜ IPλ₯Ό μˆ˜μ •ν•˜μ„Έμš”.

ansible_host: 192.168.x.x # μ‹€μ œ μ„œλ²„ IP μž…λ ₯

3. Vault μ•”ν˜Έν™” (운영 ν™˜κ²½)

운영 ν™˜κ²½μ—μ„œλŠ” vault νŒŒμΌμ„ λ°˜λ“œμ‹œ μ•”ν˜Έν™”ν•˜μ„Έμš”:

# Vault 파일 μ•”ν˜Έν™”
ansible-vault encrypt inventory/group_vars/all/vault

# μ•”ν˜Έν™”λœ 파일 νŽΈμ§‘
ansible-vault edit inventory/group_vars/all/vault

4. Deploy Infrastructure

# Vault λΉ„λ°€λ²ˆν˜Έ 없이 μ‹€ν–‰ (개발 ν™˜κ²½, vault 평문)
ansible-playbook -i inventory/hosts.yml playbooks/site.yml

# Vault λΉ„λ°€λ²ˆν˜Έμ™€ ν•¨κ»˜ μ‹€ν–‰ (운영 ν™˜κ²½, vault μ•”ν˜Έν™”)
ansible-playbook -i inventory/hosts.yml playbooks/site.yml --ask-vault-pass

# Dry-run (변경사항 미리 확인)
ansible-playbook -i inventory/hosts.yml playbooks/site.yml --check --ask-vault-pass

πŸ“š Documentation Index

1. 배포 및 운영 (For Developers & Agents)

πŸ›‘οΈ λ³΄μ•ˆ μ •μ±… (Security Policy)

이 μ„œλ²„λŠ” Traefik 미듀웨어λ₯Ό μ‚¬μš©ν•˜μ—¬ μ„œλΉ„μŠ€λ³„λ‘œ μ ‘κ·Ό μ œμ–΄λ₯Ό μˆ˜ν–‰ν•©λ‹ˆλ‹€.

μ „μ—­ 인증 (Basic Auth) 적용 λŒ€μƒ

λ‹€μŒμ˜ 핡심 인프라 μ„œλΉ„μŠ€λŠ” 접속 μ‹œ μ „μ—­ 인증(auth-jongmin)이 ν•„μš”ν•©λ‹ˆλ‹€.

  • Homepage: https://jongmine.cloud
  • Traefik Dashboard: https://traefik.jongmine.cloud
  • Portainer: https://portainer.jongmine.cloud
  • Glances: https://glances.jongmine.cloud

μ„œλΉ„μŠ€λ³„ μ„€μ • κ°€μ΄λ“œ

  • 곡개 μ„œλΉ„μŠ€ (API λ“±): λ³„λ„μ˜ 미듀웨어 μ„€μ • 없이 λ°°ν¬ν•˜λ©΄ μ™ΈλΆ€μ—μ„œ 자유둭게 μ ‘κ·Ό κ°€λŠ₯ν•©λ‹ˆλ‹€.
  • λΉ„κ³΅κ°œ μ„œλΉ„μŠ€: λ³΄μ•ˆμ΄ ν•„μš”ν•œ 경우 Docker Label에 traefik.http.routers.[name].middlewares=auth-jongmin@file을 μΆ”κ°€ν•΄μ•Ό ν•©λ‹ˆλ‹€.
  • 상세 μ„€μ • 방법은 μ„œλΉ„μŠ€ 배포 κ°€μ΄λ“œλ₯Ό μ°Έκ³ ν•˜μ„Έμš”.

πŸ–₯️ μ„œλ²„ 사양

ν•­λͺ© κ°’
CPU AMD Ryzen 7 4700U with Radeon Graphics (8 cores)
λ©”λͺ¨λ¦¬ 32GB RAM
Swap 4GB
μŠ€ν† λ¦¬μ§€ 512GB
OS Ubuntu 24.04.4 LTS

πŸ› οΈ μ‹œμž‘ν•˜κΈ° (Getting Started)

2. 인프라 상세 (For Admins)

3. λ³΄μ•ˆ 및 κΆŒν•œ

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages