새로 생성한 EC2 인스턴스에 안전하고 체계적인 배포 환경을 구축하는 것은 안정적인 인프라 운영의 첫걸음입니다. 최고 관리자(root) 계정으로 모든 것을 처리하기보다는 전용 관리 계정을 생성하고, 프로젝트 구조에 맞는 디렉토리를 미리 세팅해 두면 보안과 유지보수 측면에서 훨씬 유리합니다.
이번 글에서는 docker-manager라는 전용 계정을 만들고, Docker 설치와 Nginx 설정을 위한 기본 환경을 구축하는 방법을 단계별로 정리해 보겠습니다.
1. 도커 관리용 전용 계정 생성
보안과 명확한 권한 관리를 위해 도커 컨테이너와 설정 파일들을 전담하여 관리할 전용 유저를 생성합니다.
adduser docker-manager
2. 필수 디렉토리 생성 및 권한 부여
Nginx 설정, Docker Compose 파일, 그리고 환경 변수(.env)를 분리하여 관리할 디렉토리를 만듭니다.
생성한 디렉토리의 소유권은 방금 만든 docker-manager 계정으로 변경해 줍니다.
# Nginx 설정 파일 디렉토리\
mkdir /home/docker-manager/nginx-configs\
sudo chown docker-manager /home/docker-manager/nginx-configs/
# Traefik 설정 파일 디렉토리\
mkdir /home/docker-manager/traefik
sudo chown docker-manager /home/docker-manager/traefik/
mkdir /home/docker-manager/traefik/dynamic
sudo chown docker-manager /home/docker-manager/traefik/dynamic
# Docker Compose 파일 디렉토리
mkdir /home/docker-manager/compose
sudo chown docker-manager /home/docker-manager/compose/
# 환경 변수(env) 파일 디렉토리
mkdir /home/docker-manager/env
sudo chown docker-manager /home/docker-manager/env/
3. Docker 엔진 설치 및 전용 네트워크 구성
Ubuntu 환경에 Docker를 설치하고, 앞으로 띄울 컨테이너들 간의 통신을 제어할 전용 서브넷 네트워크를 구축합니다.
# 1. 패키지 업데이트 및 HTTPS 관련 필수 패키지 설치
apt-get update
apt-get install apt-transport-https ca-certificates curl gnupg-agent software-properties-common -y
# 2. Docker 공식 GPG 키 추가 및 저장소(Repository) 설정
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | apt-key add -
add-apt-repository -y "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable"
# 3. Docker 엔진 설치
apt-get update -y
apt-get install docker-ce docker-ce-cli containerd.io -y
# 4. 도커 전용 네트워크(router) 생성
docker network create --subnet 172.30.0.0/16 router
최근 최신 버전의 Ubuntu에서는 apt-key add 명령어가 deprecated(권장되지 않음) 경고를 띄울 수 있습니다. 하지만 일반적인 환경에서는 여전히 정상적으로 작동하며 패키지를 설치하는 데 무리가 없습니다.
4. Nginx 설정(conf) 구성 준비
기본적인 뼈대가 모두 완성되었습니다. 이제 앞서 생성한 /home/docker-manager/nginx-configs 디렉토리 내부에 리버스 프록시나 로드밸런싱을 수행할 conf 파일을 작성해주면 됩니다.
이 디렉토리를 추후 Nginx 도커 컨테이너의 볼륨(Volume)으로 마운트하면, 호스트 서버에서 손쉽게 Nginx 설정을 변경하고 컨테이너에 즉각 반영할 수 있습니다.
# /home/docker-manager/nginx.yml
services:
nginx:
image: nginx
container_name: nginx
volumes:
- /home/docker-manager/nginx-configs:/etc/nginx/conf.d/
- /etc/letsencrypt:/etc/letsencrypt
- /var/www/certbot:/var/www/certbot
ports:
- "80:80"
- "443:443"
restart: unless-stopped
logging:
driver: "json-file"
options:
max-size: "30m" # 로그 파일 하나당 최대 100MB
max-file: "3" # 로그 파일 최대 3개 유지 (오래된 순 삭제)
environment:
- TZ=Asia/Seoul
networks:
- router
networks:
router:
external: true
댓글 0
댓글은 회원만 작성할 수 있습니다.
로그인하고 댓글 달기댓글을 불러오는 중입니다...
