์ต๊ทผ์ ๊ฐ์ ์๋ฒ๋ฅผ ๋ณ๊ฒฝํ๊ณ ๋ชจ๋ ๊ฒ์ ๋ค์ ๊ตฌ์ฑํด์ผ ํ์ต๋๋ค. ๋๋ https๋ฅผ ํตํด ์ฌ์ดํธ์ ์ก์ธ์คํ ์ ์๊ณ ์ํธํ๋ ์ธ์ฆ์๋ฅผ ์๋์ผ๋ก ์ป๊ณ ๊ฐฑ์ ํ๋ ๊ฒ์ ์ ํธํฉ๋๋ค. ์ด๋ ๋ ๊ฐ์ ๋์ปค ์ด๋ฏธ์ง nginx-proxy ๋ฐ nginx-proxy-companion์ ์ฌ์ฉํ์ฌ ๋ฌ์ฑํ ์ ์์ต๋๋ค.
SSL ์ธ์ฆ์๋ฅผ ์๋์ผ๋ก ์์ ํ๋ ํ๋ก์๋ฅผ ์ฌ์ฉํ์ฌ Docker์์ ์น์ฌ์ดํธ๋ฅผ ์ค์ ํ๋ ๋ฐฉ๋ฒ์ ๋ํ ๊ฐ์ด๋์ ๋๋ค. CentOS 7 ๊ฐ์ ์๋ฒ๊ฐ ์ฌ์ฉ๋ฉ๋๋ค.
์๋ฒ๊ฐ ์ด๋ฏธ ๊ตฌ๋งค, ๊ตฌ์ฑ, ํค๋ฅผ ์ฌ์ฉํ์ฌ ๋ก๊ทธ์ธ, Fail2ban ์ค์น ๋ฑ์ด ์๋ฃ๋์๋ค๊ณ ๊ฐ์ ํฉ๋๋ค.
๋จผ์ ๋์ปค๋ฅผ ์ค์นํด์ผ ํฉ๋๋ค.
- ๋จผ์ ์ข
์์ฑ์ ์ค์นํด์ผ ํฉ๋๋ค.
$ sudo yum install -y yum-utils device-mapper-persistent-data lvm2
- ์ ์ฅ์ ์ฐ๊ฒฐ
$ sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
- ๊ทธ๋ฐ ๋ค์ Docker Community Edition์ ์ค์นํ์ญ์์ค.
$ sudo yum install docker-ce docker-ce-cli containerd.io
- ์์์ ๋์ปค๋ฅผ ์ถ๊ฐํ๊ณ ์คํํ์ธ์.
$ sudo systemctl enable docker $ sudo systemctl start docker
- sudo ์์ด docker๋ฅผ ์คํํ ์ ์๋๋ก docker ๊ทธ๋ฃน์ ์ฌ์ฉ์๋ฅผ ์ถ๊ฐํฉ๋๋ค.
$ usermod -aG docker user
๋ค์ ๋จ๊ณ๋ docker-compose๋ฅผ ์ค์นํ๋ ๊ฒ์ ๋๋ค. ์ ํธ๋ฆฌํฐ๋ ์ฌ๋ฌ ๊ฐ์ง ๋ฐฉ๋ฒ์ผ๋ก ์ค์นํ ์ ์์ง๋ง ๋ถํ์ํ ํจํค์ง๋ก ์์คํ ์ ๋ณต์กํ๊ฒ ๋ง๋ค์ง ์๋๋ก pip ๊ด๋ฆฌ์์ virtualenv๋ฅผ ํตํด ์ค์นํ๋ ๊ฒ์ ์ ํธํฉ๋๋ค.
- ํ ์ค์น
$ sudo yum install python-pip
- virtualenv ์ค์น
$ pip install virtualenv
- ๋ค์์ผ๋ก ํ๋ก์ ํธ๊ฐ ํฌํจ๋ ํด๋๋ฅผ ๋ง๋ค๊ณ ์ด๊ธฐํํด์ผ ํฉ๋๋ค. ํจํค์ง๋ฅผ ๊ด๋ฆฌํ๋ ๋ฐ ํ์ํ ๋ชจ๋ ํญ๋ชฉ์ด ํฌํจ๋ ํด๋๋ ve์
๋๋ค.
$ mkdir docker $ cd docker $ virtualenv ve
- ๊ฐ์ ํ๊ฒฝ์ ์ฌ์ฉํ๋ ค๋ฉด ํ๋ก์ ํธ ํด๋์์ ๋ค์ ๋ช
๋ น์ด๋ฅผ ์คํํด์ผ ํฉ๋๋ค.
$ source ve/bin/activate
- docker-compose๋ฅผ ์ค์นํ ์ ์์ต๋๋ค.
pip install docker-compose
์ปจํ ์ด๋๊ฐ ์๋ก๋ฅผ ๋ณผ ์ ์๋๋ก ๋คํธ์ํฌ๋ฅผ ์์ฑํ๊ฒ ์ต๋๋ค. ๊ธฐ๋ณธ์ ์ผ๋ก ๋ธ๋ฆฌ์ง ๋๋ผ์ด๋ฒ๊ฐ ์ฌ์ฉ๋ฉ๋๋ค.
$ docker network create network
๋ค์์ผ๋ก docker-compose๋ฅผ ๊ตฌ์ฑํด์ผ ํฉ๋๋ค. ํ๋ก์๋ ํ๋ก์ ํด๋์ ์๊ณ ํ ์คํธ ์ฌ์ดํธ๋ test ํด๋์ ์์ต๋๋ค. ์๋ฅผ ๋ค์ด ์ ๋ example.com์ด๋ผ๋ ๋๋ฉ์ธ ์ด๋ฆ์ ์ฌ์ฉํ๊ณ ์์ต๋๋ค.
$ mkdir proxy $ mkdir test $ touch proxy/docker-compose.yml $ touch test/docker-compose.yml
ํจ์ ๋ ํ๋ก์/docker-compose.yml
version: '3' networks: default: external: name: network services: nginx-proxy: container_name: nginx-proxy image: jwilder/nginx-proxy ports: - 80:80 - 443:443 volumes: - certs:/etc/nginx/certs - vhost.d:/etc/nginx/vhost.d - html:/usr/share/nginx/html - /var/run/docker.sock:/tmp/docker.sock:ro nginx-proxy-letsencrypt: container_name: nginx-proxy-letsencrypt image: jrcs/letsencrypt-nginx-proxy-companion volumes: - certs:/etc/nginx/certs - vhost.d:/etc/nginx/vhost.d - html:/usr/share/nginx/html - /var/run/docker.sock:/var/run/docker.sock:ro environment: - NGINX_PROXY_CONTAINER=nginx-proxy volumes: certs: vhost.d: html:
ํ๊ฒฝ ๋ณ์ NGINX_PROXY_CONTAINER letsencrypt ์ปจํ ์ด๋๊ฐ ํ๋ก์ ์ปจํ ์ด๋๋ฅผ ํ์ธํ๋ ๋ฐ ํ์ํฉ๋๋ค. /etc/nginx/certs /etc/nginx/vhost.d ๋ฐ /usr/share/nginx/html ํด๋๋ ๋ ์ปจํ ์ด๋์์ ๊ณต์ ๋์ด์ผ ํฉ๋๋ค. letsencrypt ์ปจํ ์ด๋๊ฐ ์ฌ๋ฐ๋ฅด๊ฒ ์๋ํ๋ ค๋ฉด ํฌํธ 80๊ณผ 443 ๋ชจ๋์์ ์ ํ๋ฆฌ์ผ์ด์ ์ ์ก์ธ์คํ ์ ์์ด์ผ ํฉ๋๋ค.
ํจ์ ๋ ํ ์คํธ/docker-compose.yml
version: '3' networks: default: external: name: network services: nginx: container_name: nginx image: nginx:latest environment: - VIRTUAL_HOST=example.com - LETSENCRYPT_HOST=example.com - [email protected]
์ฌ๊ธฐ์๋ ํ๋ก์๊ฐ ์๋ฒ์ ๋ํ ์์ฒญ์ ์ฌ๋ฐ๋ฅด๊ฒ ์ฒ๋ฆฌํ๊ณ ์ฌ๋ฐ๋ฅธ ๋๋ฉ์ธ ์ด๋ฆ์ ๋ํ ์ธ์ฆ์๋ฅผ ์์ฒญํ๊ธฐ ์ํด ํ๊ฒฝ ๋ณ์๊ฐ ํ์ํฉ๋๋ค.
๋จ์ ๊ฒ์ docker-compose๋ฅผ ์คํํ๋ ๊ฒ๋ฟ์ ๋๋ค.
$ cd proxy $ docker-compose up -d $ cd ../test $ docker-compose up -d
์ถ์ฒ : habr.com