메인으로

Ubuntu Home Web Server Guide

우분투 서버부터 Nginx 프록시까지

가정용 환경에서 웹 서비스를 운영하기 위한 설치 설명서입니다. 별도 빠른 기종에 Ubuntu Server 24.04 LTS를 설치해 기준점으로 두고, 192.168.0.197 PC는 Ubuntu Server 22.04.5 LTS 중계서버로 사용합니다. 도메인과 443 HTTPS 포트 하나를 통해 내부 서비스, USB 역데터링을 활용한 스마트폰 서버, 게시판, 웹진을 안전하게 프록시하는 것이 핵심입니다.

장비 역할 기준: 주 기종은 다른 빠른 PC 기종이며 Ubuntu Server 24.04 LTS를 사용합니다. 192.168.0.197은 현재 PC 사양의 Ubuntu Server 22.04.5 LTS 중계서버로, 웹 프록시와 USB 안드로이드 포워딩, 내부 서비스 연결을 담당합니다. 두 장비 모두 데스크톱판이 아니라 서버 버전으로 구축하는 것을 기준으로 합니다.

구축 목표

  • 별도 빠른 기종의 Ubuntu Server 24.04 LTS 준비
  • 192.168.0.197 Ubuntu Server 22.04.5 LTS 중계서버-PC 역할 분리
  • Nginx + PHP-FPM + MariaDB 기본 웹 스택 설치
  • 닷네임 기준 도메인 구입 후 DNS A/CNAME/TXT 레코드 연결
  • 가정용 공유기에서 443 포트만 웹 프록시 서버로 포워딩
  • Nginx reverse proxy로 내부 서비스와 역데터링 스마트폰 서버를 한 도메인 아래 연결
  • 보안서버 인증서 발급 시 TXT 값으로 도메인 소유 확인
  • UFW 방화벽, SSH 키, 백업, 로그 회전, 자동 복구 타이머 구성

추가 설치 프로그램

  • nginx
    443 HTTPS 진입점과 reverse proxy 담당
  • php-fpm php-cli php-mysql php-curl php-mbstring php-xml php-gd php-zip
    PHP 기반 포털, 게시판, 관리 도구 실행
  • mariadb-server 또는 mysql-server
    그누보드/메신저/게시판 DB 저장소
  • certbot python3-certbot-nginx
    Let’s Encrypt 인증서 자동 발급과 갱신
  • openssh-server ufw fail2ban
    원격 관리와 기본 보안
  • adb android-tools-adb
    USB 역데터링 스마트폰 서버 포워딩과 복구
  • git curl unzip rsync jq cron logrotate dnsutils
    소스 배포, 점검, 백업, DNS TXT 전파 확인, 운영 자동화
가정용 회선은 공개 포트를 최소화해야 합니다. 현재처럼 443 하나만 외부에 열고, Nginx가 내부의 PHP, 그누보드, USB 역데터링 스마트폰 서버, 메신저, 게시판으로 나누어 전달하는 방식이 가장 현실적입니다. 메일 수신처럼 25번 포트가 필요한 서비스는 가정용 환경에서 막힐 수 있으므로 웹 수신함, HTTPS 브릿지, 외부 메일 포워딩을 우선 검토합니다.
STEP 01

Ubuntu Server 설치와 고정 IP

주 기종 PC에는 Ubuntu Server 24.04 LTS를 설치하고 공유기에서 DHCP 예약 또는 Netplan으로 고정 IP를 잡습니다. 192.168.0.197 중계서버 PC는 Ubuntu Server 22.04.5 LTS로 두어 웹 프록시와 스마트폰 포워딩을 맡깁니다. 빠른 주 기종과 중계서버 역할을 분리하면 Nginx 프록시, PHP, DB, 스마트폰 포워딩, 게시판 운영이 동시에 돌아가도 병목이 줄어듭니다.

sudo apt update
sudo apt install -y openssh-server curl git unzip ufw
ip addr
sudo hostnamectl set-hostname netcity-relay
STEP 02

Nginx, PHP-FPM, DB 설치

웹 포털과 게시판을 PHP로 운영하려면 Nginx와 PHP-FPM, MariaDB/MySQL이 필요합니다. 정적 파일은 Nginx가 처리하고 PHP는 FastCGI로 넘깁니다.

