GPT 선생님께서 제시해준 단계는 아래와 같다.

1. 목적 정의

  먼저 홈 서버를 사용하려는 목적을 명확히 해야 합니다.

  • 파일 공유 및 저장 (NAS)
  • 웹 서버 호스팅 (개인 블로그, 포트폴리오)
  • 미디어 서버 (예: Plex, Jellyfin)
  • 개발 및 테스트 환경
  • 홈 자동화 시스템 (예: Home Assistant)

2. 하드웨어 선택

  서버 하드웨어는 용도와 예산에 따라 달라집니다.

  • 저가형 옵션: 라즈베리 파이, 미니 PC
  • 고성능 옵션: 기존 PC 재활용, 서버 전용 장비 (예: HP MicroServer)
  • 고려사항: CPU 성능, RAM 크기, 저장 공간, 전력 소모

3. 운영체제 선택

  서버 용도에 따라 적합한 OS를 선택하세요.

  • NAS: TrueNAS, OpenMediaVault
  • 일반 서버: Ubuntu Server, CentOS, Debian
  • 멀티미디어: LibreELEC, Plex
  • 가상화 및 컨테이너: Proxmox VE, Docker

4. 네트워크 구성

  홈 서버는 네트워크 환경이 중요합니다.

  • 고정 IP 주소: 로컬 네트워크에서 서버를 안정적으로 접근
  • 포트 포워딩: 외부에서 접근하려면 라우터 설정 필요
  • 도메인 이름: 고유한 URL 사용 (예: DDNS 서비스 활용)

5. 소프트웨어 설치

  서버의 용도에 따라 적합한 소프트웨어를 설치합니다.

  • 웹 서버: Apache, Nginx
  • DB 서버: MySQL, PostgreSQL
  • 컨테이너 관리: Docker, Kubernetes
  • 기타 앱: Nextcloud, Jellyfin, GitLab

6. 보안 강화

  홈 서버는 보안이 특히 중요합니다.

  • SSH 설정: 비밀번호 대신 키 인증 사용
  • 방화벽 설정: UFW, iptables
  • 자동 업데이트: 소프트웨어 최신 유지
  • 백업 계획: 정기적으로 데이터 백업

7. 모니터링 및 유지보수

  • 서버 상태 모니터링 도구 사용 (예: Netdata, Grafana)
  • 필요 시 하드웨어 업그레이드

 

나의 계획

1. 목적 정의

DB를 사용하는 웹 서버 호스팅

 

2. 하드웨어 선택

가정용 저사양 노트북. 자세한  사양은 아래와 같다.

(나중에 집에 도착하면 추가하겠습니다)

 

3. 운영체제 선택

Linux Ubuntu OS를 사용, 작업 공간은 Docker로 구축

 

4. 네트워크 구성

가정용 라우터를 포트 포워딩 하여 서버로 사용. 도메인은 아직 계획에 없음.

 

5. 소프트웨어 설치

Nginx(리버스 프록시를 위한 서버), Spring boot(실제 웹 서버), MySQL(DB), Jenkins(미정)

 

6. 보안 강화

우선 서버 구축 성공 후에 고려

 

7. 모니터링 및 유지보수

Netdata로 모니터링, 서버 컴퓨터는 교체될 수도 있음.

 

최종 정리

  서버 구축

  1. 서버에 사용할 기기 선정
  2. 노트북 포맷 후 Linux Ubuntu OS 설치
  3. Linux OS 커널 기반 Docker 설치
  4. Docker에서 Nginx 이미지, Spring boot 이미지, MySQL 이미지를 통해 각각 컨테이너 생성 후 실행
  5. Spring boot 서버와 MySQL 서버 연동
  6. Nginx 서버와 Spring boot 서버 연동
  7. 서버와 연결된 통신 장비[각주:1] 포트 포워딩

  서버 업데이트

  1. Docker에서 서로 연동된 Nginx 서버, Spring boot 서버, MySQL 서버 실행
  2. 서버 파일에 변경해야 할 사항 발생 시 (ex, spring boot 코드 변경 또는 실행 파일 추가)
  3. 외부 작업용 컴퓨터에서 spring boot 프로젝트 컴파일 및 빌드하여 jar 파일 생성
  4. 생성된 jar 파일을 서버로 전송
  5. 서버 파일 Update
  6. 변경된 서버 재실행

마무리

조사 중에 서버 업데이트 단계의 jar 파일 생성 => 서버로 전송 => 서버 파일 Update => 서버 재실행을 간편화 해주는 Jenkins라는 서비스가 있다는 걸 알았다. 상당히 유용한 서비스인 것 같아 다음번에 별도로 다뤄볼 것이다.

  1. ex) 공유기, 라우터 [본문으로]

'Server > Networking' 카테고리의 다른 글

포트 포워딩(Port Forwarding)에 대한 이론  (0) 2024.11.17

+ Recent posts