10년간 고생해준 홈 서버를 이제 놓아주고, 신규 홈 서버를 맞추면서 내부 구조를 어떻게 가져갈지에 대한 고민 노트
- 2014년.. 즈음부터 사용했을 걸...?
- CPU: Intel Core i5-4590, 3.30 GHz (4 Cores / 4 Threads)
- Mainboard: ASRock B85M Pro4
- RAM: 24GB DDR3 RAM, 1600 MHz
- 8GB Samsung DDR3 x2
- 4GB Conexant DDR3 x2
- Storage:
- Western Digital HDD (OS)
- Toshiba HDD (Storage)
- CPU: AMD Ryzen5 8500G (4C+4c Cores / 12 Threads)
- Mainboard: ASUS PRIME B650M-A II
- RAM: SK Hynix 5600Mhz 16GB x2
- Storage:
- Samsung PM9A1 M.2 NVMe (OS)
- Toshiba HDD (기존 시스템에서 상속..)
추가로 최대한 소음을 죽이고, 안정적인 전원공급을 위해...
- CPU Cooler: NOCTUA NH-U12A chromax.black
- System Cooler: NOCTUA NF-S12B redux-1200 PWM x4
- Power: Seasonic NEW FOCUS GX-750 GOLD Full Modular ATX3.0
- 고민이 많았던 부분이다.
- 처음 홈 서버를 구성했을 때는 대학생이라 뭘 잘 몰랐고, 아직 Docker 가 널리 사용되지 않았을 때라서 막무가내로 막 올리다보니 나중에 뭐가 있는지도 모르게되었다.
- 친구들 개발 테스트 용도로 쓰라고 계정도 나눠주고 하다보니.. 더 헬 파티 🥲
- 그래서 가급적 이번에는 자주 버전 변경이 일어나거나 상시 사용하지 않아도 되는 서비스들은 Docker Container로 분리를 고려한다.
- 기타 이전 환경 대비 주요한 변경 사항
- apache2 에서 nginx 로 전환
- 대학생, 초년생일 때는 apache2 를 많이썼는데, 이젠 nginx가 훨씬 편하다.
graph TD
CLOUDFLARE[Cloudflare DNS]
CLOUDFLARE -->|Full SSL & Proxied| HOST_OS
subgraph Local Services
NGINX[Nginx]
FAIL2BAN[Fail2ban]
PLEX[Plex Media Server]
CERTBOT[Certbot SSL]
end
subgraph Host System
HOST_OS[Host OS with Ubuntu 24.04 LTS]
HOST_OS -->|Hosts| NGINX
HOST_OS -->|Hosts| FAIL2BAN
HOST_OS -->|Hosts| PLEX
HOST_OS -->|Hosts| CERTBOT
end
subgraph Storage Devices
HDD["/dev/sdb1" HDD]
SSD["/dev/sda1" M.2 SSD]
end
HOST_OS -.-> SSD
NC -.->|Stores Data on| HDD
PLEX -.->|Stores Media on| HDD
subgraph Docker Containers
NC[Nextcloud with PHP]
WIKI[Wiki.js\nwith Node.js]
JENKINS[Jenkin nwith Tomcat/JVM]
REDIS[(Redis)]
MONGO[(MongoDB)]
MARIADB[(MariaDB)]
POSTGRESQL[(PostgreSQL)]
NGINX -->|Reverse Proxy| NC
NGINX -->|Reverse Proxy| WIKI
NGINX -->|Reverse Proxy| JENKINS
NGINX -->|Reverse Proxy| REDIS
NGINX -->|Reverse Proxy| MONGO
NGINX -->|Reverse Proxy| MARIADB
NGINX -->|Reverse Proxy| POSTGRESQL
NC -->|DB Connection| MARIADB
WIKI -->|DB Connection| POSTGRESQL
end
style NGINX fill:#f9f,stroke:#333,stroke-width:2px
style NC fill:#ccf,stroke:#333,stroke-width:2px
style WIKI fill:#ccf,stroke:#333,stroke-width:2px
style JENKINS fill:#ccf,stroke:#333,stroke-width:2px
style REDIS fill:#f96,stroke:#333,stroke-width:2px
style MONGO fill:#f96,stroke:#333,stroke-width:2px
style MARIADB fill:#f96,stroke:#333,stroke-width:2px
style POSTGRESQL fill:#f96,stroke:#333,stroke-width:2px
style FAIL2BAN fill:#fcc,stroke:#333,stroke-width:2px
style CERTBOT fill:#fcc,stroke:#333,stroke-width:2px
style PLEX fill:#fcc,stroke:#333,stroke-width:2px
style SSD fill:#ff9,stroke:#333,stroke-width:2px
style HDD fill:#9cf,stroke:#333,stroke-width:2px
- Full SSL 및 Proxied 방식을 통해 외부 트래픽을 Host로 안전하게 전달한다.
- 일부 서비스는 DNS Only 방식으로 제공한다.
- Host System에는 Ubuntu 24.04 LTS 를 설치하며, NGINX, Fail2ban, Plex Media Server, Certbot SSL 등을 로컬 서비스로 구동한다.
- 모든 로컬 서비스와 Docker 컨테이너를 실행하며, 외부 네트워크와의 인터페이스 역할을 한다.
- Fail2ban: Fail2ban은 시스템 보안을 강화하기 위해 비정상적인 접근 시도를 모니터링하고 차단하는 역할을 한다. NGINX 로그를 분석하여 의심스러운 활동을 감지하고 해당 IP를 차단한다.
- Certbot SSL: Certbot은 NGINX 서버의 SSL 인증서를 관리하고 자동으로 갱신하는 역할을 한다. 이를 통해 웹 서비스가 항상 안전한 HTTPS 연결을 유지할 수 있다.
- Plex Media Server: Plex Media Server는 미디어 파일을 저장하고 스트리밍하는 역할을 한다. 파일 I/O와 스트리밍 성능을 최대한 뽑아내기 위해 로컬 서비스로 구동한다.
- NGINX: NGINX는 리버스 프록시 서버로 사용되어 외부 요청을 적절한 내부 서비스로 라우팅한다. NGINX는 Docker 컨테이너 내부에서 실행되는 여러 웹 및 데이터베이스 서비스로의 트래픽을 관리한다. 이를 통해 외부 사용자로부터의 요청이 적절한 내부 서비스로 전달되고, 필요한 보안 설정을 적용한다.
- NGINX는 이들 Docker 컨테이너에서 실행되는 여러 서비스에 대한 리버스 프록시 역할을 한다.
- NGINX는 Nextcloud, Wiki.js, Jenkins, Redis, MongoDB, MariaDB, PostgreSQL에 대한 리버스 프록시 역할을 수행하며, 각 서비스로의 요청을 적절히 라우팅한다.
- 고민이 있었는데, 좀 번거롭더라도 NGINX 태우는게 나을 것 같아서 이렇게 결정함
- Wiki.js (with Node.js): Wiki.js는 도커 이미지에 포함된 Node.js를 사용하여 실행되며, 문서와 위키 콘텐츠를 제공한다. 현재 님이 보고 있는 https://wiki.yowu.dev 를 제공하는 주체다.
- Nextcloud (with PHP): Nextcloud는 도커 이미지에 포함된 PHP를 사용하여 실행되며, 개인 클라우드 스토리지 서비스를 제공한다.
- Jenkins (with Tomcat/JVM): Jenkins는 도커 이미지에 포함된 Tomcat과 JVM을 사용하여 실행되며, 개인 프로젝트 혹은 토이 프로젝트의 CI/CD를 위해 사용한다. 필요할 때만 컨테이너 올려서 사용한다.
- Redis: Redis는 인메모리 데이터 구조 저장소로, 주로 캐싱 및 실시간 데이터베이스로 사용된다. 테스트나 프로젝트 진행할 때만 컨테이너를 올린다.
- MongoDB: MongoDB는 NoSQL 데이터베이스로, 대용량 데이터 처리를 위한 스토리지 솔루션을 제공한다. 이것도 필요할 때만 컨테이너를 올린다.
- MariaDB: MariaDB는 관계형 데이터베이스 관리 시스템으로, 다양한 애플리케이션의 데이터 저장을 담당한다. Nextcloud에서 의존한다.
- PostgreSQL: PostgreSQL는 객체-관계형 데이터베이스 관리 시스템으로, 복잡한 데이터 구조와 트랜잭션을 관리한다. Wiki.js에서 의존한다.
- SSD: 운영 체제 및 필수 시스템 파일이 저장된다. 빠른 읽기/쓰기를 제공하여 시스템 성능을 향상시킨다.
- HDD: 대용량 저장 장치로, 주로 데이터 저장용으로 사용된다. Nextcloud 데이터와 Plex Media Server의 미디어 파일이 이 디스크에 저장된다.
- AMD CPU 마이크로코드
- 전력 관리
cpufrequtils
or cpupower
sudo cpufreq-info
sudo cpufreq-info -g
(사용가능한 governor 표시)
sudo cpufreq-set -g {governor}
- ondemand 와 같은 거버너를 사용하려면
sudo modprobe cpufreq_ondemand
해야할 수도 있음
tlp
- 근데 필요한가?
- 전력 모니터링
- fail2ban 옵션 활성화 잊지말 것 (enable = true)