시놀로지 NAS에서 Docker Compose를 활용한 웹 스테이션 구축하기
안녕하세요! 오늘은 시놀로지 NAS에서 Docker Compose를 활용하여 웹 서버 환경을 구축하는 방법을 상세히 알아보겠습니다. 이 가이드를 따라하시면 Nginx, PHP, MySQL, phpMyAdmin이 포함된 완전한 웹 호스팅 환경을 손쉽게 구축할 수 있습니다.
목차
- 준비사항
- Docker Compose 파일 작성하기
- 디렉토리 구조 생성하기
- 기본 설정 파일 준비하기
- Docker Compose 실행하기
- 웹 스테이션 접속 및 확인하기
- 문제 해결 및 팁
- 보안 강화하기
준비사항
시작하기 전에 다음 항목들이 준비되어 있는지 확인하세요:
- Docker 패키지가 설치된 시놀로지 NAS: 시놀로지 패키지 센터에서 Docker 패키지를 설치합니다.
- SSH 접속 활성화: 컨트롤 패널 > 터미널 및 SNMP에서 SSH 서비스를 활성화합니다.
- 관리자 권한: 관리자 계정으로 로그인되어 있어야 합니다.
Docker Compose 파일 작성하기
먼저 Docker Compose 파일을 작성해 보겠습니다. 이 파일은 여러 컨테이너를 한 번에 관리할 수 있게 해주는 설정 파일입니다.
- SSH를 통해 시놀로지 NAS에 접속합니다.
- ssh 사용자이름@시놀로지IP주소
- 작업 디렉토리를 생성하고 이동합니다.
- mkdir -p /volume1/docker/webstation cd /volume1/docker/webstation
- 텍스트 에디터로 docker-compose.yml 파일을 생성합니다.
- nano docker-compose.yml
- 아래 내용을 복사하여 붙여넣습니다:
version: '3' # Docker Compose 파일 형식 버전
services:
# Nginx 웹 서버 설정
# 정적 파일 제공 및 PHP-FPM으로 PHP 요청 프록시
nginx:
image: nginx:latest # 최신 Nginx 이미지 사용
container_name: webstation # 컨테이너 이름 설정
ports:
- "80:80" # HTTP 포트 매핑 (호스트:컨테이너)
- "443:443" # HTTPS 포트 매핑 (SSL/TLS)
volumes:
- ./html:/usr/share/nginx/html # 웹 사이트 파일 저장 위치
- ./nginx/conf:/etc/nginx/conf.d # Nginx 설정 파일 위치
- ./nginx/certs:/etc/nginx/certs # SSL 인증서 저장 위치
- ./logs:/var/log/nginx # Nginx 로그 파일 저장 위치
restart: always # 시스템 재시작 시 자동으로 컨테이너 재시작
networks:
- web_network # 웹 네트워크에 연결
# PHP 처리를 위한 PHP-FPM 서비스
# PHP 스크립트 실행을 담당
php:
image: php:8.1-fpm # PHP 8.1 FPM 이미지 사용
container_name: webstation_php # 컨테이너 이름 설정
volumes:
- ./html:/var/www/html # PHP 파일 위치 (Nginx와 동일한 볼륨 사용)
restart: always # 시스템 재시작 시 자동으로 컨테이너 재시작
networks:
- web_network # 웹 네트워크에 연결
# MySQL 데이터베이스 서버
# 웹 애플리케이션의 데이터 저장소
mysql:
image: mysql:8.0 # MySQL 8.0 이미지 사용
container_name: webstation_db # 컨테이너 이름 설정
environment:
# MySQL 환경 변수 설정
MYSQL_ROOT_PASSWORD: your_root_password # root 사용자 비밀번호 (보안을 위해 변경 필요)
MYSQL_DATABASE: your_database # 생성할 데이터베이스 이름
MYSQL_USER: your_user # 새 사용자 생성
MYSQL_PASSWORD: your_password # 새 사용자 비밀번호 (보안을 위해 변경 필요)
volumes:
- ./mysql/data:/var/lib/mysql # MySQL 데이터 저장 위치 (영구 저장)
- ./mysql/init:/docker-entrypoint-initdb.d # 초기화 SQL 스크립트 위치
restart: always # 시스템 재시작 시 자동으로 컨테이너 재시작
networks:
- web_network # 웹 네트워크에 연결
ports:
- "3306:3306" # MySQL 포트 매핑 (필요한 경우 외부 접속용)
# phpMyAdmin - MySQL 데이터베이스 관리 웹 인터페이스
# 데이터베이스 관리를 위한 GUI 제공
phpmyadmin:
image: phpmyadmin/phpmyadmin # 공식 phpMyAdmin 이미지 사용
container_name: webstation_phpmyadmin # 컨테이너 이름 설정
environment:
PMA_HOST: mysql # MySQL 서비스 연결 (서비스 이름 사용)
PMA_PORT: 3306 # MySQL 포트
MYSQL_ROOT_PASSWORD: your_root_password # MySQL root 비밀번호 (위와 동일하게 설정)
ports:
- "8080:80" # phpMyAdmin 웹 인터페이스 포트 (8080으로 접속)
networks:
- web_network # 웹 네트워크에 연결
restart: always # 시스템 재시작 시 자동으로 컨테이너 재시작
depends_on:
- mysql # MySQL 서비스가 먼저 시작된 후에 시작
# 네트워크 설정
# 컨테이너 간 통신을 위한 브릿지 네트워크 정의
networks:
web_network:
driver: bridge # 브릿지 네트워크 드라이버 사용 (기본값)
중요: 실제 사용 시 반드시 your_root_password, your_database, your_user, your_password 부분을 보안이 강화된 값으로 변경하세요.
- 파일을 저장하고 편집기를 종료합니다. (nano의 경우 Ctrl+O, Enter, Ctrl+X)
디렉토리 구조 생성하기
Docker Compose 파일에서 지정한 볼륨을 위한 디렉토리 구조를 생성합니다:
mkdir -p html nginx/conf nginx/certs logs mysql/data mysql/init
기본 설정 파일 준비하기
1. Nginx 기본 설정 파일 생성하기
nano nginx/conf/default.conf
다음 내용을 붙여넣습니다:
server {
listen 80;
server_name localhost;
root /usr/share/nginx/html;
index index.php index.html index.htm;
location / {
try_files $uri $uri/ /index.php?$query_string;
}
# PHP-FPM 설정
location ~ \.php$ {
fastcgi_pass php:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME /var/www/html$fastcgi_script_name;
include fastcgi_params;
}
}
2. 테스트용 PHP 파일 생성하기
nano html/index.php
다음 내용을 붙여넣습니다:
<?php
phpinfo();
?>
또한 간단한 HTML 테스트 파일도 생성해 보겠습니다:
nano html/index.html
다음 내용을 붙여넣습니다:
<!DOCTYPE html>
<html>
<head>
<title>시놀로지 Docker 웹 스테이션</title>
<style>
body {
font-family: Arial, sans-serif;
margin: 40px;
line-height: 1.6;
}
h1 {
color: #2c3e50;
}
</style>
</head>
<body>
<h1>시놀로지 Docker 웹 스테이션이 정상 작동 중입니다!</h1>
<p>Docker Compose로 구성된 웹 서버 환경이 성공적으로 설치되었습니다.</p>
<p>현재 설치된 구성요소:</p>
<ul>
<li>Nginx 웹 서버</li>
<li>PHP-FPM (PHP 8.1)</li>
<li>MySQL 8.0 데이터베이스</li>
<li>phpMyAdmin</li>
</ul>
<p>PHP 작동 테스트를 보려면 <a href="index.php">여기</a>를 클릭하세요.</p>
</body>
</html>
Docker Compose 실행하기
모든 준비가 완료되었으면 Docker Compose를 실행하여 모든 서비스를 시작합니다:
cd /volume1/docker/webstation
docker-compose up -d
-d 옵션은 백그라운드에서 서비스를 실행하도록 합니다.
웹 스테이션 접속 및 확인하기
이제 모든 서비스가 실행되었으니 다음과 같이 접속해서 확인할 수 있습니다:
- 웹 사이트 접속:
- 브라우저에서 http://시놀로지IP주소 접속
- phpMyAdmin 접속:
- 브라우저에서 http://시놀로지IP주소:8080 접속
- 사용자 이름: root
- 비밀번호: Docker Compose 파일에서 설정한 your_root_password
문제 해결 및 팁
로그 확인하기
서비스에 문제가 있을 경우 로그를 확인할 수 있습니다:
# 모든 서비스의 로그 확인
docker-compose logs
# 특정 서비스의 로그 확인 (예: nginx)
docker-compose logs nginx
컨테이너 상태 확인하기
docker-compose ps
서비스 재시작하기
# 모든 서비스 재시작
docker-compose restart
# 특정 서비스 재시작 (예: nginx)
docker-compose restart nginx
PHP 확장 모듈 추가하기
기본 PHP 이미지에는 일부 확장 모듈이 포함되어 있지 않습니다. 필요한 경우 Dockerfile을 생성하여 커스텀 이미지를 빌드할 수 있습니다:
- php/Dockerfile 생성:
mkdir -p php
nano php/Dockerfile
- 다음 내용을 추가:
FROM php:8.1-fpm
# 필요한 PHP 확장 설치
RUN apt-get update && apt-get install -y \
libzip-dev \
zip \
&& docker-php-ext-install zip mysqli pdo pdo_mysql
# 필요에 따라 더 많은 확장 추가 가능
# RUN docker-php-ext-install gd exif
# OPcache 설치 (성능 향상)
RUN docker-php-ext-install opcache
- Docker Compose 파일에서 php 서비스 부분을 수정:
php:
build: ./php
container_name: webstation_php
volumes:
- ./html:/var/www/html
restart: always
networks:
- web_network
- 변경 사항 적용:
docker-compose up -d --build
보안 강화하기
1. 비밀번호 변경하기
실제 운영 환경에서는 반드시 Docker Compose 파일의 모든 비밀번호를 강력한 비밀번호로 변경하세요.
2. HTTPS 설정하기
Let's Encrypt를 사용하여 무료 SSL 인증서를 발급받아 HTTPS를 설정할 수 있습니다. 이를 위해 certbot 컨테이너를 추가하는 것이 좋습니다.
3. 포트 노출 제한하기
필요하지 않은 경우 외부로 노출되는 포트를 제한하세요. 예를 들어, 개발 환경에서만 MySQL 포트(3306)를 노출하고, 실제 운영 환경에서는 해당 포트 매핑을 제거할 수 있습니다.
4. 데이터베이스 백업 자동화하기
중요한 데이터를 보호하기 위해 MySQL 데이터베이스 백업을 자동화하는 것이 좋습니다. 시놀로지의 작업 스케줄러를 사용하여 정기적인 백업 스크립트를 실행할 수 있습니다.
결론
이제 시놀로지 NAS에서 Docker Compose를 사용하여 완전한 웹 호스팅 환경을 구축하는 방법을 알게 되었습니다. 이 설정을 기반으로 WordPress, Drupal, Laravel 등 다양한 웹 애플리케이션을 호스팅할 수 있습니다.
Docker의 장점은 격리된 환경에서 각 서비스를 실행하여 보안과 유지 관리가 용이하다는 점입니다. 또한 시놀로지 NAS의 저전력 특성 덕분에 24시간 운영하더라도 전력 소비가 매우 적습니다.
이 가이드가 여러분의 시놀로지 NAS에서 웹 스테이션을 구축하는 데 도움이 되었기를 바랍니다. 추가 질문이나 개선 사항이 있으면 댓글로 알려주세요!
참고: 이 블로그 포스트는 교육 목적으로 작성되었습니다. 실제 운영 환경에서 사용하기 전에 보안 설정을 추가로 검토하고 적용하는 것을 권장합니다.
'SYLOLOGY > WEBSTATION' 카테고리의 다른 글
시놀로지 웹스테이션에서 도커로 웹서비스 구축하기 (0) | 2025.03.09 |
---|---|
시놀로지 WebStation에서 홈페이지 만들고 구글 계정으로 로그인하기 (2) | 2025.03.07 |
시놀로지 NAS에 역방향 프록시 설정하기 (0) | 2025.03.06 |
SYNOLOGY WEBSTATION 을 이용하여 홈페이지 만들기 (0) | 2025.03.06 |