sudo apt install -y nginx php-fpm php-cli php-mysql php-curl php-mbstring php-xml php-gd php-zip mariadb-server
sudo systemctl enable --now nginx
sudo systemctl enable --now mariadb
STEP 03

닷네임 도메인 구입과 DNS 연결

도메인은 닷네임에서 구입한 것을 기준으로 설명합니다. 닷네임의 도메인 레코드 관리(DNS)에서 A 레코드는 공인 IP로, 하위 서비스는 CNAME 또는 같은 A 레코드로 연결합니다. 레코드 관리가 보이지 않으면 닷네임 부가서비스용 네임서버를 사용하는지 먼저 확인합니다. 유동 IP라면 DDNS 또는 DNS API 자동 갱신을 준비합니다.

example.com        A      공인IP
mobile.example.com A      공인IP
mail.example.com   A      공인IP
STEP 04

보안서버 인증 TXT 값 입력

보안서버 인증서 발급 과정에서 도메인 소유 확인을 TXT 방식으로 선택하면 인증기관이 호스트 이름과 TXT 값을 제공합니다. 닷네임 DNS 관리에서 TXT 레코드를 추가하고, 받은 값을 그대로 붙여넣은 뒤 DNS 전파를 확인합니다. 예를 들어 ACME 방식은 보통 _acme-challenge 호스트에 긴 토큰 값을 넣습니다.

호스트/이름: _acme-challenge
타입: TXT
값: 인증기관이 발급한 긴 TXT 토큰
TTL: 기본값 또는 300

dig TXT _acme-challenge.example.com +short
nslookup -type=txt _acme-challenge.example.com
STEP 05

공유기 443 포트 포워딩

공유기에서는 외부 443 포트만 192.168.0.197의 443으로 보냅니다. 80 포트가 닫혀 있거나 열기 어렵다면 HTTPS만 기본으로 쓰고, 인증서 갱신 방식은 DNS 인증 또는 이미 열려 있는 HTTPS 구조에 맞춥니다.

외부 443/TCP -> 192.168.0.197:443
내부 서비스는 Nginx location/proxy_pass로 분기
STEP 06

Nginx reverse proxy

한 도메인 아래 여러 경로를 만들고, 내부 서비스로 넘깁니다. USB 역데터링을 활용한 스마트폰 서버는 ADB 포워딩이나 내부 IP로 받은 포트에 연결합니다.

location /usb-android-galaxy-wide3/ {
    proxy_pass http://127.0.0.1:18082/;
    proxy_set_header Host $host;
    proxy_set_header X-Forwarded-Proto https;
}

location /netcity-messenger/ {
    try_files $uri $uri/ /netcity-messenger/index.php?$query_string;
}
STEP 07

HTTPS 인증과 보안

Certbot을 쓰거나, DNS TXT 인증 방식으로 443 HTTPS를 적용합니다. TXT 인증은 80 포트가 닫힌 가정용 환경에서도 도메인 소유 확인을 진행할 수 있어 443 중심 운영과 잘 맞습니다. SSH는 키 기반으로 바꾸고, UFW는 443과 내부 관리에 필요한 포트만 허용합니다.

sudo ufw allow 443/tcp
sudo ufw allow 22/tcp
sudo ufw enable
sudo certbot --nginx -d mobile.example.com
STEP 08

역데터링 스마트폰 서버 연결

스마트폰 서버는 USB 역데터링을 활용한 서버입니다. ADB, USB 역데터링, Termux/Nginx/PHP를 이용하면 스마트폰도 작은 서버 노드가 됩니다. 단, USB 재연결 시 포워딩이 끊기므로 systemd timer로 자동 복구를 둡니다.

adb devices
adb forward tcp:18082 tcp:8082
adb forward tcp:18083 tcp:8083
systemctl enable --now netcity-wide3-recover.timer
STEP 09

운영 점검과 백업

서버 PC는 항상 켜 두고, 로그와 백업을 자동화합니다. 웹진과 게시판 데이터는 DB 덤프와 파일 백업을 함께 가져가야 복구가 쉽습니다.

sudo journalctl -u nginx --since today
sudo tar -czf backup-html.tgz /var/www/html
mysqldump -u root -p DBNAME > DBNAME.sql

관련 자료와 참고 링크