반응형
Docker 사용하여 간단하게 Let's Encrypt 와일드카드 SSL 인증서 발급/갱신 방법
Let's Encrypt 와일드 카드 SSL 인증서 발급

Docker로 간단하게 Let's Encrypt SSL 인증서 발급받는 방법 입니다. 아래 내용에서 *.yourdomain.com / youremail@google.com 부분만 자신의 도메인과 이메일 주소로 변경 합니다.

뒤의 내용은 ACME 서버 구독 동의, EFF 재단에 이메일 공유 거부의 내용 입니다.

docker run -it --rm --name certbot \
  -v '/etc/letsencrypt:/etc/letsencrypt' \
  -v '/var/lib/letsencrypt:/var/lib/letsencrypt' \
  certbot/certbot certonly -d '*.yourdomain.com' --email youremail@google.com --agree-tos --no-eff-email -d domain.com --manual --preferred-challenges dns --server https://acme-v02.api.letsencrypt.org/directory

 

아래는 예시 화면 입니다. "rcB~~"의 토큰을 _acme-challenge.yourdomain.com. 도메인의 TXT 레코드로 등록 해줍니다.  (토큰 값은 매번 다릅니다) 등록 후 약 2~3분이 지나고 TXT 레코드가 잘 등록 되었는지 확인 후 엔터를 눌러 진행하면 발급이 완료 됩니다.

 

Let's Encrypt 와일드 카드 SSL 인증서 갱신

Let's Encrypt 인증서의 경우 유효 기간이 90일 이며, 만료일 30일 전부터 갱신이 가능 합니다. 

docker run -it --rm --name certbot \
  -v '/etc/letsencrypt:/etc/letsencrypt' \
  -v '/var/lib/letsencrypt:/var/lib/letsencrypt' \
  certbot/certbot renew --manual --preferred-challenges dns --server https://acme-v02.api.letsencrypt.org/directory

 

Let's Encrypt 인증서의 유효 기간이 짧다보니, 아래와 같이 renew 스크립트 파일을 만들어 크론탭에 등록하여 자동 갱신하도록 설정하는것이 좋습니다.

cd /root
vim letsencrypt_renew.sh

#!/bin/bash
docker run -it --rm --name certbot \
  -v '/etc/letsencrypt:/etc/letsencrypt' \
  -v '/var/lib/letsencrypt:/var/lib/letsencrypt' \
  certbot/certbot renew --manual --preferred-challenges dns --server https://acme-v02.api.letsencrypt.org/directory

:wq

chmod 750 /root/letsencrypt_renew.sh
crontab -e

# 짝수달 3일 0시 0분에 renew 스크립트 실행
00 00 03 */2 * /root/letsencrypt_renew.sh
반응형
반응형

 

  • 도커 Apache-Tomcat 망분리 구축 및 Zabbix-Agent 설치 코드 (Apache Dockerfile, Tomcat Dockerfile, Zabbix-agent Dockerfile)

