◾️ NPM
- Nginx Proxy Manager(NPM)
- 공식 홈페이지 주소
- SSL 인증서 발급 및 관리 가능
- Nginx Proxy Manager는 직관적인 GUI로 쉽고 편하게 프록시 설정이 가능.
- HTTP에서 HTTPS로 강제 리다이렉트, Reverse Proxy 설정, 강제 HTTPS 설정 등의 강력한 기능들로 편한 웹 서버 관리
◾️ NPM
- 운영 환경: Ubuntu 22.04
- docker / docker-compose 설치 필요.
▪️ 사전 준비
• 프로젝트 경로 생성
docker-compose.yaml 파일을 작성할 경로를 생성해주도록 하자.
$ mkdir -p /docker/npm
$ cd /docker/npm
$ touch docker-compose.yaml
• 도커 네트워크 설정
아래처럼 도커 네트워크를 생성해놓으면 다른 docker compose를 up
할 때 편리하다.
만약 다른 경로에서 다른 서비스의 docker compose를 올리는 상황이 생긴 경우 docker network를 npm이 속한 네트워크와 맞춰주지 않으면 해당 서비스는 프록시가 불가능하다.
docker network create npm-net
▪️ 도커 컴포즈 작성
그리고 NPM 컨테이너와 Let's Encrypt 컨테이너의 데이터를 맵핑할 디렉토리를 생성해주자
$ mkdir /docker/npm/{data,letsencrypt}
docker-compose.yaml를 작성하자
version: "3"
#------------------------------------------#
# Nginx Proxy Manager
#------------------------------------------#
services:
npm:
image: 'jc21/nginx-proxy-manager:latest'
depends_on:
- "db"
restart: always
volumes:
- "./data:/data"
- "./letsencrypt:/etc/letsencrypt"
ports:
- "80:80"
- "81:81"
- "443:443"
environment:
- "TZ=Asia/Seoul"
- "DB_MYSQL_HOST=db"
- "DB_MYSQL_PORT=3306"
- "DB_MYSQL_USER=npm"
- "DB_MYSQL_PASSWORD=npm"
- "DB_MYSQL_NAME=npm"
networks:
- "npm-net"
container_name: npm
db:
image: 'jc21/mariadb-aria:latest'
restart: always
environment:
MYSQL_ROOT_PASSWORD: "npm"
MYSQL_DATABASE: "npm"
MYSQL_USER: "npm"
MYSQL_PASSWORD: "npm"
volumes:
- type: volume
source: "my-data"
target: "/var/lib/mysql"
networks:
- "npm-net"
container_name: db
networks:
npm-net:
name: npm-net
external: true
volumes:
my-data: {}
80,443은 웹 서비스를 위한 포트이고, 81번의 경우 어드민 페이지이다.
docker-compose up -d
명령어로 컨테이너를 생성하자.
▪️ NPM 접속
컨테이너가 정상적으로 생성되었다면 http://<IP주소>:81
또는 http://<도메인>:81
으로 접속해보자.
계정 정보는 아래와 같다.
Email: admin@example.com
Password: changeme
로그인을 하면 유저 정보와 패스워드를 변경해야 한다.
로그인 하고 나오면 어드민 페이지에서 대시보드 / 호스트 / Access List / 인증서 등의 확인이 가능하다.
http://<IP주소>:80
으로 접근 시 아래와 같은 텍스트가 뜬다.
◾️ Proxy host 만들기
▪️ 사전 준비
먼저 프록시 대상 서비스를 올려보자.
dozzle 이라고 하는 도커 컨테이너 로그를 조회할 수 있는 오픈 소스 프로젝트를 이용할 것이다.
docker-compose.yaml을 아래처럼 작성해주자.
version: "3"
services:
dozzle:
image: amir20/dozzle:latest
restart: always
container_name: dozzle
volumes:
- "/var/run/docker.sock:/var/run/docker.sock"
networks:
- "npm-net"
networks:
npm-net:
name: npm-net
external: true
도커 네트워크의 경우 #2-도커 네트워크 설정에서 생성해줬었던 npm-net
로 지정해줘야 한다.
▪️ proxy host 생성
다시 nginx proxy manager 브라우저로 돌아가자.
Dashboard -> Proxy Hosts로 이동한 후
우측 상단 또는 화면 중앙에 'Add Proxy Host' 클릭.
- Domain Names *: 가비아,Route53,CloudFlare 등에서 구입한 도메인 이름
- 나의 경우 앱 별로 서브 도메인을 생성 하였음.
- 가비아 서브 도메인 생성하는 방법 - WTT Devlog
- Foward Hostname / IP: Docker Compose에서 작성했던 컨테이너 이름
- Foward Port: Docker container 내부 Port
▪️ 접속 테스트
위 처럼 작성하고 http://dozzle.waytothem.store
로 접속했을 때 dozzle(컨테이너 로그 조회 서비스)로 정상적으로 접속 된다면 성공이다.