<?xml version="1.0" encoding="utf-8" ?>
<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/">
<channel>
<title>우성짱의 NAS &amp;gt; 게시판 &amp;gt; WEB</title>
<link>https://www.wsgvet.com/web</link>
<language>ko</language>
<description>WEB (2020-09-18 01:40:51)</description>

<item>
<title>Docker에 code-server 설치하는 방법</title>
<link>https://www.wsgvet.com/web/249</link>
<description><![CDATA[<p style="text-align:center;" align="center">{이미지:0}</p><p><br /></p><p><br /></p><p>code-server는 쉽게말해 <b>VS Code</b>를 서버에 직접 설치하는 것입니다.</p><p><br /></p><p>설치 후 웹브라우저에서 해당 URL이나 포트에 접근하면, 웹브라우저 안에서 <b>VS Code</b>가 실행된다고 보면 됩니다.</p><p><br /></p><p>기존 홈페이지 파일을 수정하려면, <b>FTP</b>를 열어서 해당 파일을 <b>VS Code</b>로 열고 수정 후 붙여주는 작업을</p><p><br /></p><p>웹브라우저에서 바로 접속해서 즉시 수정가능하게 됩니다.</p><p><br /></p><p>편하지만, 비밀번호가 뚫리면 사이트가 다 날아가겠죠? ^^;;</p><p><br /></p><p><br /></p><p>이 글에서는 제가 소개해드렸던 쉽게 설치하기 시리즈에 바로 적용할 수 있게 알려드리겠습니다.</p><p><br /></p><p>또한 보안을 위해 특정 IP만 접근할 수 있게 <b>Nginx</b> 설정도 추가하는 방법도 같이 알려드리겠습니다.</p><p><br /></p><p><br /></p><p>이 가이드를 바로 적용할 수 있는 글은 다음과 같습니다.</p><p><br /></p><p><br /></p><p>Docker compose로 라이믹스 편하게 설치하는 방법</p><p><br /></p><p><a href="https://www.wsgvet.com/ubuntu/125" rel="nofollow">https://www.wsgvet.com/ubuntu/125</a></p><p><br /></p><p><br /></p><p>Docker compose로 그누보드 편하게 설치하는 방법</p><p><br /></p><p><a href="https://www.wsgvet.com/ubuntu/126" rel="nofollow">https://www.wsgvet.com/ubuntu/126</a></p><p><br /></p><p><br /></p><p>Docker compose로 워드프레스 편하게 설치하는 방법</p><p><br /></p><p><a href="https://www.wsgvet.com/ubuntu/153" rel="nofollow">https://www.wsgvet.com/ubuntu/153</a></p><p><br /></p><p><br /></p><p>Docker compose로 멀티 사이트 운영하기<br /></p><p><br /></p><p><a href="https://www.wsgvet.com/ubuntu/123" rel="nofollow">https://www.wsgvet.com/ubuntu/123</a> </p><p><br /></p><p><br /></p><p><br /></p><p>위 셋팅뿐만 아니라 Docker-compose로 Nginx를 설정했다면 누구나 적용할 수 있습니다.</p><p><br /></p><p><br /></p><p><span style="font-size:24pt;"><b>공통 설정사항</b></span></p><p><br /></p><p><b><span style="font-size:18pt;">docker-compose.yml 파일에 code-server 추가하기</span></b> </p><p><br /></p><p>도커 폴더에서 <b>docker-compose.yml</b> 을 열어서 적당한 위치에 밑의 내용을 넣습니다.</p><p><br /></p><p>[code=docker]</p><p>  code-server:</p><p>    image: linuxserver/code-server</p><p>    container_name: code-server</p><p>    env_file: .code.env</p><p>    environment:</p><p>    - PUID=82</p><p>    - PGID=82</p><p>    - TZ=Asia/Seoul</p><p>    volumes:</p><p>    - ./data/code-server:/config</p><p>    - ./site:/config/site</p><p>    #ports:</p><p>    #  - 8443:8443</p><p>    restart: unless-stopped</p><p>[/code]</p><p><br /></p><p>하나씩 설명드리겠습니다.</p><p><br /></p><p>env_file: <b>.code.env</b> &lt;- 웹브라우저에서 접근할 때 필요한 비밀번호가 저장되는 곳입니다.</p><p><br /></p><p>environment:  &lt;- 환경변수 설정</p><p>- PUID=82     &lt;- code-server에서 수정하기 위해 유저 권한을 지정하는 부분입니다. alpine 이미지에서 <b>82</b>는 <b>www-data</b>를 의미합니다.</p><p>- PGID=82     &lt;- code-server에서 수정하기 위해 그룹 권한을 지정하는 부분입니다.</p><p>- TZ=Asia/Seoul  &lt;- code-server의 시간을 한국으로 설정합니다.</p><p><br /></p><p>volumes:  </p><p>- ./data/code-server:/config  &lt;- code-server의 설정이 들어가는 부분입니다. 테마 설정 등이 저장이 되어, 컨테이너를 재생성해도 설정파일이 남아있게됩니다.</p><p>- ./site:/config/site &lt;- 직접적으로 code-server가 접근 가능한 폴더를 지정하는 것입니다. 즉 ./site 폴더를 code-server 컨테이너의 /config/site 폴더에 마운트해서 code-server가 직접 접근하여 수정가능하게 해줍니다.</p><p><br /></p><p>아까 위에서 환경변수로 PUID와 PGID를 82로 지정했는데요. </p><p><br /></p><p>volumes에 지정된 폴더와 그 이하 파일 및 폴더 모두 82로 권한이 변경됩니다.</p><p><br /></p><p>따라서 ./site:/config/site 이렇게 하면 도커 폴더에 있는 site라는 폴더의 파일 및 이하 폴더가 전부 82로 바뀌게 된다는 말입니다.</p><p><br /></p><p>이 부분을 모르고 volume을 아무곳이나 지정하게 되면,  82로 변경되면 안되는 폴더 및 파일도 변경되어 시스템이 망가지게 됩니다.</p><p><br /></p><p>그래서 반드시 해당 폴더 셋팅을 잘 해야 합니다.</p><p><br /></p><p>제 가이드대로 하셨다면 걱정하지 않아도 됩니다.</p><p><br /></p><p>port는 원래 8443으로 접근하면 바로 열립니다. 하지만 Nginx 프록시를 활용할 계획이므로 주석처리하여 작동하지 않게 합니다.</p><p><br /></p><p><br /></p><p><b>docker-compose.yml</b> 파일의 예시를 알려드리겠습니다.<br /></p><p><br /></p><p>(1) <b>Docker compose로 라이믹스 편하게 설치하는 방법</b> 예시</p><p><br /></p><p>[code=docker]</p><p>version: '3'</p><p><br /></p><p>services:</p><p><br /></p><p>  db:</p><p>    image: mariadb:latest</p><p>    container_name: db</p><p>    restart: unless-stopped</p><p>    env_file: .env</p><p>    environment:</p><p>      - TZ=Asia/Seoul</p><p>    volumes:</p><p>      - ./data/dbdata:/var/lib/mysql</p><p><br /></p><p>  redis:</p><p>    container_name: redis</p><p>    image: redis:alpine</p><p>    restart: unless-stopped</p><p>    volumes:</p><p>      - ./data/dataredis:/data</p><p>      - /etc/localtime:/etc/localtime:ro</p><p>      - /etc/timezone:/etc/timezone:ro</p><p>    command: redis-server --maxmemory 256mb --maxmemory-policy allkeys-lru --appendonly yes</p><p>  </p><p>  certbot:</p><p>    image: certbot/certbot:latest</p><p>    container_name: certbot</p><p>    volumes:</p><p>      - ./ssl/:/etc/letsencrypt/</p><p>      - /usr/share/nginx/html:/usr/share/nginx/html</p><p>    command: certonly -n --webroot -w /usr/share/nginx/html -d &lt;domain&gt; -d <a href="http://www." rel="nofollow">www.&lt;domain&gt;</a> -d port.&lt;domain&gt; -d pma.&lt;domain&gt;</p><p><br /></p><p>  php:</p><p>    depends_on:</p><p>      - db</p><p>    build:</p><p>      context: ./build</p><p>    container_name: php</p><p>    restart: unless-stopped</p><p>    env_file: .env</p><p>    volumes:</p><p>      - ./site:/var/www/web</p><p>      - ./php/php.ini:/usr/local/etc/php/php.ini</p><p>      - /etc/localtime:/etc/localtime:ro</p><p>      - /etc/timezone:/etc/timezone:ro</p><p><br /></p><p>  nginx:</p><p>    depends_on:</p><p>      - php</p><p>    image: nginx:alpine</p><p>    container_name: nginx</p><p>    restart: unless-stopped</p><p>    ports:</p><p>      - "80:80"</p><p>      - "443:443"</p><p>    volumes:</p><p>      - phpmyadmin:/var/www/html</p><p>      - ./ssl/:/etc/letsencrypt/</p><p>      - ./site:/var/www/web</p><p>      - ./nginx/conf.d:/etc/nginx/conf.d</p><p>      - ./nginx/nginx.conf:/etc/nginx/nginx.conf</p><p>      - ./nginx/logs:/var/log/nginx/</p><p>      - /usr/share/nginx/html:/usr/share/nginx/html</p><p>      - /etc/localtime:/etc/localtime:ro</p><p>      - /etc/timezone:/etc/timezone:ro</p><p><br /></p><p>  phpmyadmin:</p><p>    image: phpmyadmin:fpm-alpine</p><p>    container_name: phpmyadmin</p><p>    #ports:</p><p>    #  - "80:80"</p><p>    environment:</p><p>      - PMA_HOST=db</p><p>    restart: unless-stopped</p><p>    depends_on:</p><p>      - db</p><p>    volumes:</p><p>      - /etc/localtime:/etc/localtime:ro</p><p>      - /etc/timezone:/etc/timezone:ro</p><p>      - ./php/php.ini:/usr/local/etc/php/php.ini</p><p>      - phpmyadmin:/var/www/html</p><p><br /></p><p>  portainer:</p><p>    image: portainer/portainer-ce:alpine</p><p>    container_name: portainer</p><p>    restart: unless-stopped</p><p>    #ports:</p><p>    #  - "9000:9000"</p><p>    volumes:</p><p>      - /var/run/docker.sock:/var/run/docker.sock</p><p>      - ./data/portainer_data:/data</p><p>      - /etc/localtime:/etc/localtime:ro</p><p>      - /etc/timezone:/etc/timezone:ro</p><p>      </p><p>  code-server:</p><p>    image: linuxserver/code-server</p><p>    container_name: code-server</p><p>    env_file: .code.env</p><p>    environment:</p><p>      - PUID=82</p><p>      - PGID=82</p><p>      - TZ=Asia/Seoul</p><p>    volumes:</p><p>      - ./data/code-server:/config</p><p>      - ./site:/config/site</p><p>    #ports:</p><p>    #  - 8443:8443</p><p>    restart: unless-stopped</p><p><br /></p><p>volumes:</p><p>  phpmyadmin:</p><p>[/code]</p><p><br /></p><p><br /></p><p>(2) <b>Docker compose로 그누보드 편하게 설치하는 방법</b> 예시</p><p><br /></p><p>[code=docker]</p><p>version: '3'</p><p><br /></p><p>services:</p><p><br /></p><p>  db:</p><p>    image: mariadb:latest</p><p>    container_name: db</p><p>    restart: unless-stopped</p><p>    env_file: .env</p><p>    environment:</p><p>      - TZ=Asia/Seoul</p><p>    volumes:</p><p>      - ./data/dbdata:/var/lib/mysql</p><p>  </p><p>  certbot:</p><p>    image: certbot/certbot:latest</p><p>    container_name: certbot</p><p>    volumes:</p><p>      - ./ssl/:/etc/letsencrypt/</p><p>      - /usr/share/nginx/html:/usr/share/nginx/html</p><p>    command: certonly -n --webroot -w /usr/share/nginx/html -d &lt;domain&gt; -d <a href="http://www." rel="nofollow">www.&lt;domain&gt;</a> -d port.&lt;domain&gt; -d pma.&lt;domain&gt;</p><p><br /></p><p>  redis:</p><p>    container_name: redis</p><p>    image: redis:alpine</p><p>    restart: unless-stopped</p><p>    volumes:</p><p>      - ./data/dataredis:/data</p><p>      - /etc/localtime:/etc/localtime:ro</p><p>      - /etc/timezone:/etc/timezone:ro</p><p>    command: redis-server --maxmemory 256mb --maxmemory-policy allkeys-lru --appendonly yes</p><p><br /></p><p>  smtp:</p><p>    image: namshi/smtp</p><p>    container_name: smtp</p><p>    restart: always</p><p>    env_file: .env</p><p><br /></p><p>  php:</p><p>    depends_on:</p><p>      - db</p><p>    build:</p><p>      context: ./build</p><p>    container_name: php</p><p>    restart: unless-stopped</p><p>    env_file: .env</p><p>    volumes:</p><p>      - ./site:/var/www/web</p><p>      - ./php/php.ini:/usr/local/etc/php/php.ini</p><p>      - /etc/localtime:/etc/localtime:ro</p><p>      - /etc/timezone:/etc/timezone:ro</p><p><br /></p><p>  nginx:</p><p>    depends_on:</p><p>      - php</p><p>    image: nginx:alpine</p><p>    container_name: nginx</p><p>    restart: unless-stopped</p><p>    ports:</p><p>      - "80:80"</p><p>      - "443:443"</p><p>    volumes:</p><p>      - phpmyadmin:/var/www/html</p><p>      - ./ssl/:/etc/letsencrypt/</p><p>      - ./site:/var/www/web</p><p>      - ./nginx/conf.d:/etc/nginx/conf.d</p><p>      - ./nginx/nginx.conf:/etc/nginx/nginx.conf</p><p>      - ./nginx/logs:/var/log/nginx/</p><p>      - /usr/share/nginx/html:/usr/share/nginx/html</p><p>      - /etc/localtime:/etc/localtime:ro</p><p>      - /etc/timezone:/etc/timezone:ro</p><p><br /></p><p>  phpmyadmin:</p><p>    image: phpmyadmin:fpm-alpine</p><p>    container_name: phpmyadmin</p><p>    #ports:</p><p>    #  - "80:80"</p><p>    environment:</p><p>      - PMA_HOST=db</p><p>    restart: unless-stopped</p><p>    depends_on:</p><p>      - db</p><p>    volumes:</p><p>      - /etc/localtime:/etc/localtime:ro</p><p>      - /etc/timezone:/etc/timezone:ro</p><p>      - ./php/php.ini:/usr/local/etc/php/php.ini</p><p>      - phpmyadmin:/var/www/html</p><p><br /></p><p>  portainer:</p><p>    image: portainer/portainer-ce:alpine</p><p>    container_name: portainer</p><p>    restart: unless-stopped</p><p>    #ports:</p><p>    #  - "9000:9000"</p><p>    volumes:</p><p>      - /var/run/docker.sock:/var/run/docker.sock</p><p>      - ./data/portainer_data:/data</p><p>      - /etc/localtime:/etc/localtime:ro</p><p>      - /etc/timezone:/etc/timezone:ro</p><p><br /></p><p>  code-server:</p><p>    image: linuxserver/code-server</p><p>    container_name: code-server</p><p>    env_file: .code.env</p><p>    environment:</p><p>      - PUID=82</p><p>      - PGID=82</p><p>      - TZ=Asia/Seoul</p><p>    volumes:</p><p>      - ./data/code-server:/config</p><p>      - ./site:/config/site</p><p>    #ports:</p><p>    #  - 8443:8443</p><p>    restart: unless-stopped</p><p><br /></p><p>volumes:</p><p>  phpmyadmin:</p><p>[/code]</p><p><br /></p><p><br /></p><p>(3) <b>Docker compose로 워드프레스 편하게 설치하는 방법</b> 예시</p><p><br /></p><p>[code=docker]</p><p>version: '3'</p><p><br /></p><p>services:</p><p><br /></p><p>  db:</p><p>    image: mariadb:latest</p><p>    container_name: db</p><p>    restart: unless-stopped</p><p>    env_file: .env</p><p>    environment:</p><p>      - TZ=Asia/Seoul</p><p>    volumes:</p><p>      - ./data/dbdata:/var/lib/mysql</p><p><br /></p><p>  redis:</p><p>    container_name: redis</p><p>    image: redis:alpine</p><p>    restart: unless-stopped</p><p>    volumes:</p><p>      - ./data/dataredis:/data</p><p>      - /etc/localtime:/etc/localtime:ro</p><p>      - /etc/timezone:/etc/timezone:ro</p><p>    command: redis-server --maxmemory 256mb --maxmemory-policy allkeys-lru --appendonly yes</p><p>  </p><p>  certbot:</p><p>    image: certbot/certbot:latest</p><p>    container_name: certbot</p><p>    volumes:</p><p>      - ./ssl/:/etc/letsencrypt/</p><p>      - /usr/share/nginx/html:/usr/share/nginx/html</p><p>    command: certonly -n --webroot -w /usr/share/nginx/html -d &lt;domain&gt; -d <a href="http://www." rel="nofollow">www.&lt;domain&gt;</a> -d port.&lt;domain&gt; -d pma.&lt;domain&gt;</p><p><br /></p><p>  php:</p><p>    depends_on:</p><p>      - db</p><p>    build:</p><p>      context: ./build</p><p>    container_name: php</p><p>    restart: unless-stopped</p><p>    env_file: .env</p><p>    volumes:</p><p>      - ./site:/var/www/web</p><p>      - ./php/php.ini:/usr/local/etc/php/php.ini</p><p>      - /etc/localtime:/etc/localtime:ro</p><p>      - /etc/timezone:/etc/timezone:ro</p><p><br /></p><p>  nginx:</p><p>    depends_on:</p><p>      - php</p><p>    image: nginx:alpine</p><p>    container_name: nginx</p><p>    restart: unless-stopped</p><p>    ports:</p><p>      - "80:80"</p><p>      - "443:443"</p><p>    volumes:</p><p>      - phpmyadmin:/var/www/html</p><p>      - ./ssl/:/etc/letsencrypt/</p><p>      - ./site:/var/www/web</p><p>      - ./nginx/conf.d:/etc/nginx/conf.d</p><p>      - ./nginx/nginx.conf:/etc/nginx/nginx.conf</p><p>      - ./nginx/logs:/var/log/nginx/</p><p>      - /usr/share/nginx/html:/usr/share/nginx/html</p><p>      - /etc/localtime:/etc/localtime:ro</p><p>      - /etc/timezone:/etc/timezone:ro</p><p><br /></p><p>  phpmyadmin:</p><p>    image: phpmyadmin:fpm-alpine</p><p>    container_name: phpmyadmin</p><p>    #ports:</p><p>    #  - "80:80"</p><p>    environment:</p><p>      - PMA_HOST=db</p><p>    restart: unless-stopped</p><p>    depends_on:</p><p>      - db</p><p>    volumes:</p><p>      - /etc/localtime:/etc/localtime:ro</p><p>      - /etc/timezone:/etc/timezone:ro</p><p>      - ./php/php.ini:/usr/local/etc/php/php.ini</p><p>      - phpmyadmin:/var/www/html</p><p><br /></p><p>  portainer:</p><p>    image: portainer/portainer-ce:alpine</p><p>    container_name: portainer</p><p>    restart: unless-stopped</p><p>    #ports:</p><p>    #  - "9000:9000"</p><p>    volumes:</p><p>      - /var/run/docker.sock:/var/run/docker.sock</p><p>      - ./data/portainer_data:/data</p><p>      - /etc/localtime:/etc/localtime:ro</p><p>      - /etc/timezone:/etc/timezone:ro</p><p><br /></p><p>  code-server:</p><p>    image: linuxserver/code-server</p><p>    container_name: code-server</p><p>    env_file: .code.env</p><p>    environment:</p><p>      - PUID=82</p><p>      - PGID=82</p><p>      - TZ=Asia/Seoul</p><p>    volumes:</p><p>      - ./data/code-server:/config</p><p>      - ./site:/config/site</p><p>    #ports:</p><p>    #  - 8443:8443</p><p>    restart: unless-stopped</p><p><br /></p><p>volumes:</p><p>  phpmyadmin:</p><p>[/code]</p><p><br /></p><p><br /></p><p>(4) <b>Docker compose로 멀티 사이트 운영하기</b> 예시</p><p><br /></p><p>[code=docker]</p><p>version: '3'</p><p><br /></p><p>services:</p><p><br /></p><p>  db:</p><p>    image: mariadb:latest</p><p>    container_name: db</p><p>    restart: unless-stopped</p><p>    env_file: .env</p><p>    environment:</p><p>      - TZ=Asia/Seoul</p><p>    volumes:</p><p>      - ./data/dbdata:/var/lib/mysql</p><p>      - ./db:/docker-entrypoint-initdb.d</p><p><br /></p><p>  redis:</p><p>    container_name: redis</p><p>    image: redis:alpine</p><p>    restart: unless-stopped</p><p>    volumes:</p><p>      - ./data/dataredis:/data</p><p>      - /etc/localtime:/etc/localtime:ro</p><p>      - /etc/timezone:/etc/timezone:ro</p><p>    command: redis-server --maxmemory 256mb --maxmemory-policy allkeys-lru --appendonly yes</p><p><br /></p><p>  smtp:</p><p>    image: namshi/smtp</p><p>    container_name: smtp_relay</p><p>    restart: always</p><p>    env_file: .env</p><p><br /></p><p>  php:</p><p>    depends_on:</p><p>      - db</p><p>    build:</p><p>      context: ./build</p><p>    container_name: php</p><p>    restart: unless-stopped</p><p>    env_file: .env</p><p>    volumes:</p><p>      - ./site:/var/www/html</p><p>      - ./php/php.ini:/usr/local/etc/php/php.ini</p><p>      - /etc/localtime:/etc/localtime:ro</p><p>      - /etc/timezone:/etc/timezone:ro</p><p><br /></p><p>  nginx:</p><p>    depends_on:</p><p>      - php</p><p>    image: nginx:alpine</p><p>    container_name: nginx</p><p>    restart: unless-stopped</p><p>    ports:</p><p>      - "80:80"</p><p>      - "443:443"</p><p>    volumes:</p><p>      - ./site:/var/www/html</p><p>      - ./nginx/conf.d:/etc/nginx/conf.d</p><p>      - ./nginx/nginx.conf:/etc/nginx/nginx.conf</p><p>      - ./nginx/logs:/var/log/nginx/</p><p>      - /etc/localtime:/etc/localtime:ro</p><p>      - /etc/timezone:/etc/timezone:ro</p><p><br /></p><p>  acme.sh:</p><p>    image: neilpang/acme.sh</p><p>    container_name: acme.sh</p><p>    env_file: .env</p><p>    volumes:</p><p>      - ./data/acme.sh:/acme.sh</p><p>      - ./site:/var/www/html</p><p>      - /etc/localtime:/etc/localtime:ro</p><p>      - /etc/timezone:/etc/timezone:ro</p><p>    command: acme.sh --cron --home "/acme.sh"</p><p><br /></p><p>  phpmyadmin:</p><p>    image: phpmyadmin</p><p>    container_name: phpmyadmin</p><p>    #ports:</p><p>    #  - "80:80"</p><p>    environment:</p><p>      - PMA_HOST=db</p><p>    restart: always</p><p>    depends_on:</p><p>      - db</p><p>    volumes:</p><p>      - /etc/localtime:/etc/localtime:ro</p><p>      - /etc/timezone:/etc/timezone:ro</p><p><br /></p><p>  portainer:</p><p>    image: portainer/portainer-ce:alpine</p><p>    container_name: portainer</p><p>    restart: always</p><p>    #ports:</p><p>    #  - "9000:9000"</p><p>    volumes:</p><p>      - /var/run/docker.sock:/var/run/docker.sock</p><p>      - ./data/portainer_data:/data</p><p>      - /etc/localtime:/etc/localtime:ro</p><p>      - /etc/timezone:/etc/timezone:ro</p><p><br /></p><p>  code-server:</p><p>    image: linuxserver/code-server</p><p>    container_name: code-server</p><p>    env_file: .code.env</p><p>    environment:</p><p>      - PUID=82</p><p>      - PGID=82</p><p>      - TZ=Asia/Seoul</p><p>    volumes:</p><p>      - ./data/code-server:/config</p><p>      - ./site:/config/site</p><p>    #ports:</p><p>    #  - 8443:8443</p><p>    restart: unless-stopped</p><p>[/code]</p><p><br /></p><p><br /></p><p>위와 같이 수정하면 됩니다.</p><p><br /></p><p>이제 <b>docker-compose.yml</b> 수정은 끝났습니다.</p><p><br /></p><p><br /></p><p><span style="font-size:24pt;"><b>.code.env 파일 생성하기</b></span></p><p><br /></p><p>웹브라우저에서 접근했을 때 비번을 지정하는 파일입니다.</p><p><br /></p><p>docker-compose.yml 파일과 같은 위치에 .code.env 파일을 생성 후 </p><p><br /></p><p>[code=bash]</p><p># for code-server</p><p>PASSWORD=yourpassword</p><p>[/code]</p><p><br /></p><p>위와 같이 입력합니다. yourpassword 대신에 원하는 비번을 입력하세요.</p><p><br /></p><p>그리고 저장합니다.</p><p><br /></p><p>code-server를 시작합니다.</p><p><br /></p><p>[code=bash]</p><p>sudo docker-compose up -d code-server</p><p>[/code]</p><p><br /></p><p>위 명령어로 다운 받고 실행됩니다.</p><p><br /></p><p><br /></p><p><span style="font-size:24pt;"><b>Nginx 설정하기</b></span></p><p><br /></p><p>웹브라우저에서 접근하는 방법은 2가지가 있습니다.</p><p><br /></p><p>1. <b>code.domain.com</b> 처럼 서브도메인 붙이기</p><p><br /></p><p>2. <b>domain.com:8082</b> 처럼 도메인에 포트 붙이기</p><p><br /></p><p>1번 방법은 443 포트를 사용해서 깔끔하게 접근할 수 있습니다.</p><p><br /></p><p>하지만 도메인 회사의 DNS 설정에서 code를 추가해줘야하고, SSL 인증서를 추가로 받거나 와일드카드 인증서가 필요합니다.</p><p><br /></p><p>2번 방법은 8082 같은 포트를 열어야되는 불편함이 있지만, DNS 설정에 추가할 필요가 없고, SSL 인증서 또한 기존 인증서를 그대로 쓸 수 있는 장점이 있습니다.</p><p><br /></p><p><br /></p><p><b>1번 방법에서 인증서를 추가로 발급 받는 방법을 알려드리겠습니다.</b></p><p><br /></p><p>먼저 도메인의 DNS 설정에서 code를 추가하세요.</p><p><br /></p><p>DNS 설정에서는 code.domain.com을 서버의 IP를 가리키게 합니다.</p><p><br /></p><p>이제 Nginx에 code 설정을 추가하고, SSL 인증서를 새로 발급 받을 것입니다.</p><p><br /></p><p>./nginx/conf.d/ 폴더에 code.conf 라는 파일을 만들고</p><p><br /></p><p>[code=nginx]</p><p>server {</p><p>        listen 80;</p><p>        listen [::]:80;</p><p><br /></p><p>        server_name code.domain.com;</p><p>        </p><p>        # Useful for Let's Encrypt</p><p>        location ~ /\.well-known/acme-challenge/ {</p><p>                allow all;</p><p>                root /usr/share/nginx/html; </p><p>        }</p><p>}</p><p>[/code]</p><p><br /></p><p>code.domain.com을 자신의 도메인으로 수정한 뒤, 저장합니다.</p><p><br /></p><p><br /></p><p>./nginx/conf.d/</p><p><br /></p><p>위 경로에 code를 위한 SSL 설정파일을 만듭니다.</p><p><br /></p><p>code-ssl-conf</p><p><br /></p><p>위와 같은 파일을 만들고</p><p><br /></p><p>[code=nginx]</p><p>ssl_certificate /etc/letsencrypt/live/code.domain.com/fullchain.pem;</p><p>ssl_certificate_key /etc/letsencrypt/live/code.domain.com/privkey.pem;</p><p>ssl_trusted_certificate /etc/letsencrypt/live/code.domain.com/chain.pem;</p><p>add_header X-Frame-Options "SAMEORIGIN" always;</p><p>add_header X-XSS-Protection "1; mode=block" always;</p><p>add_header X-Content-Type-Options "nosniff" always;</p><p>add_header Referrer-Policy "no-referrer-when-downgrade" always;</p><p>add_header Content-Security-Policy "default-src * data: 'unsafe-eval' 'unsafe-inline'" always;</p><p># add_header Strict-Transport-Security "max-age=31536000; includeSubDomains; preload" always;</p><p># enable strict transport security only if you understand the implications</p><p>ssl_stapling on;</p><p>ssl_stapling_verify on;</p><p>resolver 8.8.8.8 8.8.4.4 valid=300s;</p><p>resolver_timeout 10s;</p><p>[/code]</p><p><br /></p><p>위와 같이 넣습니다.</p><p><br /></p><p>code.domain.com 대신에 자신의 도메인을 넣습니다.</p><p><br /></p><p>그리고 저장합니다.</p><p><br /></p><p>code.domian.com의 SSL 인증서 발급을 위한 Nginx 설정은 끝났습니다.</p><p><br /></p><p>[code=bash]</p><p>sudo docker-compose up -d --force-recreate --no-deps nginx</p><p>[/code]</p><p><br /></p><p>위 명령어로 Nginx를 재시작해줍니다.</p><p><br /></p><p><br /></p><p>이제 인증서 생성 단계입니다.</p><p><br /></p><p>와일드카드 인증서를 가지고 계신다면 넘어가면 됩니다.</p><p><br /></p><p>기존에 DNS 설정을 도메인, <a href="">www.도메인,</a> pma.도메인, port.도메인 이렇게 했다면,</p><p><br /></p><p>SSL 인증서도 총 4개의 도메인으로 구성되어 있을 것입니다.</p><p><br /></p><p>여기에 code만 추가하면 되겠죠?</p><p><br /></p><p>docker-compose.yml 파일을 열어서 certbot 부분을 보면</p><p><br /></p><p>[code=docker]</p><p>  certbot:</p><p>    image: certbot/certbot:latest</p><p>    container_name: certbot</p><p>    volumes:</p><p>      - ./ssl/:/etc/letsencrypt/</p><p>      - /usr/share/nginx/html:/usr/share/nginx/html</p><p>    command: certonly -n --webroot -w /usr/share/nginx/html -d domain.com -d <a href="http://www.domain.com" rel="nofollow">www.domain.com</a> -d port.domain.com -d pma.domain.com</p><p>[/code]</p><p><br /></p><p>위와 같이 되어있을 것입니다. 이제 code-server를 위한 인증서 발급으로 수정할 것입니다.</p><p><br /></p><p>[code=docker]</p><p>  certbot:</p><p>    image: certbot/certbot:latest</p><p>    container_name: certbot</p><p>    volumes:</p><p>      - ./ssl/:/etc/letsencrypt/</p><p>      - /usr/share/nginx/html:/usr/share/nginx/html</p><p>    # command: certonly -n --webroot -w /usr/share/nginx/html -d domain.com -d <a href="http://www.domain.com" rel="nofollow">www.domain.com</a> -d port.domain.com -d pma.domain.com</p><p>    command: certonly --dry-run -n --webroot -w /usr/share/nginx/html -d code.domain.com</p><p>[/code]</p><p><br /></p><p>기존 command 부분을 주석처리하고, 밑에 code를 위한 인증서 발급 테스트 명령어를 넣습니다.</p><p><br /></p><p>code.domain.com 대신 자신의 도메인을 넣습니다.</p><p><br /></p><p>저장 후, SSH에서 </p><p><br /></p><p>[code=bash]</p><p>sudo docker-compose up certbot</p><p>[/code]</p><p><br /></p><p>위 명령어를 내리면 인증서 발급 테스트를 받는 것을 실시간으로 볼 수 있습니다.</p><p><br /></p><p>[code=bash]</p><p># docker-compose up certbot</p><p>Starting certbot ... done</p><p>Attaching to certbot</p><p>certbot        | Saving debug log to /var/log/letsencrypt/letsencrypt.log</p><p>certbot        | Plugins selected: Authenticator webroot, Installer None</p><p>certbot        | Cert not due for renewal, but simulating renewal for dry run</p><p>certbot        | Renewing an existing certificate</p><p>certbot        | Performing the following challenges:</p><p>certbot        | http-01 challenge for code.domain.com</p><p>certbot        | Using the webroot path /usr/share/nginx/html for all unmatched domains.</p><p>certbot        | Waiting for verification...</p><p>certbot        | Cleaning up challenges</p><p>certbot        | IMPORTANT NOTES:</p><p>certbot        |  - The dry run was successful.</p><p>certbot exited with code 0</p><p>[/code]</p><p><br /></p><p>위와 같이 <b>dry run was successful</b> 이 나오면 테스트가 성공한 것입니다.</p><p><br /></p><p>다시 docker-compose.yml 를 열어서 cerbot의 command 부분에 있는 --dry-run 옵션을 삭제합니다.</p><p><br /></p><p>저장 후 다시 </p><p><br /></p><p>[code=bash]</p><p>sudo docker-compose up certbot</p><p>[/code]</p><p><br /></p><p>위 명령어를 내리면 정상적으로 발급 받은 것을 확인할 수 있습니다.</p><p><br /></p><p><br /></p><p>이제 Nginx를 SSL 인증서와 연결할 차례입니다.</p><p><br /></p><p>./nginx/conf.d/code.conf 파일을 열어서</p><p><br /></p><p>[code=nginx]</p><p>server {</p><p>        listen 80;</p><p>        listen [::]:80;</p><p><br /></p><p>        server_name code.domain.com;</p><p>        </p><p>        # Useful for Let's Encrypt</p><p>        location ~ /\.well-known/acme-challenge/ {</p><p>                allow all;</p><p>                root /usr/share/nginx/html; </p><p>        }</p><p><br /></p><p>        location / {</p><p>                rewrite ^ <a>https://$host$request_uri?</a> ;</p><p>        }</p><p>}</p><p><br /></p><p>server {</p><p>        listen 443 ssl http2;</p><p>        server_name code.domain.com;</p><p>        server_tokens off;</p><p><br /></p><p>        include /etc/nginx/conf.d/code-ssl-conf;</p><p>        include /etc/nginx/conf.d/options-ssl-nginx;</p><p>       </p><p>        #IP 차단 부분입니다. 밑의 내용을 수정 후 앞에 #을 빼면 IP차단 설정이 적용됩니다.</p><p>        #allow 111.112.333.444; #자신의 집 컴퓨터의 외부IP를 확인 후 넣고 앞에 #을 제거하면 됩니다.</p><p>        #allow 123.123.123.123; #두번째 허용 IP</p><p>        #allow 124.124.124.124; #세번째 허용 IP # 이렇게 허용 IP를 추가해준 후 앞에 #을 제거하면 됩니다.</p><p>        #deny all; # 위 아이피 이외에 모든 IP를 차단합니다. 차단이 필요없다면 앞에 #을 놔두면 됩니다.</p><p><br /></p><p>        location / {</p><p>            proxy_pass         <a href="http://code-server:8443/;" rel="nofollow">http://code-server:8443/;</a></p><p>            proxy_set_header Host $host;</p><p>            proxy_set_header Upgrade $http_upgrade;</p><p>            proxy_set_header Connection upgrade;</p><p>            proxy_set_header Accept-Encoding gzip;   </p><p>        }</p><p>}</p><p>[/code]</p><p><br /></p><p>위와 같이 완성된 형태로 수정 후 저장합니다. 당연히 code.domain.com은 자신의 도메인으로 수정해야 합니다.</p><p><br /></p><p>[code=bash]</p><p>sudo docker-compose up -d --force-recreate --no-deps nginx</p><p>[/code]</p><p><br /></p><p>위 명령어로 Nginx를 재시작해줍니다.</p><p><br /></p><p>이제 웹브라우저에 <b>code.domain.com</b> 으로 접속하고 비번을 입력하면 code-server가 눈앞에 있을 것입니다.</p><p><br /></p><p><br /></p><p>접속에 성공했으니 docker-compose.yml 파일을 다시 수정합니다.</p><p><br /></p><p>[code=docker]</p><p>  certbot:</p><p>    image: certbot/certbot:latest</p><p>    container_name: certbot</p><p>    volumes:</p><p>      - ./ssl/:/etc/letsencrypt/</p><p>      - /usr/share/nginx/html:/usr/share/nginx/html</p><p>    command: certonly -n --webroot -w /usr/share/nginx/html -d domain.com -d <a href="http://www.domain.com" rel="nofollow">www.domain.com</a> -d port.domain.com -d pma.domain.com -d code.domain.com</p><p>[/code]</p><p><br /></p><p>위와 같이 -d code.domain.com 을 추가해주고 저장합니다.</p><p><br /></p><p><br /></p><p><span style="font-size:24pt;"><b>와일드카드 SSL 인증서가 있는 경우</b></span></p><p><br /></p><p>이 경우는 정말 쉽습니다.</p><p><br /></p><p><a href="https://github.com/woosungchoi/docker-multi-site" rel="nofollow">https://github.com/woosungchoi/docker-multi-site</a></p><p><br /></p><p>위와 같이 셋팅되어 있다고 가정하겠습니다.</p><p><br /></p><p><br /></p><p>./nginx/conf.d/에 Nginx 설정파일을 추가합니다.</p><p><br /></p><p>code.conf 파일을 만들어서</p><p><br /></p><p>[code=nginx]</p><p>server {</p><p>        listen 80;</p><p>        listen [::]:80;</p><p><br /></p><p>        server_name code.domain.com;</p><p><br /></p><p>        location / {</p><p>                rewrite ^ <a>https://$host$request_uri?</a> ;</p><p>        }</p><p>}</p><p><br /></p><p>server {</p><p>        listen 443 ssl http2;</p><p>        server_name code.domain.com;</p><p>        server_tokens off;</p><p><br /></p><p>        include /etc/nginx/conf.d/ssl-conf;</p><p>        include /etc/nginx/conf.d/options-ssl-nginx;</p><p><br /></p><p>        #IP 차단 부분입니다. 밑의 내용을 수정 후 앞에 #을 빼면 IP차단 설정이 적용됩니다.</p><p>        #allow 111.112.333.444; #자신의 집 컴퓨터의 외부IP를 확인 후 넣고 앞에 #을 제거하면 됩니다.</p><p>        #allow 123.123.123.123; #두번째 허용 IP</p><p>        #allow 124.124.124.124; #세번째 허용 IP # 이렇게 허용 IP를 추가해준 후 앞에 #을 제거하면 됩니다.</p><p>        #deny all; # 위 아이피 이외에 모든 IP를 차단합니다. 차단이 필요없다면 앞에 #을 놔두면 됩니다.</p><p>       </p><p>        location / {</p><p>            proxy_pass         <a href="http://code-server:8443/;" rel="nofollow">http://code-server:8443/;</a></p><p>            proxy_set_header Host $host;</p><p>            proxy_set_header Upgrade $http_upgrade;</p><p>            proxy_set_header Connection upgrade;</p><p>            proxy_set_header Accept-Encoding gzip;   </p><p>        }</p><p>}</p><p>[/code]</p><p><br /></p><p>위와 같이 넣으면 됩니다. 저장 후 </p><p><br /></p><p>[code=bash]</p><p>sudo docker-compose up -d --force-recreate --no-deps nginx</p><p>[/code]</p><p><br /></p><p>위와 같이 Nginx를 재시작해주고, 웹브라우저에 code.domain.com 으로 접속하면 끝입니다.</p><p><br /></p><p>정말 쉽죠?</p><p><br /></p><p><br /></p><p><span style="font-size:24pt;"><b>뒤에 포트를 붙여서 기존 도메인을 활용하여 접속하기</b></span></p><p><br /></p><p>이제 기존에 있던 인증서를 이용하고, 포트로 접속하는 방법에 대해 알려드리겠습니다.</p><p><br /></p><p>우선 자신이 원하는 포트의 방화벽을 오픈합니다. 클라우드서버를 쓴다면, 클라우드 관리자 설정에서도 방화벽을 열어줘야 합니다.</p><p><br /></p><p>예를들어 8082번이라고 하겠습니다.</p><p><br /></p><p>docker-compose.yml 파일을 열어서, Nginx 부분에 포트를 추가합니다.</p><p><br /></p><p>[code=docker]</p><p>    ports:</p><p>      - "80:80"</p><p>      - "443:443"</p><p>[/code]</p><p><br /></p><p>기존에 위와 같이 80과 443만 열려있는데 </p><p><br /></p><p>자신이 오픈한 방화벽 포트를 같이 넣어줍니다.</p><p><br /></p><p><b>8082</b>를 오픈했다면</p><p><br /></p><p>[code=docker]</p><p>    ports:</p><p>      - "80:80"</p><p>      - "443:443"</p><p>      - "8082:8082"</p><p>[/code]</p><p><br /></p><p>위와 같이 추가해주면 됩니다. 저장합니다.</p><p><br /></p><p><br /></p><p>이제 <b>Nginx</b>에 설정파일을 추가해줍니다.</p><p><br /></p><p>./nginx/conf.d/에 Nginx 설정파일을 추가합니다.</p><p><br /></p><p>code.conf 파일을 만들어서</p><p><br /></p><p>[code=nginx]</p><p>server {</p><p>        listen 8082 ssl http2;</p><p>        server_name domain.com;</p><p>        server_tokens off;</p><p><br /></p><p>        include /etc/nginx/conf.d/ssl-conf;</p><p>        include /etc/nginx/conf.d/options-ssl-nginx;</p><p><br /></p><p>        #IP 차단 부분입니다. 밑의 내용을 수정 후 앞에 #을 빼면 IP차단 설정이 적용됩니다.</p><p>        #allow 111.112.333.444; #자신의 집 컴퓨터의 외부IP를 확인 후 넣고 앞에 #을 제거하면 됩니다.</p><p>        #allow 123.123.123.123; #두번째 허용 IP</p><p>        #allow 124.124.124.124; #세번째 허용 IP # 이렇게 허용 IP를 추가해준 후 앞에 #을 제거하면 됩니다.</p><p>        #deny all; # 위 아이피 이외에 모든 IP를 차단합니다. 차단이 필요없다면 앞에 #을 놔두면 됩니다.</p><p>       </p><p>        location / {</p><p>            proxy_pass         <a href="http://code-server:8443/;" rel="nofollow">http://code-server:8443/;</a></p><p>            proxy_set_header Host $host;</p><p>            proxy_set_header Upgrade $http_upgrade;</p><p>            proxy_set_header Connection upgrade;</p><p>            proxy_set_header Accept-Encoding gzip;   </p><p>        }</p><p>}</p><p>[/code]</p><p><br /></p><p>위 내용에서 <b>8082</b>는 예시로 들었던 접속 포트입니다. 자신이 오픈한 포트를 넣어주면 됩니다.</p><p><br /></p><p>저장 후</p><p><br /></p><p>[code=bash]</p><p>sudo docker-compose up -d --force-recreate --no-deps nginx</p><p>[/code]</p><p><br /></p><p>위와 같이 Nginx를 재시작해주고, 웹브라우저에 domain.com:8082 와 같이 자신이 정한 포트번호를 붙여서 접속하면 됩니다.</p><p><br /></p><p><br /></p><p><b><span style="font-size:24pt;">초기 접속 방법</span></b></p><p><br /></p><p><img src="https://cdn.wsgvet.com/data/editor/2009/3096d914599d93da92ce044e1f1d6a17_1600360372_5179.png" title="3096d914599d93da92ce044e1f1d6a17_1600360372_5179.png" alt="3096d914599d93da92ce044e1f1d6a17_1600360372_5179.png" /> </p><p><br /></p><p>▲ 첫 접속화면입니다. 여기에 <b>.code.env</b> 파일에 넣었던 비번을 입력하면 바로 접속됩니다.</p><p><br /></p><p><br /></p><p><img src="https://cdn.wsgvet.com/data/editor/2009/3096d914599d93da92ce044e1f1d6a17_1600360467_4801.png" title="3096d914599d93da92ce044e1f1d6a17_1600360467_4801.png" alt="3096d914599d93da92ce044e1f1d6a17_1600360467_4801.png" /><br style="clear:both;" /> </p><p>▲ 이제 위 화면이 나올 것입니다.<br style="clear:both;" /><br />혹시 화면이 안나오면 F5나 컨트롤 + F5로 강력새로고침을 해주면 됩니다.</p><p><br /></p><p>왼쪽 위에 햄버거 모양을 클릭합니다.<br /><br /><br style="clear:both;" /><img src="https://cdn.wsgvet.com/data/editor/2009/3096d914599d93da92ce044e1f1d6a17_1600360372_5376.png" title="3096d914599d93da92ce044e1f1d6a17_1600360372_5376.png" alt="3096d914599d93da92ce044e1f1d6a17_1600360372_5376.png" /></p><p><br /></p><p>▲ File -&gt; Open Folder 를 클릭합니다.</p><p><br /></p><p><br style="clear:both;" /><img src="https://cdn.wsgvet.com/data/editor/2009/3096d914599d93da92ce044e1f1d6a17_1600360372_5587.png" title="3096d914599d93da92ce044e1f1d6a17_1600360372_5587.png" alt="3096d914599d93da92ce044e1f1d6a17_1600360372_5587.png" /><br style="clear:both;" /> </p><p>▲ 기본 위치가 /config/ 입니다.</p><p><br /></p><p>아까 docker-compose.yml 셋팅에서 ./site:/config/site 이 부분이 바로 여기입니다.</p><p><br /></p><p>code-server 컨테이너의 /config/site에 호스트에 있는 ./site 폴더를 마운트시키는 것입니다.</p><p><br /></p><p>호스트의 ./site에 그누보드, 라이믹스, 워드프레스 등이 있기 때문에 연결시켜준 것입니다.</p><p><br /></p><p>site를 클릭하면 자신이 셋팅한 CMS 파일 등이 있을 것입니다. 해당폴더를 클릭 후 마지막에 OK를 클릭하면 됩니다.</p><p><br /></p><p><br /></p><p style="text-align:center;" align="center">{이미지:0}</p><p><br /></p><p>최종적으로 위와 같이 나오면 성공입니다!</p>]]></description>
<dc:creator>우성짱</dc:creator>
<dc:date>2020-09-18T01:40:51+09:00</dc:date>
</item>


<item>
<title>도커 허브에서 매일 이미지 빌드하기</title>
<link>https://www.wsgvet.com/web/244</link>
<description><![CDATA[<div><p><br /></p><p style="text-align:center;"><img src="https://cdn.wsgvet.com/data/editor/2009//3232235777_yDxZlRdF_64abcd3a0e55ec0f86308130f4aa65ece8590ab2.png" style="width:900px;" alt="3232235777_yDxZlRdF_64abcd3a0e55ec0f86308130f4aa65ece8590ab2.png" /></p><p><br /></p><p>Dockerfile을 만들고 Github와 연동해서 도커허브에 이미지를 만들 수 있습니다.</p><p><br /></p><p style="text-align:center;"><img style="width:684px;" src="https://cdn.wsgvet.com/data/editor/2009//3232235777_QEwYrD04_eec0db732cc49784bf89c7a81c7fafa272e766ef.png" alt="3232235777_QEwYrD04_eec0db732cc49784bf89c7a81c7fafa272e766ef.png" /></p><p><br /></p><p><br /></p><p>하지만 위 스샷에 있듯이, 비공식 이미지 업데이트가 되었을 때만 다시 빌드합니다.</p><p><br /></p><p>즉, FROM:공식이미지 만 들어있는 Dockerfile은 영원히 업데이트가 되지 않습니다.</p><p><br /></p><p>따라서 도커허브에서는 수동으로 빌드하는 방법을 제시하는데요.</p><p><br /></p><p>서버를 운영한다면 간단하게 Crontab에 한줄넣어주면 됩니다.</p><p><br /></p><p>저는매일 1번씩 빌드하게 적용했습니다.</p><p><br /></p><p><br /></p><p style="text-align:center;" align="center"><img src="https://cdn.wsgvet.com/data/editor/2009/e591250acb8365994b4a5fce36245523_1599569422_058.png" title="e591250acb8365994b4a5fce36245523_1599569422_058.png" alt="e591250acb8365994b4a5fce36245523_1599569422_058.png" /></p><p><br /></p><p>위와 같이 매일 빌드하는 것을 볼 수 있습니다.</p><p><br /></p><p><br /></p><p>이제 도커허브에서 하는 방법을 알려드리겠습니다.</p><p><br /></p><p><br /></p><p><img src="https://cdn.wsgvet.com/data/editor/2009/e591250acb8365994b4a5fce36245523_1599569493_9897.png" title="e591250acb8365994b4a5fce36245523_1599569493_9897.png" alt="e591250acb8365994b4a5fce36245523_1599569493_9897.png" /><br style="clear:both;" /><br /></p><p>위와 같이 첫화면에서 Build로 들어갑니다.</p><p><br /></p><p><br /></p><p><br /></p><p><img src="https://cdn.wsgvet.com/data/editor/2009/e591250acb8365994b4a5fce36245523_1599569422_1168.png" title="e591250acb8365994b4a5fce36245523_1599569422_1168.png" alt="e591250acb8365994b4a5fce36245523_1599569422_1168.png" /></p><p><br /></p><p>그리고 Configure Automated Builds에 들어갑니다.</p><p><br /></p><p><br style="clear:both;" /></p><div style="text-align:center;" align="center"><img src="https://cdn.wsgvet.com/data/editor/2009/e591250acb8365994b4a5fce36245523_1599569422_1457.png" title="e591250acb8365994b4a5fce36245523_1599569422_1457.png" alt="e591250acb8365994b4a5fce36245523_1599569422_1457.png" /></div><p><br /></p><p>밑에 내려보면 Build triggers라고 있습니다. 여기에 적당한 이름을 넣고 + 를 누릅니다.</p><p><br /></p><p><br /></p><p><br style="clear:both;" /></p><div style="text-align:center;" align="center"><img src="https://cdn.wsgvet.com/data/editor/2009/e591250acb8365994b4a5fce36245523_1599569422_163.png" title="e591250acb8365994b4a5fce36245523_1599569422_163.png" alt="e591250acb8365994b4a5fce36245523_1599569422_163.png" /></div><p><br /></p><p>위와 같이 Trigger URL이 생긴 것을 확인할 수 있습니다.</p><p><br /></p><p>이 URL을 웹브라우저에 넣으면 바로 빌드를 시작합니다.</p><p><br /></p><p>그런데 수동으로 하기엔 좀 그렇죠?</p><p><br /></p><p><br /></p><p>웹서버의 crontab에 들어갑니다.</p><p><br /></p><p>우분투의 경우</p><p><br /></p><p>[code=bash]</p><p>sudo crontab -e</p><p>[/code]</p><p><br /></p><p>위와 같이 들어간 뒤</p><p><br /></p><p>[code=bash]</p><p>30 3 * * * /usr/bin/curl --output /dev/null --silent -H "Content-Type: application/json" --data '{"build": true}' -X POST "트리거URL"<br /></p><p>[/code]</p><p><br /></p><p>위와 같은 형식으로 넣어주면 됩니다.</p><p><br /></p><p>예를들어 트리거 URL이 https://hub.docker.com/api/build/v1/source/123412341234/trigger/12341234123412421/call/ 라면</p><p><br /></p><p>[code=bash]</p><p>30 3 * * * /usr/bin/curl --output /dev/null --silent -H "Content-Type: application/json" --data '{"build": true}' -X POST "https://hub.docker.com/api/build/v1/source/123412341234/trigger/12341234123412421/call/"<br /></p><p>[/code]</p><p><br style="clear:both;" />위와 같이 넣어주면 됩니다.</p><p><br /></p><p>그러면 매일 새벽 3시 30분에 빌드가 됩니다.</p><p><br /></p><p>감사합니다.</p></div>]]></description>
<dc:creator>우성짱</dc:creator>
<dc:date>2020-09-08T21:56:05+09:00</dc:date>
</item>


<item>
<title>Nginx proxy cache를 이용하여 이미지 캐시서버 구축하기 (Ubuntu, CentOS 8)</title>
<link>https://www.wsgvet.com/web/243</link>
<description><![CDATA[<p><img src="https://cdn.wsgvet.com/data/editor/2009//3232235777_l6INWzyY_7da2fac1b2ff831e80a1c410f0cc60032af84c56.png" style="width:1021.5px;" alt="3232235777_l6INWzyY_7da2fac1b2ff831e80a1c410f0cc60032af84c56.png" /></p><p><br /></p><p><br /></p><p><span style="font-size:36px;">1. Ubuntu 20.04 LTS</span></p><p><br /></p><p><a href="https://nginx.org/en/linux_packages.html" target="_blank" rel="nofollow noreferrer noopener">https://nginx.org/en/linux_packages.html</a></p><p><br /></p><p>위 링크에 있는 방식으로 Nginx를 설치하고 </p><p><br /></p><p>ufw나 iptables에 의한 80, 443 포트를 열어줍니다.</p><p><br /></p><p>SSL 인증서도 적절하게 설치해줍니다.</p><p><br /></p><p>[code=bash]</p><p>/etc/nginx/sites-available/default.conf</p><p>[/code]</p><p><br /></p><p>파일을 열어서</p><p><br /></p><p>[code=nginx]</p><p>proxy_cache_path /var/cache/nginx levels=1:2 keys_zone=static:100m max_size=10g inactive=30d;</p><p>proxy_cache_key "$scheme$request_method$host$request_uri";</p><p><br /></p><p>server {</p><p>        listen 443 ssl http2;</p><p>        listen [::]:443 ssl http2;</p><p>        server_name cdn.example.com; # 이미지 캐시서버 도메인</p><p>        server_tokens off;</p><p><br /></p><p>        location ~* \.(?:css|js|gif|png|jpg|jpeg|mp4|webm)$ {</p><p>                valid_referers none blocked example.com; # 본서버 외 불펌금지</p><p>                if ($invalid_referer) {</p><p>                    return   403;</p><p>                }</p><p>                proxy_pass https://example.com; # 본서버 도메인</p><p>                proxy_cache_valid 200 301 302 600m;</p><p>                proxy_cache static;</p><p>                proxy_cache_use_stale  error timeout updating http_500 http_502 http_503 http_504;</p><p>                proxy_cache_revalidate on;</p><p>                proxy_cache_lock       on;</p><p>                proxy_ignore_headers Set-Cookie;</p><p>                access_log off;</p><p>                add_header My-Cache-Status $upstream_cache_status;</p><p>                add_header my-ray  "KR";</p><p>                sendfile on;</p><p>                tcp_nopush on;</p><p>                tcp_nodelay on;</p><p>                keepalive_timeout 65;</p><p>                }</p><p><br /></p><p>        location / { </p><p>                return   403;</p><p>        }</p><p><br /></p><p>        ssl_certificate ssl/fullchain.pem; #자신의 인증서 경로로..</p><p>        ssl_certificate_key ssl/privkey.pem; #자신의 인증서 경로로..</p><p>        ssl_trusted_certificate ssl/chain.pem; #자신의 인증서 경로로..</p><p><br /></p><p>        ssl_stapling on;</p><p>        ssl_stapling_verify on;</p><p>        resolver 8.8.8.8 8.8.4.4 valid=300s;</p><p>        resolver_timeout 10s;</p><p>}</p><p>[/code]</p><p><br /></p><p>위와 같이 수정하고,</p><p><br /></p><p>[code=bash]</p><p>sudo service nginx restart</p><p>[/code]</p><p><br /></p><p>위 명령어로 재시작해줍니다.</p><p><br /></p><p>적용이 끝났습니다.</p><p><br /></p><p><br /></p><p>이제 본서버에 가서 css,js,gif,png,jpg,jpeg,mp4,webm파일의 URL을 캐시서버의 도메인으로 수정해주면 됩니다.</p><p><br /></p><p><span style="font-size:24px;">(1) 본서버가 Nginx라면</span></p><p><br /></p><p>[code=nginx]</p><p>sub_filter_once off;</p><p>    sub_filter 'https://mydomain.com/data/file/' 'https://cdn.mydomain.com/data/file/';</p><p>    sub_filter 'https://mydomain.com/data/editor/' 'https://cdn.mydomain.com/data/editor/';</p><p>[/code]</p><p><br /></p><p>위와 같이 정적파일이 있는 폴더를 대치시키면 편합니다.</p><p><br /></p><p>Nginx를 재시작하면 적용 끝입니다.</p><p><br /></p><p><br /></p><p><span style="font-size:24px;">(2) 본서버가 Apache라면</span></p><p><br /></p><p>[code=bash]</p><p>sudo a2enmod substitute</p><p>[/code]</p><p><br /></p><p>위 명령어로 substitute 모듈을 활성화한 후</p><p><br /></p><p>[code=bash]</p><p>&lt;Location "/"&gt;</p><p><span style="white-space:pre;">	</span>AddOutputFilterByType SUBSTITUTE text/html</p><p><span style="white-space:pre;">	</span>Substitute "s|https://mydomain.com/data/file/|https://cdn.mydomain.com/data/file/|i"</p><p><span style="white-space:pre;">	</span>Substitute "s|https://mydomain.com/data/editor/|https://cdn.mydomain.com/data/editor/|i"</p><p>&lt;/Location&gt;</p><p>[/code]</p><p><br /></p><p>위와 같이 정적파일이 있는 폴더를 대치시키면 편합니다.</p><p><br /></p><p>Apache를 재시작하면 적용 끝입니다.</p><p><br /></p><p><br /></p><p><span style="font-size:36px;">2. CentOS 8</span></p><p><br /></p><p><a href="https://nginx.org/en/linux_packages.html" target="_blank" rel="nofollow noreferrer noopener">https://nginx.org/en/linux_packages.html</a></p><p><br /></p><p>위 링크의 방식대로 Nginx를 설치합니다.</p><p><br /></p><p>SSL 인증서도 설치해줍니다.</p><p><br /></p><p>[code=bash]</p><p>sudo firewall-cmd --zone=public --permanent --add-service=http</p><p>[/code]</p><p><br /></p><p>[code=bash]</p><p>sudo firewall-cmd --zone=public --permanent --add-service=https</p><p>[/code]</p><p><br /></p><p>위와 같이 firewall 설정에서 80, 443 포트를 열어줍니다.</p><p><br /></p><p>iptables 규칙이 걸려있다면 따로 잡아주세요.</p><p><br /></p><p>[code=bash]</p><p>/etc/nginx/default.conf</p><p>[/code]</p><p><br /></p><p>위 파일을 열어서</p><p><br /></p><p>server { } 안의 내용을</p><p><br /></p><p>[code=nginx]</p><p>proxy_cache_path /var/cache/nginx levels=1:2 keys_zone=static:100m max_size=10g inactive=30d;</p><p>proxy_cache_key "$scheme$request_method$host$request_uri";</p><p><br /></p><p>server {</p><p>        listen 443 ssl http2;</p><p>        listen [::]:443 ssl http2;</p><p>        server_name cdn.example.com; # 이미지 캐시서버 도메인</p><p>        server_tokens off;</p><p><br /></p><p>        location ~* \.(?:css|js|gif|png|jpg|jpeg|mp4|webm)$ {</p><p>                valid_referers none blocked example.com; # 본서버 외 불펌금지</p><p>                if ($invalid_referer) {</p><p>                    return   403;</p><p>                }</p><p>                proxy_pass https://example.com; # 본서버 도메인</p><p>                proxy_cache_valid 200 301 302 600m;</p><p>                proxy_cache static;</p><p>                proxy_cache_use_stale  error timeout updating http_500 http_502 http_503 http_504;</p><p>                proxy_cache_revalidate on;</p><p>                proxy_cache_lock       on;</p><p>                proxy_ignore_headers Set-Cookie;</p><p>                access_log off;</p><p>                add_header My-Cache-Status $upstream_cache_status;</p><p>                add_header my-ray  "KR";</p><p>                sendfile on;</p><p>                tcp_nopush on;</p><p>                tcp_nodelay on;</p><p>                keepalive_timeout 65;</p><p>                }</p><p><br /></p><p>        location / { </p><p>                return   403;</p><p>        }</p><p><br /></p><p>        ssl_certificate ssl/fullchain.pem; #자신의 인증서 경로로..</p><p>        ssl_certificate_key ssl/privkey.pem; #자신의 인증서 경로로..</p><p>        ssl_trusted_certificate ssl/chain.pem; #자신의 인증서 경로로..</p><p><br /></p><p>        ssl_stapling on;</p><p>        ssl_stapling_verify on;</p><p>        resolver 8.8.8.8 8.8.4.4 valid=300s;</p><p>        resolver_timeout 10s;</p><p>}</p><p>[/code]</p><p><br /></p><p>위의 내용으로 바꿔줍니다.</p><p><br /></p><p>[code=bash]</p><p>sudo systemctl restart nginx</p><p>[/code]</p><p><br /></p><p>수정 후 위 명령어로 nginx를 재시작해줍니다.</p><p><br /></p><p>이미지 캐시서버 구축이 끝났습니다.</p><p><br /></p><p><br /></p><p>이제 본서버에 가서 css,js,gif,png,jpg,jpeg,mp4,webm파일의 URL을 캐시서버의 도메인으로 수정해주면 됩니다.</p><p><br /></p><p><span style="font-size:24px;">(1) 본서버가 Nginx라면</span></p><p><br /></p><p>[code=nginx]</p><p>sub_filter_once off;</p><p>    sub_filter 'https://mydomain.com/data/file/' 'https://cdn.mydomain.com/data/file/';</p><p>    sub_filter 'https://mydomain.com/data/editor/' 'https://cdn.mydomain.com/data/editor/';</p><p>[/code]</p><p><br /></p><p>위와 같이 정적파일이 있는 폴더를 대치시키면 편합니다.</p><p><br /></p><p>Nginx를 재시작하면 적용 끝입니다.</p><p><br /></p><p><br /></p><p><span style="font-size:24px;">(2) 본서버가 Apache라면</span></p><p><br /></p><p>[code=bash]</p><p>sudo a2enmod substitute</p><p>[/code]</p><p><br /></p><p>위 명령어로 substitute 모듈을 활성화한 후</p><p><br /></p><p>[code=bash]</p><p>&lt;Location "/"&gt;</p><p><span style="white-space:pre;">	</span>AddOutputFilterByType SUBSTITUTE text/html</p><p><span style="white-space:pre;">	</span>Substitute "s|https://mydomain.com/data/file/|https://cdn.mydomain.com/data/file/|i"</p><p><span style="white-space:pre;">	</span>Substitute "s|https://mydomain.com/data/editor/|https://cdn.mydomain.com/data/editor/|i"</p><p>&lt;/Location&gt;</p><p>[/code]</p><p><br /></p><p>위와 같이 정적파일이 있는 폴더를 대치시키면 편합니다.</p><p><br /></p><p>Apache를 재시작하면 적용 끝입니다.</p><p><br /></p><p><br /></p><p><br /></p><p><span style="font-size:24px;">Centos 8에 적용 후, 502 Bad Gateway가 떴을 때 </span></p><p><br /></p><p>캐시서버에 SSH로 접속 후</p><p><br /></p><p>[code=bash]</p><p>sudo getenforce</p><p>[/code]</p><p><br /></p><p>위 명령어를 내린 후 </p><p><br /></p><p>[code=bash]</p><p>Enforcing</p><p>[/code]</p><p><br /></p><p>위와 같이 나오면</p><p><br /></p><p>[code=bash]</p><p>sudo setsebool -P httpd_can_network_connect true</p><p>[/code]</p><p><br /></p><p>위 명령어로 Outbound를 풀어줍니다.</p><p><br /></p><p>[code=bash]</p><p>sudo systemctl restart nginx</p><p>[/code]</p><p><br /></p><p>위 명령어로 Nginx를 재시작해줍니다.</p><p><br /></p><p><br /></p><p><br /></p><p>참고 사이트</p><p><br /></p><p><a href="https://nginx.org/en/linux_packages.html" target="_blank" rel="nofollow noreferrer noopener">https://nginx.org/en/linux_packages.html</a></p><p><br /></p><p><a href="https://www.runit.cloud/2020/05/centos-8-nginx-1.18-install.html" target="_blank" rel="nofollow noreferrer noopener">https://www.runit.cloud/2020/05/centos-8-nginx-1.18-install.html</a></p><p><br /></p><p><a href="https://www.joinc.co.kr/w/man/12/proxy" target="_blank" rel="nofollow noreferrer noopener">https://www.joinc.co.kr/w/man/12/proxy</a></p><p><br /></p><p><a href="https://jojoldu.tistory.com/60" target="_blank" rel="nofollow noreferrer noopener">https://jojoldu.tistory.com/60</a></p><p><br /></p><p><a href="https://nginx.org/en/docs/http/ngx_http_proxy_module.html#proxy_cache_path" target="_blank" rel="nofollow noreferrer noopener">https://nginx.org/en/docs/http/ngx_http_proxy_module.html#proxy_cache_path</a><a href="https://nginx.org/en/docs/http/ngx_http_proxy_module.html#proxy_cache_path" target="_blank" rel="nofollow noreferrer noopener"></a></p><p><br /></p><p><a href="https://serverfault.com/questions/819423/reverse-proxy-nginx-bad-gateway" target="_blank" rel="nofollow noreferrer noopener">https://serverfault.com/questions/819423/reverse-proxy-nginx-bad-gateway</a><br /></p>]]></description>
<dc:creator>우성짱</dc:creator>
<dc:date>2020-09-08T13:23:50+09:00</dc:date>
</item>


<item>
<title>Outline Manager 삭제 후 복원하는 방법</title>
<link>https://www.wsgvet.com/web/242</link>
<description><![CDATA[<p><br /></p><p><br /></p><p><span style="font-size:24pt;">1. 들어가며</span></p><p><br /></p><p>오늘 컴퓨터를 포맷했는데, outline manager(아웃라인 매니저)를 복원하는 방법을 몰랐습니다.</p><p><br /></p><p>초기 설치 때 SSH상에 떴던 그 내용을 기록하지 않았기 때문입니다.</p><p><br /></p><p>기록해뒀다면 이런 고민은 없어도 되지만, 저처럼 안했다면 이 글을 보시면 도움이 될 것입니다.</p><p><br /></p><p><br /></p><p><span style="font-size:24pt;">2. 서버에서 설치 출력 내용 빼내기</span></p><p><br /></p><p>outline sever를 설치한 서버에 SSH로 접속합니다.</p><p><br /></p><p>[code]</p><p>sudo cat /opt/outline/access.txt</p><p>[/code]</p><p><br /></p><p>위 명령어로 내용을 출력합니다.</p><p><br /></p><blockquote class="se2_quote7" style="margin:0 0 30px 0;padding:10px;border:1px solid #66b246;color:#888888;"><p><span style="color:rgb(0,0,0);">certSha256:EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE</span></p><p><span style="color:rgb(0,0,0);">apiUrl:<a href="https://XXX.XXX.XXX.XXX/XXXXXXXXXXXXXXXX" rel="nofollow">https://XXX.XXX.XXX.XXX:XXXXX/XXXXXXXXXXXXXXXX</a></span></p></blockquote><p>위 내용을 outline manager에 들어갈 폼으로 바꿉니다.<br /></p><p><br /></p><p><br /></p><blockquote class="se2_quote7" style="margin:0 0 30px 0;padding:10px;border:1px solid #66b246;color:#888888;"><p><span style="color:rgb(0,0,0);">{"apiUrl":"<a href="https://XXX.XXX.XXX.XXX/XXXXXXXXXXXXXXXX" rel="nofollow">https://XXX.XXX.XXX.XXX:XXXXX/XXXXXXXXXXXXXXXX</a>","certSha256":"EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE"}</span></p></blockquote><p>위 내용을 복사 후 outline manager 프로그램을 실행 후, "+서버 추가"를 누른 후, <br /></p><p><br /></p><p>"어디서든 Outlone 설정" 의 설정을 누른 후, "여기에 설치 출력을 붙여넣으세요." 밑에 붙여넣기 합니다.</p><p><br /></p><p>그리고 완료를 누르면 서버 추가가 됩니다.</p><p><br /></p><p>참 쉽죠?</p><p><br /></p><p><br /></p><p><span style="font-size:24pt;">3. apiUrl이 안나올 경우</span></p><p><br /></p><p>만약에 </p><p><br /></p><p>[code]</p><p>sudo cat /opt/outline/access.txt</p><p>[/code]</p><p><br /></p><p>명령어를 내렸는데 "apiUrl:" 부분이 없이</p><p><br /></p><blockquote class="se2_quote7" style="margin:0 0 30px 0;padding:10px;border:1px solid #66b246;color:#888888;"><p><span style="color:rgb(0,0,0);">certSha256:EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE</span></p></blockquote><p>위와 같이 certSha256만 있을 경우<br /></p><p><br /></p><p>[code]</p><p>sudo cat /opt/outline/access.txt.bak</p><p>[/code]</p><p><br /></p><p>위와 같은 명령어를 내리면 둘다 나올 것입니다. 그것을 넣으면 됩니다.</p><p><br /></p><p><br /></p><p><span style="font-size:24pt;">4. 참조 링크</span></p><p><br /></p><p><a href="https://github.com/Jigsaw-Code/outline-server/issues/450" rel="nofollow">https://github.com/Jigsaw-Code/outline-server/issues/450</a></p>]]></description>
<dc:creator>우성군</dc:creator>
<dc:date>2020-07-19T01:03:00+09:00</dc:date>
</item>


<item>
<title>Caddy 웹서버 설치 및 그누보드 설정하기</title>
<link>https://www.wsgvet.com/web/237</link>
<description><![CDATA[<p><span style="font-size:24pt;">1. 들어가며</span></p><p><br /></p><p>Caddy는 기존의 웹서버보다 더 쉽고 간단하게 설치 및 유지 보수를 할 수 있습니다.</p><p><br /></p><p>SSL 인증서 자동발급 및 갱신하는 것이 큰 장점이라고 생각합니다.</p><p><br /></p><p>그리고 apache나 nginx와 설정 문법이 다르기 때문에 이에 대한 공부를 해야되는 것이 필수겠죠.</p><p><br /></p><p>열심히 개발 중이고, 1에서 2로 업그레이드 되면서 문법이 완전히 바뀌었더라구요. ㅎㅎ</p><p><br /></p><p>최근에 2.1 버전으로 업그레이드되어 설치 후 그누보드까지 깔아보는 글을 적어보겠습니다.</p><p><br /></p><p><br /></p><p><span style="font-size:24pt;">2. 패키지 설치하기</span></p><p><br /></p><p>우분투 20.04 기준 설치하는 방법입니다.</p><p><br /></p><blockquote class="se2_quote7" style="margin:0 0 30px 0;padding:10px;border:1px solid #66b246;color:#888888;"><p><span style="color:rgb(0,0,0);">echo "deb [trusted=yes] <a href="https://apt.fury.io/caddy/" rel="nofollow">https://apt.fury.io/caddy/</a> /" | sudo tee -a /etc/apt/sources.list.d/caddy-fury.list</span></p><p><span style="color:rgb(0,0,0);">sudo apt update</span></p><p><span style="color:rgb(0,0,0);">sudo apt install caddy</span></p></blockquote><p>이렇게 하면 설치가 끝납니다.<br /></p><p><br /></p><p>기타 다운로드 방법은</p><p><br /></p><p><a href="https://caddyserver.com/docs/download" rel="nofollow">https://caddyserver.com/docs/download</a></p><p><br /></p><p>위 링크를 참조하세요.</p><p><br /></p><p><br /></p><p><span style="font-size:24pt;">3. 실행 방법</span></p><p><br /></p><p>설치한 순간 이미 실행이 되고 있습니다.</p><p><br /></p><p><a href="http://example.com" rel="nofollow">http://example.com</a></p><p><br /></p><p>위 주소와 같이  http로 연결된 자신의 도메인이나 ip로 접속하면 바로 초기화면이 뜹니다.</p><p><br /></p><p><br /></p><p>캐디 시작</p><p><br /></p><p>[code]</p><p>sudo caddy start</p><p>[/code]</p><p><br /></p><p>캐디 정지</p><p><br /></p><p>[code]</p><p>sudo caddy stop</p><p>[/code]</p><p><br /></p><p>캐디 재기동</p><p><br /></p><p>[code]</p><p>sudo caddy reload</p><p>[/code]</p><p><br /></p><p>캐디 상태 확인</p><p><br /></p><p>[code]</p><p>sudo systemctl status caddy</p><p>[/code]</p><p><br /></p><p>캐디 로그 확인</p><p><br /></p><p>[code]</p><p>sudo journalctl --no-pager -u caddy</p><p>[/code]</p><p><br /></p><p>설정파일을 수정 후 stop 할 필요없이 그냥 caddy reload만 해주면 바로 적용됩니다.</p><p><br /></p><p><br /></p><p><br /></p><p><span style="font-size:24pt;">4. 설정파일 수정하기</span></p><p><br /></p><p>기본적인 설정파일은 /etc/caddy/Caddyfile 입니다.</p><p><br /></p><p>[code]</p><p>sudo nano /etc/caddy/Caddyfile</p><p>[/code]</p><p><br /></p><p>위 명령어로 바로 설정파일에 들어갈 수 있습니다.</p><p><br /></p><blockquote class="se2_quote7" style="margin:0 0 30px 0;padding:10px;border:1px solid #66b246;color:#888888;"><p>:80</p><p>root * /usr/share/caddy</p><p>file_server</p></blockquote><p>기본적으로 위 3가지가 적용되어 있는데요.<br /></p><p><br /></p><p>80포트로 받고, 사이트의 폴더 경로를 /usr/share/caddy 로 잡았고, 정적파일서버를 활성화시킨다는 의미입니다.</p><p><br /></p><p>그누보드를 예를들어보겠습니다.</p><p><br /></p><p>파일위치 /var/www/gnuboard</p><p>로그파일 위치 /var/log/caddy/caddy.log</p><p>로 잡겠습니다.</p><p><br /></p><p>mysql이나 php7.4 설치는 미리해야겠죠? ^^;;</p><p><br /></p><p>혹시나 안하셨다면</p><p><br /></p><p><span style="font-size:14pt;">(1) MariaDB 설치하기</span></p><p><br /></p><p><a href="https://blog.wsgvet.com/letsencrypt-wildcard-certification-issue-and-mariadb-install/" rel="nofollow">https://blog.wsgvet.com/letsencrypt-wildcard-certification-issue-and-mariadb-install/</a></p><p><br /></p><p>위 링크의 2번을 참조하세요.</p><p><br /></p><p><span style="font-size:14pt;">(2) php7.4 설치, 그누보드 설치, DB설정하기</span></p><p><br /></p><p>참고로 caddy 설치시 /var/www 폴더는 없기 때문에 생성해두는게 좋습니다.</p><p><br /></p><p>[code]</p><p>sudo mkdir /var/www</p><p>[/code]</p><p><br /></p><p>위 명령어로 www 폴더 생성 가능합니다.</p><p><br /></p><p><a href="https://blog.wsgvet.com/php7-4-install-and-gnuboard-5-4-install/" rel="nofollow">https://blog.wsgvet.com/php7-4-install-and-gnuboard-5-4-install/</a></p><p><br /></p><p>위 링크의 1,2,3번을 참조하세요.</p><p><br /></p><p>그리고 caddy는 특이하게 caddy라는 유저를 쓰고 있기 때문에 data 폴더를 707로 두면 읽지를 못합니다. 그래서 777로 주면 썸네일 문제는 해결됩니다.</p><p><br /></p><p>[code]</p><p>chmod 777 /var/www/gnuboard/data</p><p>[/code]</p><p><br /></p><p>위 명령어로 data폴더 권한을 777로 주면 됩니다.</p><p><br /></p><p><br /></p><p><br /></p><p>이제 </p><p><br /></p><p>[code]</p><p>sudo nano /etc/caddy/Caddyfile</p><p>[/code]</p><p><br /></p><p>위와 같이 설정파일을 열고, 컨트롤 + k를 누르고 있으면 다지워집니다.</p><p><br /></p><p>[code=php]</p><p># www를 non-www로 리다이렉트, 반드시 자신의 주소로 변경하기</p><p><br /></p><p><a href="http://www.example.com" rel="nofollow">www.example.com</a> {</p><p>redir <a>https://example.com{uri}</a></p><p>}</p><p><br /></p><p># 도메인 네임 지정하기 및 해당 도메인 설정 시작, 반드시 자신의 주소로 변경하기</p><p><br /></p><p>example.com {</p><p><br /></p><p># 인코딩 방법 지정, brotli 압축은 지원하지 않습니다.</p><p><br /></p><p>encode zstd gzip</p><p><br /></p><p># 사이트 디렉토리 설정 : 자신의 설정으로 변경하세요.</p><p><br /></p><p>root * /var/www/gnuboard</p><p><br /></p><p># 정적파일 이용가능하게하는 설정</p><p><br /></p><p>file_server</p><p><br /></p><p># php7.4-fpm 연결</p><p><br /></p><p>php_fastcgi unix//run/php/php7.4-fpm.sock</p><p><br /></p><p># 로그 설정 DEBUG나 INFO를 선택해서 쓰시면 됩니다.</p><p><br /></p><p>log {</p><p>output file /var/log/caddy/caddy.log {</p><p>roll_size 2MiB</p><p>}</p><p>format json</p><p>level DEBUG</p><p>}</p><p><br /></p><p># 보안 헤더 넣기</p><p><br /></p><p>header {</p><p>Strict-Transport-Security "max-age=31536000; includeSubDomains; preload"</p><p>X-XSS-Protection "1; mode=block"</p><p>X-Frame-Options SAMEORIGIN</p><p>X-Content-Type-Options nosniff</p><p>}</p><p><br /></p><p># 캐시 컨트롤 지정(해당 확장자에 5184000 캐시 컨트롤 지정)</p><p><br /></p><p>@static {</p><p>file</p><p>path *.ico *.css *.js *.gif *.jpg *.jpeg *.png *.svg *.woff *.woff2</p><p>}</p><p>header @static Cache-Control max-age=5184000</p><p><br /></p><p># 이미지 불펌 방지 - 반드시 자신의 도메인으로 바꾸세요.</p><p># 해당 경로는 자신의 원하는대로 수정 가능합니다.</p><p><br /></p><p>@fontPirate {</p><p>path /data/*</p><p>not header Referer <a>https://example.com*</a></p><p>}</p><p>respond @fontPirate "Access denied" 403 {</p><p>close</p><p>}</p><p><br /></p><p># 그누보드 전용 짧은 주소 리라이트</p><p><br /></p><p>@content path_regexp content ^/content/([0-9a-zA-Z_]+)$</p><p>rewrite @content /bbs/content.php?co_id={re.content.1}&amp;{query}</p><p>@title path_regexp title ^/content/([^/]+)/$</p><p>rewrite @title /bbs/content.php?co_seo_title={re.title.1}&amp;{query}</p><p>@rss path_regexp rss ^rss/([0-9a-zA-Z_]+)$</p><p>rewrite @rss /bbs/rss.php?bo_table={re.rss.1}</p><p>@board path_regexp board ^/([0-9a-zA-Z_]+)$</p><p>rewrite @board /bbs/board.php?bo_table={re.board.1}&amp;{query}</p><p>@write path_regexp write ^/([0-9a-zA-Z_]+)/write$</p><p>rewrite @write /bbs/write.php?bo_table={re.write.1}&amp;{query}</p><p>@seo path_regexp seo ^/([0-9a-zA-Z_]+)/([^/]+)/$</p><p>rewrite @seo /bbs/board.php?bo_table={re.seo.1}&amp;wr_seo_title={re.seo.2}&amp;{query}</p><p>@id path_regexp id ^/([0-9a-zA-Z_]+)/([0-9]+)$</p><p>rewrite @id /bbs/board.php?bo_table={re.id.1}&amp;wr_id={re.id.2}&amp;{query}</p><p><br /></p><p># example.com 설정 마지막</p><p>}</p><p>[/code]</p><p><br /></p><p>위 내용에서 <b><span style="color:rgb(255,0,0);">example.com</span></b> 을 자신의 도메인주소로 바꾼 후 전부 붙여넣기 합니다.</p><p><br /></p><p>그리고 컨트롤 + O, 엔터, 컨트롤 + X로 저장 후 빠져나옵니다.</p><p><br /></p><p>로그 파일이 들어갈 폴더를 생성하고 권한을 caddy에게 줍니다.</p><p><br /></p><p>[code]</p><p>mkdir /var/log/caddy</p><p>chown caddy /var/log/caddy<br /></p><p>[/code]</p><p><br /></p><p><br /></p><p>이제 설정파일 있는 곳에서 caddy를 재기동합니다.</p><p><br /></p><p>[code]</p><p>cd /etc/caddy</p><p>sudo caddy reload<br /></p><p>[/code]</p><p><br /></p><p>또는 다른 경로에서 재기동을 하고 싶다면</p><p><br /></p><p>[code]</p><p>sudo caddy reload --config /etc/caddy/Caddyfile</p><p>[/code]</p><p><br /></p><p>위와 같이 설정파일을 지정해주면서 실행해도 됩니다.</p><p><br /></p><p><br /></p><p>위 명령어로 재기동을 하면 알아서 SSL 인증서 적용해줍니다.</p><p><br /></p><p>이제 본인의 주소로 들어가면 그누보드 설정화면으로 들어가질 것입니다.</p><p><br /></p><p><br /></p><p><span style="font-size:24pt;">5. 워드프레스용 설정파일</span></p><p><br /></p><p><a href="https://caddy.community/t/example-configure-wordpress-with-a-static-cache/8215" rel="nofollow">https://caddy.community/t/example-configure-wordpress-with-a-static-cache/8215</a></p><p><br /></p><p>위 링크는 워드프레스 캐시 플러그인용 설정 방법입니다.</p><p><br /></p><p>개인적으로 워드프레스용으로는 적합하지 않다고 보지만... 테스트용으로는 써볼만 한 것 같습니다.</p><p><br /></p><p><br /></p><p><span style="font-size:24pt;">6. 참조사이트</span></p><p><br /></p><p><a href="https://caddyserver.com/" rel="nofollow">https://caddyserver.com/</a> </p><p><br /></p><p><a href="https://caddy.community/" rel="nofollow">https://caddy.community/</a> </p><p><br /></p><p><a href="https://caddyserver.com/docs/" rel="nofollow">https://caddyserver.com/docs/</a> </p>]]></description>
<dc:creator>우성군</dc:creator>
<dc:date>2020-07-11T19:02:19+09:00</dc:date>
</item>


<item>
<title>AlphaSSL 와일드카드 인증서 설치와 OCSP 설정 (Nginx용)</title>
<link>https://www.wsgvet.com/web/197</link>
<description><![CDATA[<p style="text-align:center;">{이미지:1}</p><br />
<blockquote style="text-align:center;border:1px solid rgb(195,232,158);background-color:#d6ffad;padding:5px 10px;"><span style="font-size:18px;">1. 와일드카드 인증서와 Letsencrypt 인증서와의 비교</span></blockquote>
<p><br /></p>
<p>현재 제 홈페이지에는 AlphaSSL의 와일드카드 인증서가 설치되어 있습니다.</p>
<p><br /></p>
<p>와일드카드 인증서는 *.wsgvet.com의 형태로 모든 서브도메인에 대하여 HTTPS 인증이 가능합니다.</p>
<p><br /></p>
<p>그래서 서브도메인을 추가로 만들어도 언제든지 인증이 쉽게 된다는 장점이 있습니다.</p>
<p><br /></p>
<p>Letsencrypt와의 차이점을 살펴보면</p>
<p><br /></p>
<p>Letsencrypt의 경우 멀티도메인, 멀티서브도메인이 지원됩니다. (Letsencrypt 설치하기 : <a href="https://www.wsgvet.com/web/179" target="_blank" rel="nofollow noreferrer noopener">https://www.wsgvet.com/web/179</a> )</p>
<p><br /></p>
<p>이 말은 1개의 인증서에 여러개의 도메인, 그리고 여러개의 서브도메인이 동시에 인증되는 것입니다.</p>
<p><br /></p>
<p>예를 들어, test.com, 1.test.com, 2.test.com, 1.abc.com, abc.com 과 같이 도메인이 달라도, 그리고 여러 서브도메인이 있어도 됩니다.</p>
<p><br /></p>
<p>다만 와일드카드 인증서가 아니기 때문에 서브도메인을 추가하고 싶다면 인증서를 새로 발급받아야 합니다.</p>
<p><br /></p>
<p><br /></p>
<p>AlphaSSL 와일드카드 인증서의 경우 무한 서브도메인이 지원됩니다.</p>
<p><br /></p>
<p>간단하게 wsgvet.com이라는 도메인이 있다고 보면, *.wsgvet.com가 모두 된다고 보면 됩니다.</p>
<p><br /></p>
<p>1.wsgvet.com, 2.wsgvet.com 등등...</p>
<p><br /></p>
<p>그래서 서브도메인을 새로 만들어도 언제든지 적용이 가능한 장점이 있습니다.</p>
<p><br /></p>
<p>단점이라고 하면 멀티도메인은 지원되지 않기 때문에 1개의 도메인만 인증이 가능하다는 것입니다.</p>
<p><br /></p>
<p><br /></p>
<p> </p>
<blockquote style="text-align:center;border:1px solid rgb(195,232,158);background-color:#d6ffad;padding:5px 10px;"><span style="font-size:18px;">2. 인증서 발급받기​</span></blockquote>
<p><br /></p>
<p>우선 인증서를 발급 받으려면 key파일 및 csr 파일을 생성해야 합니다. </p>
<p>(참조링크 : <a href="https://www.wsgvet.com/web/21" target="_blank" rel="nofollow noreferrer noopener">https://www.wsgvet.com/web/21</a>)</p>
<p><br /></p>
<p> </p>
<blockquote style="border:1px solid rgb(232,200,183);background-color:#ffdcc9;padding:5px 10px;">openssl req -nodes -newkey rsa:4096 -keyout privkey.pem -out request.csr</blockquote>
<p><br /></p>
<p>위 명령어를 Putty에 넣으면 key 파일을 생성한 후 csr파일 생성을 위한 정보를 물어봅니다.</p>
<p><br /></p>
<p>rsa:4096 대신 rsa:2048을 넣어도 됩니다. 다만 4096이 보안에 더 좋습니다.</p>
<p><br /></p>
<p><br /></p>
<p>나머지 부분은 적당히 넣으면 되는데 제일 중요한 부분이 Common Name 입니다.</p>
<p><br /></p>
<p>Common Name (e.g. server FQDN or YOUR name) []: 이렇게 나와있는 부분인데요.</p>
<p><br /></p>
<p>와일드카드 인증서이기 때문에 *.domain.com 이라고 적어야 합니다.</p>
<p><br /></p>
<p>그러면 domain.com + *.domain.com이 모두 적용된다고 보면 됩니다.</p>
<p><br /></p>
<p>이제 CSR파일이 생성되었을텐데요.</p>
<p><br /></p>
<p>해당 파일을 열어보면 </p>
<p><br /></p>
<p> </p>
<blockquote style="border:1px solid rgb(211,188,235);background-color:#e6ccff;padding:5px 10px;">
<p>-----BEGIN CERTIFICATE REQUEST-----</p>
<p>MIIEyzCCArMCAQAwgYUxCzAJBgNVBAYTAktSMQ4wDAYDVQQIDAVEQUVHVTEPMA0G</p>
<p>...............................................................</p>
<p>n7cqjalGp/T0R+rKQ7YkGmlykuOqNqhhBnyw30k2tg==</p>
<p>-----END CERTIFICATE REQUEST-----</p></blockquote>
<p> </p>
<p><br /></p>
<p>위와 같은 형식으로 나와있을 것입니다.</p>
<p><br /></p>
<p>이 내용을 인증서 발급업체에 넘기거나, 패널에 입력하면 됩니다.</p>
<p><br /></p>
<p><br /></p>
<p>그리고 인증서가 메일로 오는데, 해당 도메인에 대한 email이 있어야 됩니다. (참조링크 : <a href="https://www.wsgvet.com/home/495" target="_blank" rel="nofollow noreferrer noopener">https://www.wsgvet.com/home/495</a>)</p>
<p><br /></p>
<p> </p>
<blockquote style="border:1px solid rgb(174,232,232);background-color:#bfffff;padding:5px 10px;">
<p>admin@domain.com</p>
<p>administrator@domain.com</p>
<p>hostmaster@domain.com</p>
<p>postmaster@domain.com</p>
<p>webmaster@domain.com</p></blockquote>
<p> </p>
<p><br /></p>
<p>대략 위 5가지 형태 중의 하나는 가지고 있어야 제대로 인증서를 받을 수 있습니다.</p>
<p><br /></p>
<p>제대로 인증서가 생성이 되고, 도메인 메일로 요청이 들어갔다면</p>
<p><br /></p>
<p>대략 5~10분 정도 기다리면 해당 메일로 밑과 같은 내용의 메일이 들어올 것입니다.</p>
<p><br /></p>
<p> </p>
<blockquote style="border:1px solid rgb(174,232,232);background-color:#bfffff;padding:5px 10px;">
<p>An application for a SSL Certificate has been placed with AlphaSSL for *.domain.com and Order ID CEDX0000000. </p>
<p><br /></p>
<p>In order for AlphaSSL to issue the SSL Certificate, the domain owner or administrator must approve the order.  Please follow the below link to choose to APPROVE or NOT APPROVE the application.</p>
<p><br /></p>
<p>Only if you approve the application will the SSL Certificate be issued. </p>
<p><br /></p>
<p>https://regist.alphassl.com/ra/dvApproval/dvApproval/DvApproval.do?r=xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx </p>
<p><br /></p>
<p>Make sure your browser address bar contains the complete unbroken URL. </p>
<p><br /></p>
<p>For your information, the Applicant has provided the following details: </p>
<p><br /></p>
<p>Domain Name: *.domain.com </p>
<p>Applicant Email Address: admin@domain.com</p>
<p><br /></p>
<p>If you have any questions about this application, please contact us using the details below. </p>
<p><br /></p>
<p><br /></p>
<p>Kind Regards, </p>
<p><br /></p>
<p>AlphaSSL Support Team </p></blockquote>
<p> </p>
<p><br /></p>
<p>그러면 가운데에 있는 링크를 클릭하여 승인버튼을 누릅니다.</p>
<p><br /></p>
<p>그리고 5~10분 정도 기다리면 드디어 인증서가 들어있는 메일이 옵니다.</p>
<p><br /></p>
<p>해당 메일의 제일 밑을 보면</p>
<p><br /></p>
<p><br /></p>
<p> </p>
<blockquote style="border:1px solid rgb(211,188,235);background-color:#e6ccff;padding:5px 10px;">
<p>-----BEGIN CERTIFICATE-----</p>
<p>MIIIQjCCByqgAwIBAgIMKTRATFJJHhZAcgA+MA0GCSqGSIb3DQEBCwUAMEwxCzAJ</p>
<p>................................................................</p>
<p>8HQQiUkf</p>
<p>-----END CERTIFICATE-----</p></blockquote>
<p> </p>
<p><br /></p>
<p>위와 같은 내용이 있는데 이게 바로 인증서 내용물이라고 보시면 됩니다.</p>
<p><br /></p>
<p>해당 내용을 복사해서 </p>
<p><br /></p>
<p>domainssl.pem 이라고 파일을 저장합니다.</p>
<p><br /></p>
<p><br /></p>
<p> </p>
<blockquote style="text-align:center;border:1px solid rgb(195,232,158);background-color:#d6ffad;padding:5px 10px;"><span style="font-size:18px;">3. Nginx에 쓸 수 있게 가공하기​</span></blockquote>
<p><br /></p>
<p>이제 중간 인증서 내용을 추가해줘야 합니다.</p>
<p><br /></p>
<p><a href="https://www.alphassl.com/support/install-root-certificate.html" target="_blank" rel="nofollow noreferrer noopener"><br /></a></p>
<p><a href="https://www.alphassl.com/support/install-root-certificate.html" target="_blank" rel="nofollow noreferrer noopener">https://www.alphassl.com/support/install-root-certificate.html</a></p>
<p><br /></p>
<p>위 링크에 들어가보면</p>
<p><br /></p>
<p><br /></p>
<p> </p>
<blockquote style="border:1px solid rgb(174,232,232);background-color:#bfffff;padding:5px 10px;">
<p>SHA-256 - Orders March 31, 2014 and After</p>
<p><br /></p>
<p>AlphaSSL SHA-256 R1 Intermediate Certificates</p>
<p>AlphaSSL CA - SHA256 - G2</p>
<p>SHA256 - RSA - 2048</p>
<p>Valid until: 20 February 2024</p></blockquote>
<p> </p>
<p><br /></p>
<p>위와 같은 제목이 있는 인증서 내용을 붙이면 됩니다.</p>
<p><br /></p>
<p>지금 AlphaSSL의 중간인증서 내용은</p>
<p><br /></p>
<p> </p>
<blockquote style="border:1px solid rgb(211,188,235);background-color:#e6ccff;padding:5px 10px;">
<p>-----BEGIN CERTIFICATE-----</p>
<p>MIIETTCCAzWgAwIBAgILBAAAAAABRE7wNjEwDQYJKoZIhvcNAQELBQAwVzELMAkG</p>
<p>A1UEBhMCQkUxGTAXBgNVBAoTEEdsb2JhbFNpZ24gbnYtc2ExEDAOBgNVBAsTB1Jv</p>
<p>b3QgQ0ExGzAZBgNVBAMTEkdsb2JhbFNpZ24gUm9vdCBDQTAeFw0xNDAyMjAxMDAw</p>
<p>MDBaFw0yNDAyMjAxMDAwMDBaMEwxCzAJBgNVBAYTAkJFMRkwFwYDVQQKExBHbG9i</p>
<p>YWxTaWduIG52LXNhMSIwIAYDVQQDExlBbHBoYVNTTCBDQSAtIFNIQTI1NiAtIEcy</p>
<p>MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA2gHs5OxzYPt+j2q3xhfj</p>
<p>kmQy1KwA2aIPue3ua4qGypJn2XTXXUcCPI9A1p5tFM3D2ik5pw8FCmiiZhoexLKL</p>
<p>dljlq10dj0CzOYvvHoN9ItDjqQAu7FPPYhmFRChMwCfLew7sEGQAEKQFzKByvkFs</p>
<p>MVtI5LHsuSPrVU3QfWJKpbSlpFmFxSWRpv6mCZ8GEG2PgQxkQF5zAJrgLmWYVBAA</p>
<p>cJjI4e00X9icxw3A1iNZRfz+VXqG7pRgIvGu0eZVRvaZxRsIdF+ssGSEj4k4HKGn</p>
<p>kCFPAm694GFn1PhChw8K98kEbSqpL+9Cpd/do1PbmB6B+Zpye1reTz5/olig4het</p>
<p>ZwIDAQABo4IBIzCCAR8wDgYDVR0PAQH/BAQDAgEGMBIGA1UdEwEB/wQIMAYBAf8C</p>
<p>AQAwHQYDVR0OBBYEFPXN1TwIUPlqTzq3l9pWg+Zp0mj3MEUGA1UdIAQ+MDwwOgYE</p>
<p>VR0gADAyMDAGCCsGAQUFBwIBFiRodHRwczovL3d3dy5hbHBoYXNzbC5jb20vcmVw</p>
<p>b3NpdG9yeS8wMwYDVR0fBCwwKjAooCagJIYiaHR0cDovL2NybC5nbG9iYWxzaWdu</p>
<p>Lm5ldC9yb290LmNybDA9BggrBgEFBQcBAQQxMC8wLQYIKwYBBQUHMAGGIWh0dHA6</p>
<p>Ly9vY3NwLmdsb2JhbHNpZ24uY29tL3Jvb3RyMTAfBgNVHSMEGDAWgBRge2YaRQ2X</p>
<p>yolQL30EzTSo//z9SzANBgkqhkiG9w0BAQsFAAOCAQEAYEBoFkfnFo3bXKFWKsv0</p>
<p>XJuwHqJL9csCP/gLofKnQtS3TOvjZoDzJUN4LhsXVgdSGMvRqOzm+3M+pGKMgLTS</p>
<p>xRJzo9P6Aji+Yz2EuJnB8br3n8NA0VgYU8Fi3a8YQn80TsVD1XGwMADH45CuP1eG</p>
<p>l87qDBKOInDjZqdUfy4oy9RU0LMeYmcI+Sfhy+NmuCQbiWqJRGXy2UzSWByMTsCV</p>
<p>odTvZy84IOgu/5ZR8LrYPZJwR2UcnnNytGAMXOLRc3bgr07i5TelRS+KIz6HxzDm</p>
<p>MTh89N1SyvNTBCVXVmaU6Avu5gMUTu79bZRknl7OedSyps9AsUSoPocZXun4IRZZ</p>
<p>Uw== </p>
<p>-----END CERTIFICATE-----</p></blockquote>
<p> </p>
<p><br /></p>
<p>위와 같습니다.</p>
<p><br /></p>
<p>이제 아까 저장한 domainssl.pem 파일을 열어서 바로 밑에 넣어줍니다.</p>
<p><br /></p>
<p>그러면 domainssl.pem 내용은</p>
<p><br /></p>
<p> </p>
<blockquote style="border:1px solid rgb(211,188,235);background-color:#e6ccff;padding:5px 10px;">
<p>-----BEGIN CERTIFICATE-----</p>
<p>MIIIQjCCByqgAwIBAgIMKTRATFJJHhZAcgA+MA0GCSqGSIb3DQEBCwUAMEwxCzAJ</p>
<p>................................................................</p>
<p>8HQQiUkf</p>
<p>-----END CERTIFICATE-----</p>
<p>-----BEGIN CERTIFICATE-----</p>
<p>MIIETTCCAzWgAwIBAgILBAAAAAABRE7wNjEwDQYJKoZIhvcNAQELBQAwVzELMAkG</p>
<p>A1UEBhMCQkUxGTAXBgNVBAoTEEdsb2JhbFNpZ24gbnYtc2ExEDAOBgNVBAsTB1Jv</p>
<p>b3QgQ0ExGzAZBgNVBAMTEkdsb2JhbFNpZ24gUm9vdCBDQTAeFw0xNDAyMjAxMDAw</p>
<p>MDBaFw0yNDAyMjAxMDAwMDBaMEwxCzAJBgNVBAYTAkJFMRkwFwYDVQQKExBHbG9i</p>
<p>YWxTaWduIG52LXNhMSIwIAYDVQQDExlBbHBoYVNTTCBDQSAtIFNIQTI1NiAtIEcy</p>
<p>MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA2gHs5OxzYPt+j2q3xhfj</p>
<p>kmQy1KwA2aIPue3ua4qGypJn2XTXXUcCPI9A1p5tFM3D2ik5pw8FCmiiZhoexLKL</p>
<p>dljlq10dj0CzOYvvHoN9ItDjqQAu7FPPYhmFRChMwCfLew7sEGQAEKQFzKByvkFs</p>
<p>MVtI5LHsuSPrVU3QfWJKpbSlpFmFxSWRpv6mCZ8GEG2PgQxkQF5zAJrgLmWYVBAA</p>
<p>cJjI4e00X9icxw3A1iNZRfz+VXqG7pRgIvGu0eZVRvaZxRsIdF+ssGSEj4k4HKGn</p>
<p>kCFPAm694GFn1PhChw8K98kEbSqpL+9Cpd/do1PbmB6B+Zpye1reTz5/olig4het</p>
<p>ZwIDAQABo4IBIzCCAR8wDgYDVR0PAQH/BAQDAgEGMBIGA1UdEwEB/wQIMAYBAf8C</p>
<p>AQAwHQYDVR0OBBYEFPXN1TwIUPlqTzq3l9pWg+Zp0mj3MEUGA1UdIAQ+MDwwOgYE</p>
<p>VR0gADAyMDAGCCsGAQUFBwIBFiRodHRwczovL3d3dy5hbHBoYXNzbC5jb20vcmVw</p>
<p>b3NpdG9yeS8wMwYDVR0fBCwwKjAooCagJIYiaHR0cDovL2NybC5nbG9iYWxzaWdu</p>
<p>Lm5ldC9yb290LmNybDA9BggrBgEFBQcBAQQxMC8wLQYIKwYBBQUHMAGGIWh0dHA6</p>
<p>Ly9vY3NwLmdsb2JhbHNpZ24uY29tL3Jvb3RyMTAfBgNVHSMEGDAWgBRge2YaRQ2X</p>
<p>yolQL30EzTSo//z9SzANBgkqhkiG9w0BAQsFAAOCAQEAYEBoFkfnFo3bXKFWKsv0</p>
<p>XJuwHqJL9csCP/gLofKnQtS3TOvjZoDzJUN4LhsXVgdSGMvRqOzm+3M+pGKMgLTS</p>
<p>xRJzo9P6Aji+Yz2EuJnB8br3n8NA0VgYU8Fi3a8YQn80TsVD1XGwMADH45CuP1eG</p>
<p>l87qDBKOInDjZqdUfy4oy9RU0LMeYmcI+Sfhy+NmuCQbiWqJRGXy2UzSWByMTsCV</p>
<p>odTvZy84IOgu/5ZR8LrYPZJwR2UcnnNytGAMXOLRc3bgr07i5TelRS+KIz6HxzDm</p>
<p>MTh89N1SyvNTBCVXVmaU6Avu5gMUTu79bZRknl7OedSyps9AsUSoPocZXun4IRZZ</p>
<p>Uw== </p>
<p>-----END CERTIFICATE-----</p></blockquote>
<p> </p>
<p><br /></p>
<p>위와 같이 될 것입니다.</p>
<p><br /></p>
<p>내용물의 가운데 내용이</p>
<p><br /></p>
<p> </p>
<blockquote style="border:1px solid rgb(211,188,235);background-color:#e6ccff;padding:5px 10px;">-----END CERTIFICATE----------BEGIN CERTIFICATE-----</blockquote>
<p><br /></p>
<p>위와 같이 가로로 붙거나</p>
<p><br /></p>
<p> </p>
<blockquote style="border:1px solid rgb(211,188,235);background-color:#e6ccff;padding:5px 10px;">
<p>-----END CERTIFICATE-----</p>
<p><br /></p>
<p>-----BEGIN CERTIFICATE-----</p></blockquote>
<p> </p>
<p><br /></p>
<p>이렇게 뛰어져도 안되고 정확하게 아래위로 붙어야 됩니다.</p>
<p><br /></p>
<p>이제 저장하면 제대로 된 인증서가 만들어졌다고 보면 됩니다.</p>
<p><br /></p>
<p>실제 Nginx에서 필요한 인증서는 바로 이것입니다.</p>
<p><br /></p>
<p>그리고 제일 처음에 만들었던 privkey.pem 파일이 키 파일이 되는 것입니다.</p>
<p><br /></p>
<p>이 2개만 있으면 HTTPS 통신에 적합합니다.</p>
<p><br /></p>
<p><br /></p>
<p style="text-align:center;"> </p>
<blockquote style="text-align:center;border:1px solid rgb(195,232,158);background-color:#d6ffad;padding:5px 10px;"><span style="font-size:18px;">4. OCSP Stapling을 위한 인증서 만들기</span></blockquote>
<p><br /></p>
<p>Nginx에서 HTTPS 설정을 하다보면 OCSP Stapling이라는 것이 있습니다.</p>
<p><br /></p>
<p>이것은 미리 인증서 서버에 요청하여 인증한 내역을 받아두는 것입니다.</p>
<p><br /></p>
<p>그러면 외부에서 홈페이지 접속할 때 속도가 빨라집니다.</p>
<p><br /></p>
<p><br /></p>
<p>Nginx에서</p>
<p><br /></p>
<p> </p>
<blockquote style="border:1px solid rgb(174,232,232);background-color:#bfffff;padding:5px 10px;">
<p>ssl_trusted_certificate /your/ssl/certificate/chain.pem;</p>
<p>ssl_stapling on;</p>
<p>ssl_stapling_verify on;</p>
<p>resolver 8.8.8.8 8.8.4.4 valid=300s;</p>
<p>resolver_timeout 10s;</p></blockquote>
<p> </p>
<p><br /></p>
<p>위와 같은 부분이 추가된다고 보시면 됩니다.</p>
<p><br /></p>
<p>이제 chain.pem 인증서를 만들 것입니다.</p>
<p><br /></p>
<p>순서가 중간인증서 -&gt; Root 인증서 순서로 붙어있으면 됩니다.</p>
<p><br /></p>
<p>중간인증서는 아까 봤던 바로 그 내용</p>
<p><br /></p>
<p><br /></p>
<p> </p>
<blockquote style="border:1px solid rgb(211,188,235);background-color:#e6ccff;padding:5px 10px;">
<p>-----BEGIN CERTIFICATE-----</p>
<p>MIIETTCCAzWgAwIBAgILBAAAAAABRE7wNjEwDQYJKoZIhvcNAQELBQAwVzELMAkG</p>
<p>A1UEBhMCQkUxGTAXBgNVBAoTEEdsb2JhbFNpZ24gbnYtc2ExEDAOBgNVBAsTB1Jv</p>
<p>b3QgQ0ExGzAZBgNVBAMTEkdsb2JhbFNpZ24gUm9vdCBDQTAeFw0xNDAyMjAxMDAw</p>
<p>MDBaFw0yNDAyMjAxMDAwMDBaMEwxCzAJBgNVBAYTAkJFMRkwFwYDVQQKExBHbG9i</p>
<p>YWxTaWduIG52LXNhMSIwIAYDVQQDExlBbHBoYVNTTCBDQSAtIFNIQTI1NiAtIEcy</p>
<p>MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA2gHs5OxzYPt+j2q3xhfj</p>
<p>kmQy1KwA2aIPue3ua4qGypJn2XTXXUcCPI9A1p5tFM3D2ik5pw8FCmiiZhoexLKL</p>
<p>dljlq10dj0CzOYvvHoN9ItDjqQAu7FPPYhmFRChMwCfLew7sEGQAEKQFzKByvkFs</p>
<p>MVtI5LHsuSPrVU3QfWJKpbSlpFmFxSWRpv6mCZ8GEG2PgQxkQF5zAJrgLmWYVBAA</p>
<p>cJjI4e00X9icxw3A1iNZRfz+VXqG7pRgIvGu0eZVRvaZxRsIdF+ssGSEj4k4HKGn</p>
<p>kCFPAm694GFn1PhChw8K98kEbSqpL+9Cpd/do1PbmB6B+Zpye1reTz5/olig4het</p>
<p>ZwIDAQABo4IBIzCCAR8wDgYDVR0PAQH/BAQDAgEGMBIGA1UdEwEB/wQIMAYBAf8C</p>
<p>AQAwHQYDVR0OBBYEFPXN1TwIUPlqTzq3l9pWg+Zp0mj3MEUGA1UdIAQ+MDwwOgYE</p>
<p>VR0gADAyMDAGCCsGAQUFBwIBFiRodHRwczovL3d3dy5hbHBoYXNzbC5jb20vcmVw</p>
<p>b3NpdG9yeS8wMwYDVR0fBCwwKjAooCagJIYiaHR0cDovL2NybC5nbG9iYWxzaWdu</p>
<p>Lm5ldC9yb290LmNybDA9BggrBgEFBQcBAQQxMC8wLQYIKwYBBQUHMAGGIWh0dHA6</p>
<p>Ly9vY3NwLmdsb2JhbHNpZ24uY29tL3Jvb3RyMTAfBgNVHSMEGDAWgBRge2YaRQ2X</p>
<p>yolQL30EzTSo//z9SzANBgkqhkiG9w0BAQsFAAOCAQEAYEBoFkfnFo3bXKFWKsv0</p>
<p>XJuwHqJL9csCP/gLofKnQtS3TOvjZoDzJUN4LhsXVgdSGMvRqOzm+3M+pGKMgLTS</p>
<p>xRJzo9P6Aji+Yz2EuJnB8br3n8NA0VgYU8Fi3a8YQn80TsVD1XGwMADH45CuP1eG</p>
<p>l87qDBKOInDjZqdUfy4oy9RU0LMeYmcI+Sfhy+NmuCQbiWqJRGXy2UzSWByMTsCV</p>
<p>odTvZy84IOgu/5ZR8LrYPZJwR2UcnnNytGAMXOLRc3bgr07i5TelRS+KIz6HxzDm</p>
<p>MTh89N1SyvNTBCVXVmaU6Avu5gMUTu79bZRknl7OedSyps9AsUSoPocZXun4IRZZ</p>
<p>Uw== </p>
<p>-----END CERTIFICATE-----</p></blockquote>
<p> </p>
<p><br /></p>
<p>위 내용입니다.</p>
<p><br /></p>
<p><br /></p>
<p>이제 Root 인증서를 받아야 되는데요.</p>
<p><br /></p>
<p>마찬가지로 <a href="https://www.alphassl.com/support/install-root-certificate.html" target="_blank" rel="nofollow noreferrer noopener">https://www.alphassl.com/support/install-root-certificate.html</a> 여기에 있습니다.</p>
<p><br /></p>
<p> </p>
<blockquote style="border:1px solid rgb(174,232,232);background-color:#bfffff;padding:5px 10px;">
<p>Download the Root Certificates here (Right Click Save-as):</p>
<p><br /></p>
<p>Root CA</p>
<p>crt DER Format | .pem Format | .txt Format - this root CA certificate does not need need to be installed on your webserver</p></blockquote>
<p> </p>
<p><br /></p>
<p>위와 같이 있는 내용을 받으시면 됩니다.</p>
<p><br /></p>
<p>현재 AlphaSSL의 Root 인증서는 </p>
<p><br /></p>
<p> </p>
<blockquote style="border:1px solid rgb(211,188,235);background-color:#e6ccff;padding:5px 10px;">
<p>-----BEGIN CERTIFICATE-----</p>
<p>MIIDdTCCAl2gAwIBAgILBAAAAAABFUtaw5QwDQYJKoZIhvcNAQEFBQAwVzELMAkG</p>
<p>A1UEBhMCQkUxGTAXBgNVBAoTEEdsb2JhbFNpZ24gbnYtc2ExEDAOBgNVBAsTB1Jv</p>
<p>b3QgQ0ExGzAZBgNVBAMTEkdsb2JhbFNpZ24gUm9vdCBDQTAeFw05ODA5MDExMjAw</p>
<p>MDBaFw0yODAxMjgxMjAwMDBaMFcxCzAJBgNVBAYTAkJFMRkwFwYDVQQKExBHbG9i</p>
<p>YWxTaWduIG52LXNhMRAwDgYDVQQLEwdSb290IENBMRswGQYDVQQDExJHbG9iYWxT</p>
<p>aWduIFJvb3QgQ0EwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDaDuaZ</p>
<p>jc6j40+Kfvvxi4Mla+pIH/EqsLmVEQS98GPR4mdmzxzdzxtIK+6NiY6arymAZavp</p>
<p>xy0Sy6scTHAHoT0KMM0VjU/43dSMUBUc71DuxC73/OlS8pF94G3VNTCOXkNz8kHp</p>
<p>1Wrjsok6Vjk4bwY8iGlbKk3Fp1S4bInMm/k8yuX9ifUSPJJ4ltbcdG6TRGHRjcdG</p>
<p>snUOhugZitVtbNV4FpWi6cgKOOvyJBNPc1STE4U6G7weNLWLBYy5d4ux2x8gkasJ</p>
<p>U26Qzns3dLlwR5EiUWMWea6xrkEmCMgZK9FGqkjWZCrXgzT/LCrBbBlDSgeF59N8</p>
<p>9iFo7+ryUp9/k5DPAgMBAAGjQjBAMA4GA1UdDwEB/wQEAwIBBjAPBgNVHRMBAf8E</p>
<p>BTADAQH/MB0GA1UdDgQWBBRge2YaRQ2XyolQL30EzTSo//z9SzANBgkqhkiG9w0B</p>
<p>AQUFAAOCAQEA1nPnfE920I2/7LqivjTFKDK1fPxsnCwrvQmeU79rXqoRSLblCKOz</p>
<p>yj1hTdNGCbM+w6DjY1Ub8rrvrTnhQ7k4o+YviiY776BQVvnGCv04zcQLcFGUl5gE</p>
<p>38NflNUVyRRBnMRddWQVDf9VMOyGj/8N7yy5Y0b2qvzfvGn9LhJIZJrglfCm7ymP</p>
<p>AbEVtQwdpf5pLGkkeB6zpxxxYu7KyJesF12KwvhHhm4qxFYxldBniYUr+WymXUad</p>
<p>DKqC5JlR3XC321Y9YeRq4VzW9v493kHMB65jUr9TU/Qr6cf9tveCX4XSQRjbgbME</p>
<p>HMUfpIBvFSDJ3gyICh3WZlXi/EjJKSZp4A==</p>
<p>-----END CERTIFICATE-----</p></blockquote>
<p> </p>
<p><br /></p>
<p>위 내용입니다.</p>
<p><br /></p>
<p>이제 중간인증서 -&gt; Root 인증서 순서로 붙여봅니다.</p>
<p><br /></p>
<p> </p>
<blockquote style="border:1px solid rgb(211,188,235);background-color:#e6ccff;padding:5px 10px;">
<p>-----BEGIN CERTIFICATE-----</p>
<p>MIIETTCCAzWgAwIBAgILBAAAAAABRE7wNjEwDQYJKoZIhvcNAQELBQAwVzELMAkG</p>
<p>A1UEBhMCQkUxGTAXBgNVBAoTEEdsb2JhbFNpZ24gbnYtc2ExEDAOBgNVBAsTB1Jv</p>
<p>b3QgQ0ExGzAZBgNVBAMTEkdsb2JhbFNpZ24gUm9vdCBDQTAeFw0xNDAyMjAxMDAw</p>
<p>MDBaFw0yNDAyMjAxMDAwMDBaMEwxCzAJBgNVBAYTAkJFMRkwFwYDVQQKExBHbG9i</p>
<p>YWxTaWduIG52LXNhMSIwIAYDVQQDExlBbHBoYVNTTCBDQSAtIFNIQTI1NiAtIEcy</p>
<p>MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA2gHs5OxzYPt+j2q3xhfj</p>
<p>kmQy1KwA2aIPue3ua4qGypJn2XTXXUcCPI9A1p5tFM3D2ik5pw8FCmiiZhoexLKL</p>
<p>dljlq10dj0CzOYvvHoN9ItDjqQAu7FPPYhmFRChMwCfLew7sEGQAEKQFzKByvkFs</p>
<p>MVtI5LHsuSPrVU3QfWJKpbSlpFmFxSWRpv6mCZ8GEG2PgQxkQF5zAJrgLmWYVBAA</p>
<p>cJjI4e00X9icxw3A1iNZRfz+VXqG7pRgIvGu0eZVRvaZxRsIdF+ssGSEj4k4HKGn</p>
<p>kCFPAm694GFn1PhChw8K98kEbSqpL+9Cpd/do1PbmB6B+Zpye1reTz5/olig4het</p>
<p>ZwIDAQABo4IBIzCCAR8wDgYDVR0PAQH/BAQDAgEGMBIGA1UdEwEB/wQIMAYBAf8C</p>
<p>AQAwHQYDVR0OBBYEFPXN1TwIUPlqTzq3l9pWg+Zp0mj3MEUGA1UdIAQ+MDwwOgYE</p>
<p>VR0gADAyMDAGCCsGAQUFBwIBFiRodHRwczovL3d3dy5hbHBoYXNzbC5jb20vcmVw</p>
<p>b3NpdG9yeS8wMwYDVR0fBCwwKjAooCagJIYiaHR0cDovL2NybC5nbG9iYWxzaWdu</p>
<p>Lm5ldC9yb290LmNybDA9BggrBgEFBQcBAQQxMC8wLQYIKwYBBQUHMAGGIWh0dHA6</p>
<p>Ly9vY3NwLmdsb2JhbHNpZ24uY29tL3Jvb3RyMTAfBgNVHSMEGDAWgBRge2YaRQ2X</p>
<p>yolQL30EzTSo//z9SzANBgkqhkiG9w0BAQsFAAOCAQEAYEBoFkfnFo3bXKFWKsv0</p>
<p>XJuwHqJL9csCP/gLofKnQtS3TOvjZoDzJUN4LhsXVgdSGMvRqOzm+3M+pGKMgLTS</p>
<p>xRJzo9P6Aji+Yz2EuJnB8br3n8NA0VgYU8Fi3a8YQn80TsVD1XGwMADH45CuP1eG</p>
<p>l87qDBKOInDjZqdUfy4oy9RU0LMeYmcI+Sfhy+NmuCQbiWqJRGXy2UzSWByMTsCV</p>
<p>odTvZy84IOgu/5ZR8LrYPZJwR2UcnnNytGAMXOLRc3bgr07i5TelRS+KIz6HxzDm</p>
<p>MTh89N1SyvNTBCVXVmaU6Avu5gMUTu79bZRknl7OedSyps9AsUSoPocZXun4IRZZ</p>
<p>Uw== </p>
<p>-----END CERTIFICATE-----</p>
<p>-----BEGIN CERTIFICATE-----</p>
<p>MIIDdTCCAl2gAwIBAgILBAAAAAABFUtaw5QwDQYJKoZIhvcNAQEFBQAwVzELMAkG</p>
<p>A1UEBhMCQkUxGTAXBgNVBAoTEEdsb2JhbFNpZ24gbnYtc2ExEDAOBgNVBAsTB1Jv</p>
<p>b3QgQ0ExGzAZBgNVBAMTEkdsb2JhbFNpZ24gUm9vdCBDQTAeFw05ODA5MDExMjAw</p>
<p>MDBaFw0yODAxMjgxMjAwMDBaMFcxCzAJBgNVBAYTAkJFMRkwFwYDVQQKExBHbG9i</p>
<p>YWxTaWduIG52LXNhMRAwDgYDVQQLEwdSb290IENBMRswGQYDVQQDExJHbG9iYWxT</p>
<p>aWduIFJvb3QgQ0EwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDaDuaZ</p>
<p>jc6j40+Kfvvxi4Mla+pIH/EqsLmVEQS98GPR4mdmzxzdzxtIK+6NiY6arymAZavp</p>
<p>xy0Sy6scTHAHoT0KMM0VjU/43dSMUBUc71DuxC73/OlS8pF94G3VNTCOXkNz8kHp</p>
<p>1Wrjsok6Vjk4bwY8iGlbKk3Fp1S4bInMm/k8yuX9ifUSPJJ4ltbcdG6TRGHRjcdG</p>
<p>snUOhugZitVtbNV4FpWi6cgKOOvyJBNPc1STE4U6G7weNLWLBYy5d4ux2x8gkasJ</p>
<p>U26Qzns3dLlwR5EiUWMWea6xrkEmCMgZK9FGqkjWZCrXgzT/LCrBbBlDSgeF59N8</p>
<p>9iFo7+ryUp9/k5DPAgMBAAGjQjBAMA4GA1UdDwEB/wQEAwIBBjAPBgNVHRMBAf8E</p>
<p>BTADAQH/MB0GA1UdDgQWBBRge2YaRQ2XyolQL30EzTSo//z9SzANBgkqhkiG9w0B</p>
<p>AQUFAAOCAQEA1nPnfE920I2/7LqivjTFKDK1fPxsnCwrvQmeU79rXqoRSLblCKOz</p>
<p>yj1hTdNGCbM+w6DjY1Ub8rrvrTnhQ7k4o+YviiY776BQVvnGCv04zcQLcFGUl5gE</p>
<p>38NflNUVyRRBnMRddWQVDf9VMOyGj/8N7yy5Y0b2qvzfvGn9LhJIZJrglfCm7ymP</p>
<p>AbEVtQwdpf5pLGkkeB6zpxxxYu7KyJesF12KwvhHhm4qxFYxldBniYUr+WymXUad</p>
<p>DKqC5JlR3XC321Y9YeRq4VzW9v493kHMB65jUr9TU/Qr6cf9tveCX4XSQRjbgbME</p>
<p>HMUfpIBvFSDJ3gyICh3WZlXi/EjJKSZp4A==</p>
<p>-----END CERTIFICATE-----</p></blockquote>
<p> </p>
<p><br /></p>
<p>위와 같이 나옵니다.</p>
<p><br /></p>
<p>이제 이 내용을 chain.pem 으로 저장하고 웹서버의 ssl 인증서가 있는 폴더 넣고 Nginx에 적용하면 됩니다.</p>
<p><br /></p>
<p>Nginx에 구체적으로 적용하는 방법은 <a href="https://www.wsgvet.com/ubuntu/68" target="_blank" rel="nofollow noreferrer noopener">https://www.wsgvet.com/ubuntu/68</a> 여기에 자세히 적어뒀습니다.</p>
<p> </p>
<p> </p>
<p style="text-align:center;"> </p>
<blockquote style="text-align:center;border:1px solid rgb(195,232,158);background-color:#d6ffad;padding:5px 10px;"><span style="font-size:18px;">5. ECDSA 인증서 발급 후 하이브리드 인증서 설정하기​</span></blockquote>
<p><br /></p>
<p>추가로 ECDSA 인증서를 발급 받아 하이브리드 인증서 설정도 가능합니다.</p>
<p><br /></p>
<p><a href="https://www.wsgvet.com/home/492" target="_blank" rel="nofollow noreferrer noopener">https://www.wsgvet.com/home/492</a> 여기에 Letsencrpyt용으로 적어뒀는데요.</p>
<p><br /></p>
<p> </p>
<blockquote style="border:1px solid rgb(232,200,183);background-color:#ffdcc9;padding:5px 10px;">openssl ecparam -genkey -name secp384r1 &gt; privkeyecdsa.pem</blockquote>
<p><br /></p>
<p>위와 같이 privkeyecdsa.pem 키 파일을 생성하고</p>
<p><br /></p>
<p> </p>
<blockquote style="border:1px solid rgb(232,200,183);background-color:#ffdcc9;padding:5px 10px;">openssl req -new -sha256 -key privkeyecdsa.pem -nodes -out requestecdsa.csr</blockquote>
<p><br /></p>
<p>위와 같이 CSR파일을 생성할 수 있습니다.</p>
<p><br /></p>
<p>마찬가지로 Common Name (e.g. server FQDN or YOUR name) []: 이 부분만 주의해주시구요.</p>
<p><br /></p>
<p>그후 과정은 동일합니다.</p>
<p><br /></p>
<p><br /></p>
<p>참 쉽죠? ^^</p>]]></description>
<dc:creator>우성군</dc:creator>
<dc:date>2016-12-14T02:56:47+09:00</dc:date>
</item>

</channel>
</rss>