기존에 올렸던 포스팅(https://nirsa.tistory.com/132?category=876464)을 도커파일로 변환시켜서 사용하는 예제 입니다. 셋팅자체는 위의 포스팅과 거의 똑같고 서버 IP 등의 정보는 변경해서 사용하시면 됩니다.

기본적으로 연결하기 위한 간단한 설정만 적용된 apache, zabbix-agent 두가지 Dockerfile을 만든 후 docker-compose를 사용하여 실행 했습니다. 간단히 작성된것이므로 볼륨등을 추가적으로 설정 후 사용하시는게 좋습니다. 만약, 소스코드를 따로 설정해야할 경우 COPY 또는 VOLUMES 등을 이용하면 됩니다.

 

  • Apache Server
# Dockerfile-web-v1.1
FROM centos:7

RUN yum install -y httpd httpd-devel gcc gcc-c++ wget perl make &&  mkdir /worker
WORKDIR /worker/
wget http://apache.mirror.cdnetworks.com/tomcat/tomcat-connectors/jk/tomcat-connectors-1.2.48-src.tar.gz && tar zxvf tomcat-connectors-1.2.48-src.tar.gzWORKDIR /worker/tomcat-connectors-1.2.48-src/native/
RUN ./configure --with-apxs=/bin/apxs \
	&& make && make install \
	&& sed -i 's/\#ServerName www.example.com:80/ServerName localhost/g' /etc/httpd/conf/httpd.conf \
	&& touch /etc/httpd/conf/workers.properties \
	&& echo -e "worker.list=loadbalancer\nworker.loadbalancer.type=lb\nworker.loadbalancer.balanced_workers=worker1,worker2\nworker.loadbalancer.sticky_session=1\n\nworker.worker1.type=ajp13\nworker.worker1.host=10.178.0.7\nworker.worker1.port=8010\nworker.worker1.lbfactor=1\n\nworker.worker2.type=ajp13\nworker.worker2.host=10.178.0.8\nworker.worker2.port=9010\nworker.worker2.lbfactor=1\n" > /etc/httpd/conf/workers.properties \
	&& perl -p -i -e '$.==57 and print "LoadModule jk_module /usr/lib64/httpd/modules/mod_jk.so\n<IfModule jk_module>\n   JkWorkersFile /etc/httpd/conf/workers.properties\n   JkLogFile /var/log/httpd/mod_jk.log\n   JkLogLevel info\n   JkLogStampFormat \"[%a %b %d %H:%M:%S %Y]\"\n   JkMount /*.jsp loadbalancer\n</IfModule>"' /etc/httpd/conf/httpd.conf 

CMD ["/usr/sbin/httpd", "-D", "FOREGROUND"]
EXPOSE 80
# Dockerfile-zabbix-v1.2
FROM centos:7

RUN rpm -Uvh https://repo.zabbix.com/zabbix/4.0/rhel/7/x86_64/zabbix-release-4.0-2.el7.noarch.rpm \
        && yum -y install zabbix-agent \
        && sed -i 's/Server=127.0.0.1/Server=10.178.0.4/g' /etc/zabbix/zabbix_agentd.conf \
        && sed -i 's/ServerActive=127.0.0.1/ServerActive=10.178.0.4/g' /etc/zabbix/zabbix_agentd.conf

EXPOSE 10050/TCP
CMD ["/usr/sbin/zabbix_agentd", "--foreground", "-c", "/etc/zabbix/zabbix_agentd.conf"]
# docker-compose.yaml
version: "3"
services:
  apache:
    image: apache:v1.1
    build:
      context: .
      dockerfile: Dockerfile-web-v1.1
    ports:
      - "80:80"

  zabbix:
    image: zabbix:v1.2
    build:
      context: .
      dockerfile: Dockerfile-zabbix-v1.2
    ports:
      - "10050:10050"

 

  • Tomcat
# Dockerfile-was1-v1.1
FROM centos:7

RUN yum -y update && yum install -y java-1.8.0-openjdk-devel.x86_64 wget perl
ENV JAVA_HOME=/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.252.b09-2.el7_8.x86_64
ENV export JAVA_HOME
ENV PATH=$PATH:$JAVA_HOME/bin
ENV export PATH

RUN wget http://mirror.navercorp.com/apache/tomcat/tomcat-9/v9.0.36/bin/apache-tomcat-9.0.36.tar.gz \
	&& tar zxvf apache-tomcat-9.0.36.tar.gz \
	&& mv apache-tomcat-9.0.36 /usr/local/tomcat9 \
	&& perl -p -i -e '$.==114 and print "    <Connector protocol=\"AJP/1.3\" secretRequired=\"false\" address=\"0.0.0.0\" port=\"8010\" redirectPort=\"8443\" />\n"' /usr/local/tomcat9/conf/server.xml \
	&& echo "hi worker1" > /usr/local/tomcat9/webapps/ROOT/index.jsp
    
ENTRYPOINT ["/usr/local/tomcat9/bin/catalina.sh", "run"]
EXPOSE 8010
# Dockerfile-zabbix-v1.2
FROM centos:7

RUN rpm -Uvh https://repo.zabbix.com/zabbix/4.0/rhel/7/x86_64/zabbix-release-4.0-2.el7.noarch.rpm \
        && yum -y install zabbix-agent \
        && sed -i 's/Server=127.0.0.1/Server=10.178.0.4/g' /etc/zabbix/zabbix_agentd.conf \
        && sed -i 's/ServerActive=127.0.0.1/ServerActive=10.178.0.4/g' /etc/zabbix/zabbix_agentd.conf

EXPOSE 10050/TCP
CMD ["/usr/sbin/zabbix_agentd", "--foreground", "-c", "/etc/zabbix/zabbix_agentd.conf"]
# docker-compose.yaml
version: "3"
services:
  apache:
    image: tomcat:v1.1
    build:
      context: .
      dockerfile: Dockerfile-was1-v1.1
    ports:
      - "8010:8010"

  zabbix:
    image: zabbix:v1.2
    build:
      context: .
      dockerfile: Dockerfile-zabbix-v1.2
    ports:
      - "10050:10050"

 

반응형
반응형

 

  • Ubuntu 16.04 Docker-CE Install

아래 명령어를 입력하면 docker-ce 설치가 완료 됩니다. root 계정이 아닐 경우 앞의 명령어에 sudo를 입력하여 관리자 권한을 사용 해주세요.

apt update && apt install apt-transport-https ca-certificates curl software-properties-common

curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
apt-key fingerprint 0EBFCD88

add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable"

apt update && apt install docker-ce

 

반응형
반응형

 

  • docker-compose 부팅 시 자동 실행

vi /etc/systemd/system/docker-compose.service 을 입력하여 아래 파일을 작성 합니다. service에 등록시키는 과정 입니다.

[Unit]
Description=Docker Compose Application Service
Requires=docker.service
After=docker.service

[Service]
Type=oneshot
RemainAfterExit=yes
WorkingDirectory=/docker
ExecStart=/usr/local/bin/docker-compose up -d
ExecStop=/usr/local/bin/docker-compose down
TimeoutStartSec=0

[Install]
WantedBy=multi-user.target
  • WorkingDirectory : docker-compose 명령을 실행할 경로를 지정해야 합니다. docker-compose.yml 파일이 존재하는 경로가 됩니다.
  • ExecStart / ExecStop : 실행/중지 관련 파일이 생성되는 경로 입니다.

 

위의 파일을 생성한 후 아래와 같이 부팅 시 자동 실행 되도록 설정 합니다.

Systemctl enable docker-compose

 

서버를 재부팅하여 정상적으로 자동 실행 되는것을 확인 할 수 있습니다.

 

반응형

+ Recent posts