데이터베이스 및 애플리케이션 컨테이너화 및 호스트 설치 가이드
MySQL/MariaDB
Docker 설치 (SSL 포함)
# 인증서 생성
mkdir -p ~/mysql-certs && cd ~/mysql-certs
openssl req -x509 -newkey rsa:4096 -nodes -days 365 \
-keyout server-key.pem -out server-cert.pem \
-subj "/CN=mysql.docker.local"
# 컨테이너 실행
docker run -d --name mysql \
-v mysql_data:/var/lib/mysql \
-v $( pwd ) :/etc/mysql/certs \
-e MYSQL_ROOT_PASSWORD = securepass \
-e MYSQL_SSL_CERT = /etc/mysql/certs/server-cert.pem \
-e MYSQL_SSL_KEY = /etc/mysql/certs/server-key.pem \
-p 3306 :3306 \
mysql:8.0 \
--ssl-ca= /etc/mysql/certs/server-cert.pem \
--ssl-cert= /etc/mysql/certs/server-cert.pem \
--ssl-key= /etc/mysql/certs/server-key.pem
호스트 설치 (Ubuntu)
sudo apt-get update && sudo apt-get install mysql-server
sudo mysql_secure_installation
# SSL 설정
sudo mysql_ssl_rsa_setup --uid= mysql
sudo systemctl restart mysql
# 외부 접속 허용
sudo sed -i 's/bind-address.*/bind-address = 0.0.0.0/' /etc/mysql/mysql.conf.d/mysqld.cnf
sudo ufw allow 3306 /tcp
PostgreSQL
Docker 설치 (SSL 포함)
docker run -d --name postgres \
-v pg_data:/var/lib/postgresql/data \
-v $( pwd ) /certs:/certs \
-e POSTGRES_PASSWORD = mysecretpassword \
-p 5432 :5432 \
postgres:15 \
-c ssl = on \
-c ssl_cert_file = /certs/server.crt \
-c ssl_key_file = /certs/server.key
호스트 설치 (Let's Encrypt 활용)
sudo apt-get install postgresql-15 certbot
sudo certbot certonly --standalone -d postgres.example.com
# 인증서 연결
sudo cp /etc/letsencrypt/live/postgres.example.com/* /etc/postgresql/15/main/
sudo chown postgres:postgres /etc/postgresql/15/main/*.pem
sudo systemctl restart postgresql
# pg_hba.conf 수정
hostssl all all 0 .0.0.0/0 md5 clientcert = verify-ca
Redis
Docker TLS 설정
# TLS 설정 파일 생성
openssl genrsa -out redis.key 2048
openssl req -new -x509 -key redis.key -out redis.crt -days 365
docker run -d --name redis \
-v $( pwd ) /tls:/tls \
-p 6379 :6379 \
redis:7.2 \
--tls-port 6379 \
--port 0 \
--tls-cert-file /tls/redis.crt \
--tls-key-file /tls/redis.key \
--requirepass "securepassword"
호스트 설치 (Ubuntu)
sudo add-apt-repository ppa:redislabs/redis
sudo apt-get install redis-server
# TLS 설정
sudo mkdir /etc/redis/tls
sudo openssl req -x509 -nodes -days 365 -newkey rsa:2048 \
-keyout /etc/redis/tls/redis.key \
-out /etc/redis/tls/redis.crt
sudo systemctl restart redis-server
RabbitMQ
Docker TLS 구성
docker run -d --name rabbitmq \
-v rabbitmq_certs:/etc/rabbitmq/certs \
-p 5671 :5671 -p 15672 :15672 \
rabbitmq:3.12-management \
rabbitmq-plugins enable rabbitmq_auth_mechanism_ssl
호스트 설치 및 인증서 설정
# Erlang 설치
curl -s https://packagecloud.io/install/repositories/rabbitmq/erlang/script.deb.sh | sudo bash
sudo apt-get install erlang
# RabbitMQ 설치
curl -s https://packagecloud.io/install/repositories/rabbitmq/rabbitmq-server/script.deb.sh | sudo bash
sudo apt-get install rabbitmq-server
# 인증서 생성
sudo rabbitmqctl create_user admin securepass
sudo rabbitmqctl set_permissions -p / admin ".*" ".*" ".*"
sudo rabbitmq-plugins enable rabbitmq_management rabbitmq_auth_mechanism_ssl
Kavita (전자책 관리 시스템)
Docker 설치
docker run -d --name kavita \
-v /path/to/books:/books \
-v /path/to/config:/kavita/config \
-p 5000 :5000 \
--restart unless-stopped \
kizaing/kavita:latest
리버스 프록시 설정 (Nginx)
server {
listen 443 ssl ;
server_name kavita.example.com ;
ssl_certificate /etc/letsencrypt/live/kavita.example.com/fullchain.pem ;
ssl_certificate_key /etc/letsencrypt/live/kavita.example.com/privkey.pem ;
location / {
proxy_pass http://localhost:5000 ;
proxy_http_version 1 .1 ;
proxy_set_header Upgrade $http_upgrade ;
proxy_set_header Connection "upgrade" ;
proxy_set_header Host $host ;
}
}
공통 보안 설정 가이드
방화벽 규칙 : sudo ufw allow [포트번호]/tcp
인증서 갱신 : Certbot 자동 갱신 설정
sudo certbot renew --pre-hook "systemctl stop nginx" --post-hook "systemctl start nginx"
접근 제어 : IP 화이트리스트 설정
allow 192 .168.1.0/24 ;
deny all ;
문제 해결 체크리스트
컨테이너 로그 확인: docker logs [컨테이너명]
포트 개방 상태 확인: sudo ss -tulwn | grep [포트번호]
인증서 권한 확인: ls -l [인증서경로]
SELinux/AppArmor 정책 점검