Docker, Nginx, Let's Encrypt로 정적 사이트를 정기적으로 배포



호스트 OS 측의 유지 보수가 수수하게 귀찮아지고 VPS에서 Firebase Hosting으로 이동하기 때문에 비망록. 호스트 측에 Docker Compose, certbot(Let's Encrypt)가 들어 있는 것이 전제

compose.yml
version: '2'
services:
  http:
    container_name: http
    build:
      context: ./
      dockerfile: NginxDockerfile
    volumes:
      - "../public:/usr/share/nginx/html:ro"
      - "./nginx.conf:/etc/nginx/nginx.conf:ro"
      - "./nginx.vh.default.conf:/etc/nginx/conf.d/default.conf:ro"
      - "/etc/nginx/ssl/dhparam.pem:/etc/nginx/ssl/dhparam.pem:ro"
      - "/etc/letsencrypt:/etc/letsencrypt:ro"
      - "/etc/localtime:/etc/localtime:ro"
    ports:
      - "80:80"
      - "443:443"


지금은 version3라든가 되어 있는 것 같네요. 설정 파일이나 증명서 주위는 호스트(CentOS)측으로부터 밟거나 마운트하고 있다. ../public이 공개 디렉토리. 정적 콘텐츠 자체도 여기에 설정 파일과 함께 github의 private repository에서 clone 해왔다.

nginx.vh.default.conf
server {
    listen 80;
    listen [::]:80;
    return 301 https://$host$request_uri;
}

server {
    listen        443 ssl http2;
    listen        [::]:443 ssl http2;
      ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
    server_name   ${serverName};

    ssl_certificate           /etc/letsencrypt/live/${serverName}/fullchain.pem;
    ssl_certificate_key       /etc/letsencrypt/live/${serverName}/privkey.pem;
    ssl_prefer_server_ciphers on;
    ssl_ciphers               ECDHE+RSAGCM:ECDH+AESGCM:DH+AESGCM:ECDH+AES256:DH+AES256:ECDH+AES128:DH+AES:!aNULL!eNull:!EXPORT:!DES:!3DES:!MD5:!DSS;

    ssl_dhparam          /etc/nginx/ssl/dhparam.pem;
    add_header           Strict-Transport-Security 'max-age=31536000; includeSubDomains;';
    client_max_body_size 64M;

    ssl_stapling            on;
    ssl_stapling_verify     on;
    ssl_trusted_certificate /etc/letsencrypt/live/${serverName}/fullchain.pem;
    resolver                8.8.8.8;

    charset UTF-8;
    charset_types text/css;

    location / {
        root   /usr/share/nginx/html;
        index  index.html index.htm;
    }

    error_page   500 502 503 504  /50x.html;
    location = /50x.html {
        root   /usr/share/nginx/html;
    }
}

함께 읽고 싶다 : htps : // 코 m/하루카씨/있어 ms/후 37f3바 b8 아5나 3f4f92

ssl_ciphers의 관계로 너무 오래된 IE로부터의 액세스는 할 수 없게 되는 설정이었다고 생각한다. 비늘 기억하지만 아마.

그리고 Strict-Transport-Security(HSTS)를 includeSubDomains 첨부로 유효하게 하고 있으므로, 서브 도메인을 운용하는 경우는 그쪽도 HSTS의 영향을 받는 것을 잊지 않도록 합시다, 등의 교훈이 있다.

HSTS라고 하는 것이 무엇인가라고 하면, 갑자기 HTTPS의 Expires 헤더 같은 것입니다. 야생 스테이크를 콘에서 브로콜리로 바꾸고 소금 후추로 먹는 것을 좋아합니다.

NginxDockerfile
FROM nginx:mainline-alpine

확실히.

crontab
docker-compose down
certbot renew
docker images -aq | xargs docker rmi -f
docker-compose build --no-cache
docker-compose up -d

crontab에서 시작하는 쉘 스크립트. 증명서의 갱신 다음에 이미지를 재생성하고 있다. 그 사이에는 사이트가 다운된다.

좋은 웹페이지 즐겨찾기