본문 바로가기
IT 일반

Docker로 Apache2 web service + https로 설정하기

by skyoon 2024. 12. 16.

1. Docker 설치 및 apache2 image 다운로드하기

  • apache 설정하다 꼬이는 경우가 많아 docker로 설정
sudo apt update
sudo apt install docker.io
sudo docker pull httpd

sudo docker images # httpd 이미지 다운로드 확인

 

2. Portfolio 코드 다운(각자 상황에 맞게 수정)

  • bootstrap 기반으로 만든 개인 portfolio code를 host pc에 Git으로 관리함 변경 시 Git pull로 적용하기 위해
git clone https://github.com/anytimesk/portfolio.git

 

3. https 설정을 위한 SSL 인증서 발급 (Let’s Encrypt SSL 인증서를 발급함)

  • 도메인을 가지고 있어 도메인을 활용한 방법을 활용
  • 1회성으로 docker 이미지를 받고 지을것이라 —rm 옵션을 부여함(실제 해보니 지워지지 않아 수동으로 삭제)
  • 도메인을 가지고 있어 도메인을 활용한 방법을 활용
  • certbot/certbot certonly -d ‘{보유한 도메인주소 입력}’
sudo docker run -it --rm --name certbot \
        -v '/etc/letsencrypt:/etc/letsencrypt' \
        -v '/var/lib/letsencrypt:/var/lib/letsencrypt' \
        certbot/certbot certonly -d 'dastro.kr' \
        --manual --preferred-challenges dns \
        --server https://acme-v02.api.letsencrypt.org/directory
  • 실행하면 아래 그림처럼 되는데 중간 DNS txt값이 출력되고 Press Enter to Continue _acme-challenge.{도메인주소) 출력되고 멈춰 있음 이때 Enter 누르면 안 됨

  • 도메인 관리 사이트 접속 아래와 같이 DNS 설정 추가해야 함
  • Gabia 기준 : 타입은 TXT, 호스트는 _acme-challenge (도메인주소는 뒤에 있어서 안 붙임), 값/위치는 DNS txt값을 입력

  • DNS 반영되는 시간이 있어 1~2분 대기후 Enter 누르면 아래와 같이 출력됨

  • 다음 위치에 인증서 파일들이 위치함 /etc/letsencrypt/live/{도메인 주소}

4. Docker image 실행

  • host에 저장된 인증서, 코드는 -v 옵션으로 링크를 걸어줌
  • http, https 포트설정은 -p 옵션으로 host:container 순으로 설정
sudo docker run -dit \
        --name apache2 \
        -p 80:80 -p 443:443 \
        -v /home/ubuntu/portfolio/:/usr/local/apache2/htdocs/ \
        -v /etc/letsencrypt:/etc/letsencrypt \
        httpd

sudo docker ps -a # docker 실행 확인 및 id 확인

 

5. https 설정을 위해 해당 Docker container 접속

  • 설정파일 편집을 위한 vi도 설치
sudo docker exec -it 1af8da674e74 /bin/bash  # -it 뒤에는 ps 명령을 통해 확인한 id 값

apt-get update
apt-get install vim

 

6. httpd-vhosts.conf를 수정

cd /usr/local/apache2/conf/extra
vi httpd-vhosts.conf
  • 수정할 내용 ( 테스트 목적으로 서브도메인 추가 운영하고 해당 서브도메인은 http로 운영)
<VirtualHost *:80>
	ServerAdmin webmaster@dummy-host.example.com
	DocumentRoot "/usr/local/apache2/htdocs/bootstrap"
	ServerName dastro.kr
	ServerAlias dastro.kr
	#ErrorLog "logs/dummy-host.example.com-error_log"
	#CustomLog "logs/dummy-host.example.com-access_log" common
	# HTTP -> HTTPS 리다이렉트
  Redirect permanent / https://www.dastro.kr/
</VirtualHost>

<VirtualHost *:80>
	ServerAdmin webmaster@dummy-host2.example.com
	DocumentRoot "/usr/local/apache2/htdocs/reactNative"
	ServerName rn.dastro.kr
	#ErrorLog "logs/dummy-host2.example.com-error_log"
	#CustomLog "logs/dummy-host2.example.com-access_log" common
</VirtualHost>

 

7. httpd-ssl.conf 파일 수정

cd /usr/local/apache2/conf/extra
vi httpd-ssl.conf
  • 수정할 내용
<VirtualHost _default_:443>
	# 124 Line Document 수정
	DocumentRoot "/usr/local/apache2/htdocs/bootstrap"

	# 125 Line ServerName 수정
	ServerName www.dastro.kr
	
	# 144 Line 수정
	SSLCertificateFile "/usr/local/apache2/conf/server.crt"                # 원본
	SSLCertificateFile "/etc/letsencrypt/live/www.dastro.kr/fullchain.pem" # 수정
	
	# 154 Line 수정
	SSLCertificateKeyFile "/usr/local/apache2/server.key"                   # 원본
	SSLCertificateKeyFile "/etc/letsencrypt/live/www.dastro.kr/privkey.pem" # 수정
</VirtualHost>

 

8. 수정된 httpd-vhost.conf, httpd-ssl.conf를 conf에서 반영

cd /usr/local/apache2/conf
vi httpd.conf
  • 수정할 내용
# 94 Line 주석 해제
#LoadModule socache_shmcb_module modules/mod_socache_shmcb.so
LoadModule socache_shmcb_module modules/mod_socache_shmcb.so

# 161 Line 주석 해제
#LoadModule ssl_module modules/mod_ssl.so
LoadModule ssl_module modules/mod_ssl.so

# 241 Line 주석 해제하고 ServerName 설정
#ServerName www.example.com:80
ServerName www.dastro.kr

# 524 Line 주석 해제
#include conf/extra/httpd-vhosts.conf
include conf/extra/httpd-vhosts.conf

# 541 Line 주석 해제
#Include conf/extra/httpd-ssl.conf
Include conf/extra/httpd-ssl.conf
  • htpd -t 로 검증
httpd -t

 

9. docker image 재실행

sudo docker ps -a # 실행중인 id 조회
sudo docker restart 1af8da674e74 # restart 뒤에 id값