
1. docker을 설치한다
https://helena90-study.tistory.com/23
[리눅스] docker 설치하기
보호되어 있는 글입니다. 내용을 보시려면 비밀번호를 입력하세요.
helena90-study.tistory.com
2. 무료인증서 설치 ( https 이용을 위함 )
https는 http의 보안프로토콜이다. https를 이용하기 위해 SSL인증서를 유료구매하여 사용한다.
단 무료인증서의 유효기간은 90일이다. ( https://nhj12311.tistory.com/250 )
사용하지 https를 사용하지 않는다면 이 과정은 건너뛰기 해도 된다.
2-1) docker-compose-certbot.yml을 작성한다
docker-compose-certbot.yml 파일을 열고
$ sudo vi docker-compose-certbot.yml
yml 파일을 작성한다
version: '3.3'
services:
certbot:
image: certbot/certbot
restart: on-failure:1
container_name: "home-certbot"
volumes:
- ./certbot/etc:/etc/letsencrypt
- ./certbot/var:/var/lib/letsencrypt
- ./certbot/log:/var/log
- ./docroot/certbot:/var/www/certbot
ports:
- 80:80
- 443:443
command: certonly --standalone --email 사용자이메일주소 --agree-tos --no-eff-email --force-renewal -d ${DOMAIN}
2-2) 실행
-참고 : 실행 전 nginx가 실행중이라면 종료해야한다. ( nginx와 동일하게 80포트를 사용해야하기 때문 )
$ docker-compose -f docker-compose-nginx.yml down
- 종료되었거나 미설치인 상태라면 아래의 명령어로 docker-compose-certbot.yml 파일을 실행하여 인증서를 다운받는다.
만약 여러개의 도메인에 대한 인증이 필요하다면 domainURL마다 실행해주어 인증서를 발급받아야 한다.
#{domainURL}추가 : www.solena.kr
DOMAIN={domainURL} docker-compose -f docker-compose-certbot.yml up
실행 후 종료될 때 까지 기다리면 인증키가 저장된 위치가 나타난다.
인증키는 주기적으로 갱신해주어야한다는 안내문구가 나타난다.

