Profile picture

[Docker] Nginx Proxy Manager(NPM)

JaehyoJJAng2023년 05월 15일

◾️ NPM


◾️ 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
image


로그인을 하면 유저 정보와 패스워드를 변경해야 한다.
image
image


로그인 하고 나오면 어드민 페이지에서 대시보드 / 호스트 / Access List / 인증서 등의 확인이 가능하다.
image


http://<IP주소>:80으로 접근 시 아래와 같은 텍스트가 뜬다.
image


◾️ 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로 이동한 후
image


우측 상단 또는 화면 중앙에 'Add Proxy Host' 클릭.
image

  • Domain Names *: 가비아,Route53,CloudFlare 등에서 구입한 도메인 이름
  • Foward Hostname / IP: Docker Compose에서 작성했던 컨테이너 이름
  • Foward Port: Docker container 내부 Port

▪️ 접속 테스트

위 처럼 작성하고 http://dozzle.waytothem.store로 접속했을 때 dozzle(컨테이너 로그 조회 서비스)로 정상적으로 접속 된다면 성공이다.
image


Loading script...