웹앱 서버를 컨테이너로 이전

개요

AWS Lightsail 에서 실행되고 있는 두개의 웹 응용프로그램이 있습니다.

  • 1 vCPU 프로세싱
  • 512MB 메모리
  • 20GB SSD 스토리지
  • 3.5 USD 월별요금
  • 1TB 전송
  • OS: Ubuntu 16.04

두 개의 웹 응용프로그램은 PHP 를 사용하고, nginx 를 사용해서 서비스되고 있습니다.

혹시나 다른 서버로 이전하게 될 수도 있고, 관리도 힘들어서 구성을 코드화하고 싶어졌습니다.

그래서, 두 응용프로그램을 컨테이너에서 실행될 수 있는 환경으로 이전했습니다.

Lightsail 에 새로운 인스턴스를 만들고, Docker를 설치하고, docker-compose 로 구성 내용을 관리하도록 이전했습니다.

  • 1 vCPU
  • 1GB 메모리
  • 30GB SSD 스토리지
  • 5.0 USD 월별요금
  • 2TB 전송
  • OS: Ubuntu 20.04

계획

컨테이너 구성

구현

호스트 80, 443 포트는 nginx 컨테이너에 연결됩니다.

DBMS 와 두 web app은 호스트 장치에 포트를 연결하지 않고, 컨테이너 내부에서만 접근할 수 있도록 EXPOSE 명령으로 구성합니다.

도커 네트워크를 만들어서 사용합니다.

nginx 에서 리버스 프록시 연결을 위한 네트워크와 web app 에서 DBMS 접근을 위한 네트워크를 분리하려고 했으나, 복잡해지는 것 같아 내부 네트워크는 하나만 사용하도록 구성합니다.

docker network

도커 네트워크를 작성합니다. 컨테이너는 작성된 네트워크로 연결됩니다.

$ docker network create <name of network>

bridge 네트워크가 사용됩니다.

nginx

GUI 환경에서 관리할 수 있는 Nginx Proxy Manager 를 사용합니다.

이제, 편리하게 GUI 환경에서 리버스 프록시를 관리할 수 있습니다.

docker-compose.yml 파일을 작성해서 구성을 코드화합니다.

DBMS

docker-compose.yml 파일을 작성해서 구성을 코드화합니다.

볼륨을 연결해서 데이터베이스 파일이 유지됩니다.

web apps

docker-compose.yml 파일을 작성해서 구성을 코드화하고, 볼륨을 연결해서 필요한 파일을 호스트에서 접근할 수 있고, 파일들이 컨테이너 외부에서 관리되어 계속 유지됩니다.

완료

Nginx Proxy Manager 를 사용하면 도메인을 연결하고, 리버스 프록시 구성시 Let’s Encrypt 에서 인증서를 간편하게 구성하고, 재발행이 자동화되어 편리합니다.

이제, 필요한 구성이 코드화되고, 필요한 파일은 호스트에서 확인할 수 있으므로 서버 이전을 매우 편리하게 진행할 수 있습니다.

구성이 변경된 블로그: bbon.kr web app 이 잘 동작하고 있습니다.

이슈

한번씩 CPU 사용량 급증하는 현상이 발생하고 있으나, 원인을 찾을 수 없습니다.

적은 리소스로 서버를 모니터링할 수 있는 도구를 찾고 있습니다.

남은 사항

Nginx Proxy Manager를 사용해서 리버스 프록시로 구성된 web app 의 도메인 별로 인증서를 사용하고 있는데, Let’s Encrypt 에서 제공하는 와일드카드 인증서를 사용하도록 구성해야 합니다.

CPU 사용이 급증하는 현상의 원인을 파악하고, 해결해야 합니다.

이 사이트는 광고를 포함하고 있습니다.
광고로 발생한 수익금은 서버 유지 관리에 사용되고 있습니다.

This site contains advertisements.
Revenue generated by the ad servers are being used for maintenance.

댓글 남기기