[토닥] 경계선 지능인을 위한 앱 서비스 서버 초기 세팅 및 Redis 설정
개요
프로젝트 배포를 위한 Ubuntu 서버의 초기 환경 설정과 Redis 컨테이너 구성에 대해 다룬다.
서버 초기 세팅은 시스템 업데이트, 필수 패키지 설치, 보안 설정, Docker 및 GitLab Runner 설치를 포함한다.
Redis는 프로필 서비스의 토큰 관리와 관계 서비스의 세션 관리를 위해 사용되며, Docker 컨테이너로 구성하여 다른 마이크로서비스들과 동일한 네트워크에서 통신할 수 있도록 설정한다.
전체 시스템은 마이크로서비스 아키텍처로 구성되어 있으며, 각 서비스는 독립적인 컨테이너로 실행되면서 공통 네트워크를 통해 연결된다.
init.sh
# 패키지 목록 업데이트
sudo apt update
# 설치된 패키지 업그레이드
sudo apt upgrade -y
# 불필요한 패키지 제거
sudo apt autoremove -y
sudo apt autoclean
# 기본 유틸리티
sudo apt install -y \
curl \
wget \
vim \
nano \
git \
htop \
tree \
unzip \
zip \
software-properties-common \
apt-transport-https \
ca-certificates \
gnupg \
lsb-release
# 네트워크 도구
sudo apt install -y \
net-tools \
netstat-nat \
nmap \
telnet \
dnsutils \
iputils-ping
# 시스템 모니터링
sudo apt install -y \
iotop \
iftop \
tcpdump \
strace \
lsof
# UFW 방화벽 활성화
sudo ufw enable
# SSH 포트 허용 (기본 22번)
sudo ufw allow ssh
sudo ufw allow 22/tcp
# HTTP/HTTPS 허용 (웹서버용)
sudo ufw allow 80/tcp
sudo ufw allow 443/tcp
sudo ufw allow 8080/tcp
# 현재 방화벽 상태 확인
sudo ufw status verbose
# NTP 설치 및 설정
sudo apt install -y ntp
sudo systemctl start ntp
sudo systemctl enable ntp
# 시간대 설정
sudo timedatectl set-timezone Asia/Seoul
Ubuntu 서버의 기본 환경을 구성하는 쉘 스크립트다.
시스템 패키지 업데이트, 필수 유틸리티 설치, 네트워크 및 모니터링 도구 설치를 수행한다.
보안을 위해 UFW 방화벽을 설정하고 필요한 포트만 개방하며, 시간 동기화를 위해 NTP를 설정한다.
한국 시간대로 설정하여 로그 및 시스템 시간을 현지화한다.
docker-gitlab.sh
# 이전 버전의 Docker 제거 (있는 경우)
sudo apt-get remove docker docker-engine docker.io containerd runc
# 필요한 패키지 설치
sudo apt-get update
sudo apt-get install -y apt-transport-https ca-certificates curl gnupg lsb-release
# Docker 공식 GPG 키 추가
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
# Docker 저장소 설정
echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
# Docker 설치
sudo apt-get update
sudo apt-get install -y docker-ce docker-ce-cli containerd.io
# Docker 서비스 시작 및 부팅 시 자동 실행 설정
sudo systemctl start docker
sudo systemctl enable docker
# 현재 사용자를 docker 그룹에 추가 (sudo 없이 docker 명령어 실행 가능)
sudo usermod -aG docker $USER
# Docker-Compose 다운로드
sudo curl -L "https://github.com/docker/compose/releases/download/v2.23.3/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
# 실행 권한 부여
sudo chmod +x /usr/local/bin/docker-compose
# 심볼릭 링크 생성
sudo ln -s /usr/local/bin/docker-compose /usr/bin/docker-compose
# 설치 확인
docker-compose --version
# GitLab Runner 저장소 추가
curl -L "https://packages.gitlab.com/install/repositories/runner/gitlab-runner/script.deb.sh" | sudo bash
# GitLab Runner 설치
sudo apt-get install gitlab-runner
# GitLab Runner 서비스 시작 및 부팅 시 자동 실행 설정
sudo systemctl start gitlab-runner
sudo systemctl enable gitlab-runner
Docker와 Docker-Compose를 설치하고 GitLab CI/CD를 위한 Runner를 설정하는 쉘 스크립트다.
기존 Docker 제거 후 공식 저장소에서 최신 버전을 설치하며, 사용자를 docker 그룹에 추가하여 sudo 없이 Docker 명령어를 실행할 수 있도록 한다.
GitLab Runner는 지속적 통합/배포(CI/CD) 파이프라인을 실행하기 위해 설치된다.
redis-init/docker-compose.yml
version: '3.8'
services:
redis-server:
image: redis:latest
container_name: redis-server
restart: unless-stopped
networks:
- app-network
volumes:
redis_data:
driver: local
networks:
app-network:
external: true
name: app-network
Redis 컨테이너를 구성하는 Docker Compose 설정이다.
최소한의 설정으로 Redis를 실행하며, 외부 네트워크(app-network)를 사용하여 다른 마이크로서비스들과 통신할 수 있도록 구성한다.
포트는 기본값(6379)을 사용하고, 컨테이너 내부에서만 접근 가능하도록 설정하여 보안을 유지한다.
서비스별 Redis 연동 설정
spring:
data:
redis:
host: redis-server
port: 6379
간단한 설정으로 Redis에 연결할 수 있다. Docker 네트워크 내부에서는 컨테이너 이름(redis-server)으로 호스트를 지정하고, 기본 포트(6379)를 사용한다.
컨테이너 실행 및 관리
# Redis 컨테이너 시작
docker-compose up -d
# 컨테이너 상태 확인
docker ps | grep redis
# Redis 로그 확인
docker logs redis-server -f
# Redis CLI 접속
docker exec -it redis-server redis-cli
# 컨테이너 재시작
docker-compose restart redis-server
# 컨테이너 중지
docker-compose down
해당 명령어로 redis-init 디렉토리에서 docker-compose를 통해 컨테이너를 실행 및 모니터링을 진행할 수 있다.