Nginx Reverse Proxy를 쉽게 사용하기 위한 Proxy-manager 구축하기.(NPM)
추가추가
https://svrforum.com/svr/284432
안녕하세요. 달소입니다.
오늘도 새로운 정보를 하나 주워왔습니다 ㅋㅋ..
오늘 라우터가 도착하기로해서 리버스프록시 셋팅을 바꾸려고 이것저것 찾아보는데
Proxy-Manager 라는 Docker Image가 존재하더군요.
https://nginxproxymanager.com/
nginx의 리버스프록시와 Let's Encrypt 인증서를 쉽게 발급받을 수 있도록 도와주는 이미지입니다.
사전준비
설치 OS는 Ubuntu 20 LTS
docker,docker-compose 설치
없으면 apt install docker.io docker-compose
docker-compose로 컨테이너 생성하기.
먼저 데이터를 저장할 디렉터리를 먼저 생성해주세요.
mkdir -p /data/proxy-manager
cd /data/proxy-manager
vi docker-compose.yml
80,443은 웹서비스를 위한 포트 81번은 관리를 위한 웹페이지입니다.
version: '3' services: app: image: 'jc21/nginx-proxy-manager:latest' ports: - '80:80' - '81:81' - '443:443' environment: DB_MYSQL_HOST: "db" DB_MYSQL_PORT: 3306 DB_MYSQL_USER: "npm" DB_MYSQL_PASSWORD: "npm" DB_MYSQL_NAME: "npm" volumes: - ./data:/data - ./letsencrypt:/etc/letsencrypt db: image: 'jc21/mariadb-aria:latest' environment: MYSQL_ROOT_PASSWORD: 'npm' MYSQL_DATABASE: 'npm' MYSQL_USER: 'npm' MYSQL_PASSWORD: 'npm' volumes: - ./data/mysql:/var/lib/mysql
이제 docker-compose up -d 명령어로 컨테이너를 만들겠습니다.
설치후 docker ps 명령어로 컨테이너를 확인할 수 있고 ip:81번으로 접속해주세요.
계정정보는 아래 정보로 입력해주면됩니다.
Email: admin@example.com
Password: changeme
로그인하면 계정명 pw 다변경해야합니다.
로그인 하고나오면 이제 대시보드, 호스트, 액세스리스트, 인증서 등 확인이 가능합니다.
npm의 80번 포트로 접근하면 아래처럼 Congration이 나옵니다
인증서 발급부터 프록시 실습은 다음글에서 작성하도록 하겠습니다.
docker ps 로 컨테이너 id 확인하여, docker logs <컨테이너_id> 로 로그 조회했을 때,
MySQL이 정상적으로 구동되지 않는 경우에 오류가 뜨는 것으로 보입니다.
저 같은 경우,
- ./data/mysql:/var/lib/mysql 를
- ./mysql:/var/lib/mysql 로 수정하여 해당 문제 해결하였습니다.
Dns 여러개면 유몽하겠네요.
나름gui 방식이라 cli가 익숙지 않은 유저들은 좋겠네요 ㅎㅎ
록시할게많아서 바꾸면 편리할거같긴합니다.. 와일드카드 인증서 발급쪽에서 막혀서 고생중이지만요 ㅠ
이래서 비싼 돈 지불하고 전문가 고용을 ㅎㅎ
고생이십니다
오..
감사합니다.
근데 우분투 지금 설치하고 있는데 기냥 다음 다음 눌려 기초적으로 설치를 하면 되는것이죠?
혹시 ip는 자동으로 하고 설치가 마무리 되고 나서 변경이 가능하죠?
넵넵 ip할당은 아래 방법으로도 설치후에 변경가능합니다.
https://svrforum.com/svr/18490
따라하는데 잘 이해가 안되네요.
sudo -i
apt install docker.io docker-compose
mkdir -p /data/proxy-manager
cd /data/proxy-manager
vi docker-compose.yml 에 아래 내용을 복사해서 붙여넣고
version: '3'
services:
app:
image: 'jc21/nginx-proxy-manager:latest'
ports:
- '80:80'
- '81:81'
- '443:443'
environment:
DB_MYSQL_HOST: "db"
DB_MYSQL_PORT: 3306
DB_MYSQL_USER: "npm"
DB_MYSQL_PASSWORD: "npm"
DB_MYSQL_NAME: "npm"
volumes:
- ./data:/data
- ./letsencrypt:/etc/letsencrypt
db:
image: 'jc21/mariadb-aria:latest'
environment:
MYSQL_ROOT_PASSWORD: 'npm'
MYSQL_DATABASE: 'npm'
MYSQL_USER: 'npm'
MYSQL_PASSWORD: 'npm'
volumes:
- ./data/mysql:/var/lib/mysql
docker-compose up -d
이런 순서대로 명령과 vi 편집을 하면 되나요?
넵 맞습니다
ports:
- '80:80'
- '81:81'
- '443:443'
environment:
DB_MYSQL_HOST: "db"
DB_MYSQL_PORT: 3306
DB_MYSQL_USER: "npm"
DB_MYSQL_PASSWORD: "npm"
DB_MYSQL_NAME: "npm"
이부분 이해가 잘 안가는데요.
먼저 공유기에 80,443 두개 포트를 열어야하고
80:80 기준에서 전과 이후 어떻게 구별을 해서 설정을 해야하나요?
그리고 sql 이 필요하군요.
감사합니다.
80/443 은 웹 프록시서버에서 모든 웹 트래픽을 받는걸 의미합니다.
81번 포트는 관리용 웹 GUI 접근용 포트로 열어주시면됩니다.
vi docker-compose.yml 만들어 실행하지 않고
그냥 ssh 에서 바로 명령어 내려서 하는 방법은 없나요?
나스에 도커 설치해서 ssh에서
docker run -d \
--name nginx-proxy\
....
이런 방식으로는 안되나요?
이런 방식은 너무 중복일을 하는것 같습니다. ㅎㅎ
ssh로 실행하기에는 명령어도 길 뿐더러 컨테이너가 개별로 실행되는데 반해
docker-compose.yml 로 관리하는경우 스택으로 구분되어 관리도 편하고 추후에 수정하기도 훨씬 편한축에 속합니다.
xpenology에서는 docker-compose 가 제대로 작동하지않고
요즘 추세가 독립적인 docker run이 아닌 compose로 관리하기때문에 이미지를 만드는쪽에서도 명령어를 제공해주지않네요.
아.. .그렇군요
감사합니다.
이대로 따라 했는데 뭔가 웹접속이 안되네요. ㅠㅠ
서버에서 netstat -lntp 로 열려있는포트확인이 되나요?
접근은 ip :81번으로 하셔야합니다.
- '81:81' 이부분을 저는 8181:8181로 했는데
ip:8181 로 접속을 했습니다.
페이지를 열수가 없습니다. ㅠㅠ
근데 저가 앞에서 질문을 드렸는데
8181:8181
이렇게 구성을 하면
: 문자 앞쪽에 포트와 뒷쪽 포트는 어떤 기준으로 설정을 하는지 이해를 못해서요.
앞쪽포트는 Host가 직접 통신하는 포트이고 뒤쪽포트는 컨테이너가 통신하는 포트입니다.
이미지상에서 81번포트를 관리페이지 용도로 사용하기때문에
81:81에서 뒤쪽 81번은 그대로 두시고 앞쪽을 8181:81 로 바꾸셔야 정상접근되실겁니다.
그럼 컨테이너 삭제는 어떻게 하나요?
저가 nas docker 사용시에는 명령어를 알고 있는데
이런 방식은 생소해서 ㅠㅠ
컨테이너 삭제는
docker stop 컨테이너 이름
docker rm 컨테이너 이름
이렇게 삭제를 하면 되는데 우분투는 좀 다른것 같아서요.
다시 지우고 포트 다시 잡아야겠습니다. ㅎㅎ
건데..
도커 관리하는 도커 설치를 했는데 이것 또한 9000 인데 저는 9001로 했습니다.
9000은 이미 사용중에 있기 때문에 다른 포트를 사용을 해야할것 같아서요.
\
즉,
서버가 두대가 잇는데 지금 사용하는 서버는 정상적으로 셋팅을 해서 사용중에 동일한 포트를 사용하고 있습니다.
지금 테스트 하는 서버에 동일하게 하면 충돌이 일어날까 해서요.
감사합니다.
서버가 다르면 포트가 겹쳐도 상관없습니다.
컨테이너 중지는 docker-compose down 해주시면 됩니다.
아... 서버가 다르면 겹쳐도 되는군요.
컨테이너 중지가 아니라 다시 컨테이너 설치를 하려고 합니다.
컨테이너 삭제 방법을 몰라서요.
감사합니다.
cmt alert