아래 내용은 제미나이 ai 를 이용한 홈서버 구축 내용을 담고 있습니다.
proxmox 서버 위에 설치한 두 대의 우분투 서버 중 하나에는 리버스 프록시 서버를 설치하고, 다른 하나는 서비스 서버인데 예제에서는 워드프레스 서버를 설치했습니다.
비밀번호나 아이디들이 보이긴 하는데 전부 test 용도로 구축한 것이라 실제 사용과는 다릅니다.WordPress와 Caddy 리버스 프록시 구축 가이드 (Docker 기반)
이 문서는 두 대의 Ubuntu 서버에 각각 WordPress와 Caddy 리버스 프록시를 Docker를 이용해 구축하고, Cloudflare를 통해 외부 도메인과 안전하게 연결하는 전체 과정을 안내합니다.
📜 목차 (클릭하여 이동)
- 1단계: 사전 준비 (두 서버 공통)
- 2단계: 워드프레스 서버 설치 (192.168.77.121)
- 3단계: 클라우드플레어(Cloudflare) DNS 설정
- 4단계: 리버스 프록시 서버 설치 (192.168.77.120)
- 5단계: 설치 후 관리 (비밀번호 변경)
- 6단계: 오류 해결 과정
1단계: 사전 준비 (두 서버 공통)
⚠️ 중요: 아래 작업은 두 대의 서버(
192.168.77.121
,192.168.77.120
) 모두에 각각 실행해야 합니다.
1.1. 시스템 업데이트 및 필수 패키지 설치
# 패키지 목록 업데이트
sudo apt-get update
# 설치된 패키지 업그레이드
sudo apt-get upgrade -y
# 필수 패키지 설치
sudo apt-get install -y curl wget
1.2. 도커(Docker) 설치
# 도커 설치 스크립트 다운로드 및 실행
curl -fsSL https://get.docker.com -o get-docker.sh
sudo sh get-docker.sh
1.3. 일반 계정(a)에 도커 실행 권한 부여
sudo
없이 docker
명령어를 사용하기 위해 계정(a
)을 docker
그룹에 추가합니다.
# 'a' 사용자를 docker 그룹에 추가
sudo usermod -aG docker a
로그아웃 후 다시 접속하거나
newgrp docker
명령어를 실행해야 권한이 적용됩니다.
2단계: 워드프레스 서버 설치 (IP: 192.168.77.121)
2.1. 작업 디렉토리 생성
mkdir ~/my-wordpress && cd ~/my-wordpress
2.2. docker-compose.yml
파일 작성
nano docker-compose.yml
아래 내용을 붙여넣으세요.
# 도커 컴포즈 파일 버전 정의
version: '3.8'
# 실행할 서비스(컨테이너)들 정의
services:
# MySQL 데이터베이스 서비스
mysql:
image: mysql:8.0
container_name: wordpress_db
restart: always
volumes:
- ./mysql-data:/var/lib/mysql
environment:
MYSQL_ROOT_PASSWORD: 'your_strong_root_password'
MYSQL_DATABASE: 'wordpress'
MYSQL_USER: 'widetest'
MYSQL_PASSWORD: '12345678'
networks:
- wordpress-network
# 워드프레스 서비스
wordpress:
image: wordpress:latest
container_name: wordpress_app
restart: always
depends_on:
- mysql
ports:
- "8080:80"
volumes:
- ./wordpress-data:/var/www/html
environment:
WORDPRESS_DB_HOST: 'mysql'
WORDPRESS_DB_USER: 'widetest'
WORDPRESS_DB_PASSWORD: '12345678'
WORDPRESS_DB_NAME: 'wordpress'
networks:
- wordpress-network
# 서비스들이 사용할 네트워크 정의
networks:
wordpress-network:
driver: bridge
파일 저장:
Ctrl + X
→Y
→Enter
2.3. 워드프레스 실행
docker compose up -d
2.4. 중간 확인
docker ps
명령어로 wordpress_app
와 wordpress_db
컨테이너가 Up
상태인지 확인 후, 웹 브라우저에서 http://192.168.77.121:8080 으로 접속하여 워드프레스 설치 화면이 보이는지 확인합니다.
3단계: 클라우드플레어(Cloudflare) DNS 설정
3.1. 네임서버를 클라우드플레어로 변경
- Cloudflare에 로그인 후
+ 사이트 추가
로widesea.net
을 등록합니다. - 클라우드플레어가 알려주는 2개의 네임서버 주소를 확인합니다.
- 도메인을 구매한 업체(가비아, GoDaddy 등)에 로그인하여 네임서버 정보를 클라우드플레어의 것으로 변경합니다.
3.2. DNS A 레코드 설정
- 클라우드플레어 DNS > 레코드 메뉴로 이동합니다.
+ 레코드 추가
를 클릭하여 아래와 같이 설정합니다.- 유형:
A
- 이름:
@
(또는widesea.net
) - IPv4 주소: 리버스 프록시 서버의 공인 IP 주소 (
192.168.77.120
아님) - 프록시 상태: 주황색 구름 (프록시됨)
- 유형:
3.3. SSL/TLS 암호화 모드 설정
- 클라우드플레어 SSL/TLS > 개요 메뉴로 이동합니다.
- 암호화 모드를 전체(Strict)로 선택합니다.
4단계: 리버스 프록시 서버 설치 (IP: 192.168.77.120)
4.1. 작업 디렉토리 생성
mkdir ~/my-caddy && cd ~/my-caddy
4.2. Caddyfile 작성
nano Caddyfile
widesea.net {
reverse_proxy 192.168.77.121:8080
}
4.3. docker-compose.yml
파일 작성
nano docker-compose.yml
version: '3.7'
services:
caddy:
image: caddy:latest
container_name: caddy_proxy
restart: unless-stopped
ports:
- "80:80"
- "443:443"
volumes:
- ./Caddyfile:/etc/caddy/Caddyfile
- caddy_data:/data
- caddy_config:/config
networks:
- caddy-network
volumes:
caddy_data:
caddy_config:
networks:
caddy-network:
driver: bridge
4.4. Caddy 리버스 프록시 실행
docker compose up -d
4.5. 최종 확인
모든 설정 완료 후 웹 브라우저에서 https://widesea.net 으로 접속하여 자물쇠(🔒) 아이콘과 함께 워드프레스 설치 화면이 나타나는지 확인합니다.
5단계: 설치 후 관리 (비밀번호 변경)
5.1. 워드프레스 관리자 계정 비밀번호 변경
https://widesea.net/wp-admin
으로 접속하여 로그인합니다.- 사용자 > 모든 사용자 메뉴로 이동합니다.
- 계정 편집 화면에서 '새 비밀번호 설정'을 통해 변경합니다.
5.2. 데이터베이스(MySQL) 비밀번호 변경
⚠️ 서비스 중단 및 데이터 유실 위험이 있으므로 신중하게 진행하세요.
- 워드프레스 서버(
192.168.77.121
)에 접속 후my-wordpress
폴더로 이동합니다. docker compose down
으로 서비스를 중지합니다.nano docker-compose.yml
으로 파일을 열어mysql
과wordpress
서비스의 비밀번호를 모두 새것으로 수정합니다.docker compose up -d
로 서비스를 다시 시작합니다.
6단계: 오류 해결 과정
⚫ Error 523: Origin is unreachable 분석 및 해결
- 원인: 클라우드플레어가 사용자의 서버(Origin)에 접속하지 못함. 대부분 공유기 포트포워딩 설정 누락이 원인입니다.
- 해결책:
- 공유기 포트포워딩: 외부 포트
80
,443
(TCP)을 리버스 프록시 서버 IP(192.168.77.120
)의80
,443
포트로 전달하는 규칙을 추가합니다. - 서버 방화벽 확인: 리버스 프록시 서버에서
sudo ufw allow 80/tcp
,sudo ufw allow 443/tcp
명령으로 방화벽을 엽니다.
- 공유기 포트포워딩: 외부 포트
⚫ Error 525: SSL Handshake Failed 분석 및 해결
- 원인: 클라우드플레어와 Caddy 서버 간의 SSL 암호화 협상 실패. 대부분 Caddy가 SSL 인증서를 발급받지 못했기 때문입니다.
- 해결책:
- Caddy 로그 확인:
docker compose logs -f caddy
명령으로 로그를 확인합니다.challenge failed
오류가 보이면 인증서 발급에 실패한 것입니다. - 80번 포트 확인: Let's Encrypt 인증을 위해서는 80번 포트가 반드시 열려있어야 합니다. 523 오류 해결 시 누락했다면 포트포워딩 및 방화벽 규칙에 추가합니다.
- 진단: 클라우드플레어 SSL 모드를 잠시
전체(Full)
로 변경하여 접속되면, 인증서 발급 문제임이 확실합니다.
- Caddy 로그 확인:
⚫ Caddy 로그 분석 및 최종 해결
- 로그 분석 결과:
- 초기 로그에는 80번 포트가 막혀
challenge failed ... 523
오류가 발생하며 인증서 발급에 실패했습니다. - 이후 재시도 시점의 로그에는
served key authentication
,certificate obtained successfully
메시지가 나타납니다.
- 초기 로그에는 80번 포트가 막혀
- 최종 결론:
- 로그 분석 결과, 80번 포트 문제가 해결되어 최종적으로 SSL 인증서 발급에 성공했습니다.
- 최종 조치:
- https://widesea.net 에 접속하여 사이트가 정상적으로 표시되는지 확인합니다.
- 보안을 위해 클라우드플레어 SSL/TLS 암호화 모드를
전체(Strict)
로 다시 설정합니다.
댓글 없음: