본문 바로가기

AI Insights & Innovations

최신 인공지능 기술과 트렌드를 탐색하는 전문 블로그

SYLOLOGY/WEBSTATION

시놀로지 NAS에서 Docker Compose를 활용한 웹 스테이션 구축하기

by dma-ai 2025. 3. 9.
728x90

시놀로지 NAS에서 Docker Compose를 활용한 웹 스테이션 구축하기

안녕하세요! 오늘은 시놀로지 NAS에서 Docker Compose를 활용하여 웹 서버 환경을 구축하는 방법을 상세히 알아보겠습니다. 이 가이드를 따라하시면 Nginx, PHP, MySQL, phpMyAdmin이 포함된 완전한 웹 호스팅 환경을 손쉽게 구축할 수 있습니다.

목차

  1. 준비사항
  2. Docker Compose 파일 작성하기
  3. 디렉토리 구조 생성하기
  4. 기본 설정 파일 준비하기
  5. Docker Compose 실행하기
  6. 웹 스테이션 접속 및 확인하기
  7. 문제 해결 및 팁
  8. 보안 강화하기

준비사항

시작하기 전에 다음 항목들이 준비되어 있는지 확인하세요:

  1. Docker 패키지가 설치된 시놀로지 NAS: 시놀로지 패키지 센터에서 Docker 패키지를 설치합니다.
  2. SSH 접속 활성화: 컨트롤 패널 > 터미널 및 SNMP에서 SSH 서비스를 활성화합니다.
  3. 관리자 권한: 관리자 계정으로 로그인되어 있어야 합니다.

Docker Compose 파일 작성하기

먼저 Docker Compose 파일을 작성해 보겠습니다. 이 파일은 여러 컨테이너를 한 번에 관리할 수 있게 해주는 설정 파일입니다.

  1. SSH를 통해 시놀로지 NAS에 접속합니다.
  2. ssh 사용자이름@시놀로지IP주소
  3. 작업 디렉토리를 생성하고 이동합니다.
  4. mkdir -p /volume1/docker/webstation cd /volume1/docker/webstation
  5. 텍스트 에디터로 docker-compose.yml 파일을 생성합니다.
  6. nano docker-compose.yml
  7. 아래 내용을 복사하여 붙여넣습니다:

synology-docker-compose.txt
0.00MB

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 부분을 보안이 강화된 값으로 변경하세요.

  1. 파일을 저장하고 편집기를 종료합니다. (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 옵션은 백그라운드에서 서비스를 실행하도록 합니다.

웹 스테이션 접속 및 확인하기

이제 모든 서비스가 실행되었으니 다음과 같이 접속해서 확인할 수 있습니다:

  1. 웹 사이트 접속:
    • 브라우저에서 http://시놀로지IP주소 접속
  2. 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을 생성하여 커스텀 이미지를 빌드할 수 있습니다:

  1. php/Dockerfile 생성:
mkdir -p php
nano php/Dockerfile
  1. 다음 내용을 추가:
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
  1. Docker Compose 파일에서 php 서비스 부분을 수정:
php:
  build: ./php
  container_name: webstation_php
  volumes:
    - ./html:/var/www/html
  restart: always
  networks:
    - web_network
  1. 변경 사항 적용:
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에서 웹 스테이션을 구축하는 데 도움이 되었기를 바랍니다. 추가 질문이나 개선 사항이 있으면 댓글로 알려주세요!


참고: 이 블로그 포스트는 교육 목적으로 작성되었습니다. 실제 운영 환경에서 사용하기 전에 보안 설정을 추가로 검토하고 적용하는 것을 권장합니다.

728x90