3. nginx설치
- docker-compose로 설치하기 위해 아래 4가지의 파일을 추가한다.
3-1) Dockerfile 작성 ( 파일 이름은 반드시 Dockerfile 이어야 함)
sudo vi Dockerfile
FROM nginx:latest
USER root
RUN mkdir -p /var/www/www
RUN mkdir -p /var/www/blog
RUN mkdir -p /var/www/certbot
RUN mkdir -p /etc/letsencrypt
RUN chown nginx:nginx /var/www
RUN chown nginx:nginx /var/www/www
RUN chown nginx:nginx /var/www/blog
RUN chown nginx:nginx /var/www/certbot
RUN chown nginx:nginx /etc/letsencrypt
ADD ./nginx/nginx.conf /etc/nginx/nginx.conf
:wq!
3-2) docker-compose.yml을 작성
sudo vi docker-compose-nginx.yml
version: '3.3'
services:
nginx:
build:
context: .
dockerfile: Dockerfile
container_name: "home-nginx"
restart: unless-stopped
volumes:
- ./certbot/etc:/etc/letsencrypt
- ./nginx/conf.d:/etc/nginx/conf.d
- ./nginx/log:/var/log/nginx
- ./docroot/www:/var/www/www
- ./docroot/blog:/var/www/blog
ports:
- 80:80
- 443:443
:wq!
3-3) nginx.conf를 작성
$ mkdir ./nginx
$ sudo vi ./nginx/nginx.conf
user nginx;
worker_processes auto;
error_log /var/log/nginx/error.log notice;
pid /var/run/nginx.pid;
events {
worker_connections 1024;
}
http {
include /etc/nginx/mime.types;
default_type application/octet-stream;
client_max_body_size 0;
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
access_log /var/log/nginx/access.log main;
sendfile on;
#tcp_nopush on;
keepalive_timeout 65;
#gzip on;
include /etc/nginx/conf.d/*.conf;
}
:wq!
3-4) default.conf 를 작성
- 디렉토리 생성
$ mkdir ./nginx/conf.d
파일생성
$ sudo vi ./nginx/conf.d/default.conf
! 도메인주소 변경후 사용해야함
server {
listen 80;
listen [::]:80;
listen 443 ssl http2;
listen [::]:443 ssl http2;
server_name 사용자의도메인;
root /var/www/html;
access_log /var/log/nginx/사용자의도메인_access.log;
error_log /var/log/nginx/사용자의도메인_error.log error;
ssl_certificate /etc/letsencrypt/live/사용자의도메인/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/사용자의도메인/privkey.pem;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header Connection "upgrade";
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection upgrade;
proxy_set_header Accept-Encoding gzip;
proxy_http_version 1.1;
location / {
proxy_pass http://내부아이피주소:포트번호;
}
}
# www.solena.kr
server {
listen 80;
listen [::]:80;
server_name www.solena.kr;
charset utf-8;
root /var/www/www;
access_log /var/log/nginx/www.solena.kr_access.log;
error_log /var/log/nginx/www.solena.kr_error.log error;
location / {
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header Connection "upgrade";
proxy_http_version 1.1;
return 301 https://www.$host$request_uri;
}
}
server {
listen 443 ssl;
server_name www.solena.kr;
server_tokens off;
charset utf-8;
root /var/www/www;
access_log /var/log/nginx/www.solena.kr_access.log;
error_log /var/log/nginx/www.solena.kr_error.log error;
ssl_certificate /etc/letsencrypt/live/www.solena.kr/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/www.solena.kr/privkey.pem;
location / {
return 301 https://www.$host$request_uri;
}
}
또는
upstream 지정서버 {
keepalive 20;
server 아이피주소:포트번호 max_fails=1 fail_timeout=10s;
}
# 사용자의도메인 ${"main.domain.com"};
server {
listen 80;
listen [::]:80;
server_name ${"main.domain.com"};
charset utf-8;
root /var/www/${main};
access_log /var/log/nginx/${"main.domain.com"}_access.log;
error_log /var/log/nginx/${"main.domain.com"}_error.log error;
location / {
return 301 https://$host$request_uri;
}
}
#https 처리
server {
listen 443 ssl;
server_name ${"main.domain.com"};
server_tokens off;
charset utf-8;
root /var/www/${main};
access_log /var/log/nginx/${"main.domain.com"}_access.log;
error_log /var/log/nginx/${"main.domain.com"}_error.log error;
ssl_certificate /etc/letsencrypt/live/${"main.domain.com"}/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/${"main.domain.com"}/privkey.pem;
client_max_body_size 0;
chunked_transfer_encoding on;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header Connection "upgrade";
proxy_http_version 1.1;
add_header Pragma "no-cache";
add_header X-Frame-Options sameorigin;
client_body_buffer_size 1m;
proxy_redirect off;
proxy_next_upstream error timeout invalid_header http_502 http_503;
proxy_connect_timeout 2;
proxy_intercept_errors on;
proxy_buffering on;
proxy_buffer_size 128k;
proxy_buffers 256 16k;
proxy_busy_buffers_size 256k;
proxy_temp_file_write_size 256k;
proxy_max_temp_file_size 0;
proxy_read_timeout 300;
location / { #proxy pass를 통해 지정된 server로 보낸다
proxy_pass http://지정서버;
}
}
:wq!
4. docker 실행
docker을 실행하여
docker-compose -f docker-compose-nginx.yml up -d
docker-compose -f docker-compose-nginx.yml up restart
docker-compose -f docker-compose-nginx.yml up down
# docker log 보기
docker logs -f --tail 10 home-nginx
#인증서 발생
nginx down
certbot docker-compose 실행
nginx 다시 실행
# home certbot
DOMAIN={domainURL} docker-compose -f docker-compose-certbot.yml up
#clean
docker rm -f ${docker ps -a -q}
'실무로부터 > prj 내꺼' 카테고리의 다른 글
| [리눅스] ifconfig : 네트워크 관리 (0) | 2023.05.17 |
|---|