IT 일반
Docker로 Apache2 web service + https로 설정하기
skyoon
2024. 12. 16. 04:45
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값