차세대 Nginx Proxy Manager NPM Plus 설치하기.

 

안녕하세요. 달소입니다.

 

이번글에서는 앞서 소개해드린 NPM Plus를 직접 docker로 설치해보도록 하겠습니다.

 

NPM을 사용하는 목적이나 기타 개선에대한 내용은 아래글을 참고해주세요.

Nginx Proxy Manager의 개선판 NPM Plus(HTTP3/...[서버 구축(Self-Hosted)] 달소 2023.11.06  안녕하세요. 달소입니다.   또 여기저기 기웃기웃거리다가 발견한 저의 이상향 같은 NPM입니다. ...

 

주의할점은 기존 NPM의 경우 portmapping을 통해 진행했지만 요 NPM Plus의 경우 host network를 사용한 설치방법으로 기본 가이드 되어있으니 참고하시면되겠습니다.

 

사용하는 포트는 80,81,443 입니다.

UDP 443도 사용하는데 이는 HTTP3 지원을 위함입니다. 80/443만 포트포워딩만 해주시면 되겠습니다.

 

++설치해보니 자잘한 버그들이 많습니다(특히 UI쪽) 그래도 proxy는 문제없으니 참고해주세요.

설치환경

Ubuntu 22.04 LTS

docker / docker-compose

Cloudflare 도메인

 

도메인에 A레코드로 IP를 할당해주셔야 정상적으로 사용이 가능합니다.

 

컨테이너 생성하기

mkdir -p /data/npmplus

cd /data/npmplus

vi docker-compose.yml

 

기본적으로 아래 주석처리 되어있는부분의 경우 설명을 잘 읽어주시면 되나

기본으로 사용하기에는 아래 내용만 복붙해주셔도 사용에는 지장 없습니다.

version: "3"
services:
  npmplus:
    container_name: npmplus
    image: zoeyvid/npmplus
    restart: always
    network_mode: host
    volumes:
      - "./data:/data"
#      - "/var/www:/var/www" # optional, if you want to use it as webserver for html/php
#      - "/opt/npm-letsencrypt:/etc/letsencrypt" # Only needed for first time migration from original nginx-proxy-manager to this fork
    environment:
      - "TZ=Asia/Seoul" # set timezone, required
#      - "PUID=1000" # set group id, default 0 (root)
#      - "PGID=1000" # set user id, default 0 (root)
#      - "NIBEP=48694" # internal port, always bound to 127.0.0.1, default 48693, you need to change it, if you want to run multiple npm instances in network mode host
#      - "NPM_PORT=82" # Port the NPM backend should be bound to, default 81, you need to change it, if you want to run multiple npm instances in network mode host
#      - "IPV4_BINDING=127.0.0.1" # IPv4 address to bind, defaults to all
#      - "NPM_IPV4_BINDING=127.0.0.1" # IPv4 address to bind for the NPM backend, defaults to all
#      - "IPV6_BINDING=[::1]" # IPv6 address to bind, defaults to all
#      - "NPM_IPV6_BINDING=[::1]" # IPv6 address to bind for the NPM backend, defaults to all
#      - "DISABLE_IPV6=true" # disable IPv6, overrides with IPV6_BINDING, default false
#      - "NPM_DISABLE_IPV6=true" # disable IPv6 for the NPM backend, overrides with NPM_IPV6_BINDING, default false, overrides NPM_LISTEN_LOCALHOST
#      - "NPM_LISTEN_LOCALHOST=true" # Bind the NPM Dashboard on Port 81 only to localhost, overrides with NPM_IPV4_BINDING/NPM_IPV6_BINDING, default false
#      - "NPM_CERT_ID=1" # ID of cert, which should be used instead of dummycerts, default 0/unset/dummycerts
#      - "DISABLE_HTTP=true" # disables nginx to listen on port 80, default false
#      - "NGINX_LOG_NOT_FOUND=true" # Allow logging of 404 errors, default false
#      - "CLEAN=false" # Clean folders, default true
#      - "FULLCLEAN=true" # Clean unused config folders, default false
#      - "PHP81=true" # Activate PHP81, default false
#      - "PHP81_APKS=php81-curl php-81-curl" # Add php extensions, see available packages here: https://pkgs.alpinelinux.org/packages?branch=v3.18&repo=community&arch=x86_64&name=php81-*, default none
#      - "PHP82=true" # Activate PHP82, default false
#      - "PHP82_APKS=php82-curl php-82-curl" # Add php extensions, see available packages here: https://pkgs.alpinelinux.org/packages?branch=v3.18&repo=community&arch=x86_64&name=php82-*, default none 

 

image.png.jpg

 

image.png.jpg
image.png.jpg

 

컨테이너가 모두 잘 올라오면 https://ip:81 접속해주시면됩니다.

 

기본계정은 아래와같습니다.

 

Email:    admin@example.com
Password: iArhP1j7p1P6TA92FA2FMbbUGYqwcYzxC4AVEe12Wbi94FY9gNN62aKyF1shrvG4NycjjX9KfmDQiwkLZH1ZDR9xMjiG2QmoHXi 

 

접속 후 기본 계정과 PW를 모두 변경해주시면 됩니다.

 

image.png.jpg

 

기본 사용법

기존에 사용하시던 NPM과 크게 달라진 부분은 없습니다.

반드시 80/443이 npm으로 포트포워딩 되어있어야 정상적으로 리버스프록시 역할과 인증서를 받아오니 이점만 유의해주세요.

 

프록시 추가

image.png.jpg

 

웹소켓까지는 익숙하시겠고 나머지는 보안관련 항목들 입니다.

도메인 네임에는 DNS에 등록한 도메인이름을 작성해주세요.

image.png.jpg

 

TLS쪽에서는 인증서 외에 Brotli 압축이나, HTTP3 등이 추가되었습니다.
*현재 기본 인증서가 동작하지않는듯합니다. 에러가나오네요..

Cloudflare dns challenge로 성공했습니다.

image.png.jpg

 

Advanced는 동일하게 커스텀..

 

image.png.jpg

 

끝입니다 ㅎ

 

외부에서 해당 도메인으로 접속해보시면됩니다.

 

http3도 잘 적용됐네요!

image.png.jpg

 

다음글에서는 앞서 소개드린 Crowdsec도 연결해보겠습니다.