안녕하세요. 경민나스입니다. 제가 GPT통해서 완성하고 현재 사용하는 워드프레스 스크립트를 초급 입문자 분들에게 공유합니다.
워드프레스를 설치할 때, Redis와 MariaDB, 그리고 PostgreSQL까지 함께 구성하는 이유는 다음과 같습니다.
- 워드프레스는 기본적으로 글, 설정, 계정 정보 등을 저장할 데이터베이스(DB)가 필요합니다. 저는 MariaDB을 기준으로 진행하겠습니다.
- Redis는 워드프레스가 데이터베이스에서 정보를 읽고 쓰는 과정 중 일부를 캐싱해서, 속도를 빠르게 만들어주는 보조 역할을 합니다.
필수 구성 요소는 아니지만, 성능을 신경 쓰신다면 함께 쓰면 좋은 조합입니다. - PostgreSQL은 WPForms 같은 폼 플러그인(설문, 접수, 문의 메일폼 등)을 조금 더 확장성 있게 활용하고 싶은 분들을 위한 또 다른 데이터베이스입니다.
워드프레스 설치에 꼭 필요한 DB는 아니라서 선택 사항이지만, 설치 용량도 가볍고 부담이 적기 때문에 “설치하는 김에 같이 세팅해 두면 좋은 옵션” 정도로 보시면 됩니다.
그럼, 시작하겠습니다.
■ 1단계 : 설치 공간 준비하기
SSH로 NAS에 접속한 뒤 sudo -i로 root 권한으로 전환하고, 아래 스크립트를 실행합니다. ( 아래 Copy 하셔서 SSH에 복붙하시면 됩니다. )
#!/bin/sh
set -eu
BASE="/volume1/docker/wordpress"
TARGET="$BASE/8081"
# 1) 폴더 한꺼번에 생성(있으면 그대로)
mkdir -p "$TARGET/data" "$TARGET/mariadb" "$TARGET/postgres" "$TARGET/redis"
# 2) 권한 부여
chmod -R 777 "$BASE"
# 3) 결과 확인(선택)
ls -al "$TARGET"
( ※ wordpress 폴더에 777 권한을 부여하지 않으면 워드프레스 환경설정 파일인 wp-config.php를 수정할 때 권한 문제로 막혀 수정이 되지 않습니다. )
/volume1/docker/wordpress/8081 경로 아래에 data, mariadb, postgres, redis 폴더가 생성됩니다.

저는 워드프레스를 여러개를 운영하면서 워드프레스의 구분을 빨간화살표처럼 8081, 8082, 8083 처럼 포트번호로 구분하고 있습니다.
단일 워드프레스를 운영하시거나, 다른 폴더로 구분하시려면 위에 TARGET=”$BASE/8081″ 에서 “8081”을 삭제하시거나 다른 이름으로 수정하셔도 됩니다.
■ 2단계 : htaccess, uploads.ini 만들기
설치 된 워드프레스는 파일, 플러그인, 테마 등의 업로드 제한이 걸려있습니다.
sudo mkdir -p /volume1/docker/wordpress/8081/data && sudo tee /volume1/docker/wordpress/8081/data/htaccess >/dev/null <<'EOF'
php_value upload_max_filesize 512M
php_value post_max_size 512M
php_value memory_limit 512M
php_value max_execution_time 300
php_value max_input_time 300
# BEGIN WordPress
# "BEGIN WordPress"와 "END WordPress" 사이의 지시문(줄)은
# 동적으로 생성되며 워드프레스 필터를 통해서만 수정해야합니다.
# 이 표시 사이의 지시문을 변경하면 덮어쓰게 됩니다.
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>
# END WordPress
EOF
ls -l /volume1/docker/wordpress/8081/data/uploads.ini
cat /volume1/docker/wordpress/8081/data/uploads.ini
■ 2단계 : 빌드 업 하기
DSM에서의 설치는 Container Manager와 Portainer를 기준으로 설치하는 과정을 보여드리겠습니다. ( ※ 둘 중에 하나 편한 방법으로 선택하시면 되겠습니다. )
version: '3.9'
services:
wordpress:
image: wordpress:latest
container_name: WordPress-8081
hostname: wordpress
depends_on:
- db
- redis
- phpmyadmin
ports:
- "8081:80"
volumes:
# 워드프레스 코드 + 업로드 데이터
- /volume1/docker/wordpress/8081/data:/var/www/html:rw
# PHP 업로드 제한 설정
- /volume1/docker/wordpress/8081/data/uploads.ini:/usr/local/etc/php/conf.d/uploads.ini:rw
environment:
WORDPRESS_DB_HOST: WordPress-DB-8081:3306
WORDPRESS_DB_USER: wordpress_user_8081
WORDPRESS_DB_PASSWORD: wordpress@8081
WORDPRESS_DB_NAME: wordpress_name_8081
# 👉 여기부터는 Redis 캐시 설정 (wp-config.php 안에 자동으로 추가됨)
WORDPRESS_CONFIG_EXTRA: |
define('WP_REDIS_HOST', 'redis');
define('WP_REDIS_PORT', 6379);
define('WP_REDIS_DATABASE', 0);
define('WP_REDIS_TIMEOUT', 1);
define('WP_REDIS_READ_TIMEOUT', 1);
define('WP_CACHE_KEY_SALT', 'wp8081_');
define('WP_CACHE', true);
restart: on-failure:5
# (선택) 나중에 네트워크 분리하고 싶으면 networks: 에 wp-net 추가
db:
image: mariadb:latest # LTS 이미지 사용 권장
container_name: WordPress-DB-8081
hostname: db
security_opt:
- no-new-privileges:true
environment:
MYSQL_DATABASE: wordpress_name_8081
MYSQL_USER: wordpress_user_8081
MYSQL_PASSWORD: wordpress@8081
MYSQL_ROOT_PASSWORD: rootpass
TZ: Asia/Seoul
volumes:
- /volume1/docker/wordpress/8081/mariadb:/var/lib/mysql:rw
restart: on-failure:5
redis:
image: redis:latest
hostname: wordpress-redis
container_name: WordPress-REDIS-8081
# Synology 권한 맞춰서 쓰고 있으면 유지
# user: "1026:100"
command: ["redis-server", "--save", "60", "1", "--loglevel", "warning"]
healthcheck:
test: ["CMD-SHELL", "redis-cli ping || exit 1"]
interval: 10s
timeout: 3s
retries: 5
volumes:
- /volume1/docker/wordpress/8081/redis:/data:rw
environment:
TZ: Asia/Seoul
restart: on-failure:5
phpmyadmin:
image: phpmyadmin:latest
container_name: WordPress-phpMyAdmin-8081
hostname: wordpress-phpmyadmin
ports:
- "2500:80"
environment:
PMA_HOST: db # db 서비스의 hostname과 맞추기
PMA_PORT: 3306
restart: on-failure:5
postgres:
image: postgres:16
container_name: WordPress-Postgres-8081
hostname: wordpress-postgres
environment:
POSTGRES_DB: extra_service_db
POSTGRES_USER: extra_user
POSTGRES_PASSWORD: strong_password_here
TZ: Asia/Seoul
volumes:
- /volume1/docker/wordpress/8081/postgres:/var/lib/postgresql/data:rw
restart: on-failure:5