Skip to content

워드프레스 설치하면서 배우는 도커

간만입니다. 개인적으로, 이러저런 벌려둔 일들이 많은데 수습을 못하고 있는 중이라 이런 글 써놓고 후속 관리가 되려나 싶지만 틈틈히 글은 써놨고 더 늦으면 주목-관종인가?-을 받지 못할 것 같아 공개합니다. ㅋ

요즘 도커 쓰시는 분들이 많을텐데요. 소식을 접하고 본격적으로 써보고 싶지만 읽을 글들은 많고, 개념은 잘 안 잡히고, 하나 둘 서비스를 설치해서 잘 돌리고는 있지만 가끔 뭔가 불안한 분들을 위한 글입니다.

이 글은 Debian 10, OpenMediaVault 5 운영 체제에 Docker 19.03.4와 Portainer를 설치한 상태에서 작성하고 있습니다. 데비안, OMV, Docker, Portainer 설치 방법은 따로 설명하지 않겠습니다.

OMV → System → OMV-Extras의 Settings 스크린샷

중요: 모든 설치는 SSH root(su - 또는 sudo su) 상태에서 실행합니다. 이유는 이게 제일 간단하기 때문입니다.

무엇을 할 것인가

워드프레스 사이트 하나를 만드는 과정을 통해서 도커 작업 흐름을 보여드릴 것입니다. 단순히 워드프레스를 실행하는 것이 아니라 프록시 서비스를 돌리고, SSL 인증서를 받아 https를 활성화하고, 뛰어난 캐시 서비스를 도입해서 워드프레스 성능을 높이는 과정을 포함하고 있습니다. 다 마치면 집 서버로 멋진 워드프레스 블로그를 운영하실 수 있을겁니다. 도커가 설치되어 있고 Portainer가 실행되고 있다면 따로 준비할 것은 도메인입니다. 네임서버를 설정할 수 있는 개인 도메인이 없다면 무료 도메인 하나 만드시길. 개인적으로, Duck DNS 추천합니다. 아, 공유기에서 도메인을 제공한다면 그거 이용하셔도 됩니다.

시작합니다.

설치 환경

설치를 수행할 서버의 내부 IP 주소는 192.168.0.109입니다.

root@venus:/home/kodi# hostname -I
192.168.0.109 172.17.0.1 172.21.0.1 

데이터베이스 설치

먼저 MariaDB, WordPress, Phpmyadmin, Redis 등등의 서버를 배포할 wordpress-tier라는 도커 네트워크를 만듭니다. 동일한 도커 네트워크 계층에 속한 도커들은 이름만으로 통신이 가능합니다. 아래 명령으로 wordpress-tier 도커 네트워크를 만듭니다.

docker network create wordpress-tier

데이터베이스 서버로, MaridDB를 설치합니다. 공식 이미지 대신, 최적화되어 있다고 알려진 bitnami/mariadb – Docker Hub 이미지를 사용합니다. 도커 이미지를 받기 전에 mariadb_data라는 도커 볼륨을 만듭니다. 앞으로 일관되게, <docker-name>_data라는 형식으로 도커 볼륨을 만들어 사용할 것인데, 이렇게 하면 전체 경로를 지정할 필요 없이 이름으로 저장 위치를 매핑할 수 있어 편리하고 이후 관리가 쉽습니다. 이렇게 만들어지는 도커 볼륨은 <도커 저장소 위치>/volumes 아래에 있습니다.

docker volume create --name mariadb_data

이제 mariadb라는 이름으로 MariaDB 데이터베이스 서버 컨테이너를 생성하고 실행합니다. 먼저 아래 docker run 명령을 살펴보세요.

docker run -d --name mariadb \
 -e MARIADB_ROOT_PASSWORD=<change me> \
 -e MARIADB_USER=<change me> \
 -e MARIADB_PASSWORD=<change me> \
 --net wordpress-tier \
 --volume mariadb_data:/bitnami \
 bitnami/mariadb:latest
  • MARIADB_ROOT_PASSWORD는 데이터베이스 서버를 관리하는 root 사용자의 암호를 지정합니다. <change me>를 원하는 값으로 수정하세요(예: root08).
  • MARIADB_USER, MARIADB_PASSWORD – 워드프레스 데이터베이스의 사용자 이름/암호 이름입니다. 원하는 이름으로 수정하세요(예: user와, pass09db_nova).
  • --net wordpress-tier--volume mariadb_data:/bitnami에서 앞서 만든 도커 네트워크와 토커 저장소 이름을 사용한 예를 볼 수 있습니다.

저는 아래와 같이 실행했습니다. (다시 이야기하지만, 이후의 모든 명령 예는 슈퍼유저 상태에서 입력하기 때문에 sudo가 없습니다.)

docker run -d --name mariadb \
 -e MARIADB_ROOT_PASSWORD=root08 \
 -e MARIADB_USER=user \
 -e MARIADB_PASSWORD=pass09 \
 --net wordpress-tier \
 --volume mariadb_data:/bitnami \
 bitnami/mariadb:latest

이미지를 가져오고 컨테이너를 만들어 실행하는 과정이 잘 실행되면 이제 Portainer에서 몇 가지를 확인을 해 보겠습니다.

Portainer에서 상태 확인

이 툴을 대개 기본적으로 설치하지만 활용을 잘 안 하시는 것 같습니다. Portainer를 이용하면 매우 간편하게 컨테이너의 상태를 확인할 수 있습니다. Portainer를 Containers 패널을 열면 방금 전에 생성하여 실행한 mariadb 컨테이너가 running 상태로 표시되는 것을 알 수 있습니다.

portainer 이미지

Name 열에서 mariadb를 클릭하세요. 아래와 같은 세부 정보 화면이 나타납니다.

Container details of mariadb

Actions 섹션에 있는 단추들을 사용하면 컨테이너를 관리할 수 있습니다.
Container status 섹션을 아래에 Logs, Inspect, Stats, _ Console 링크가 있습니다. 이 링크를 사용해 컨테이너의 로그와 상태를 보고 컨테이너 내부 콘솔에 접속할 수 있습니다. 이 링크를 꼭 기억하세요.
Container details 섹션을 보면 실행할 때 준 인수들로 환경 변수가 설정된 것을 확인할 수 있습니다.
Restart policies는 컨테이너를 다시 시작하는 시점을 지정합니다. 대개 Unless Stopped를 사용합니다.

다른 정보들도 살펴보고 맨 위에 있는 Containers → mariadb 링크에서 Containers를 클릭해 컨테이너 목록 화면으로 돌아갑니다.

portainer 이미지

Quick actions 열를 보면 아이콘 4개가 있습니다. 앞서 설명한 컨테이너 세부 정보 화면의 Logs, Inspect, Stats, _ Console 링크입니다. mariadb 행에서 _ Console 링크를 클릭해 보세요.

콘솔

Connect 단추를 클릭하면 mariadb 컨테이너 내부의 bash 셸에 root 사용자로 연결할 수 있습니다.

컨테이너 내부 콘솔

내부 콘솔에 접속해서 mysql에 연결해 데이터베이스를 확인해봤습니다. 도커 컨테이너로 작업할 때 가끔 콘솔 연결이 필요한데 Portainer가 있으면 이렇게 쉽게 컨테이너에 연결할 수 있습니다.

Adminer 설치

이제 겨우 mariadb 하나 설치했네요. 잡설은 줄이고 본격적으로 진행해 보도록 하겠습니다.

mariadb를 콘솔로 관리하는 것도 좋겠지만 웹 UI를 설치하는 것이 여러모로 편리합니다. 이 방면으로 유명한 것은 phpmyadmin이지만 여기에서는 먼저 adminer를 설치합니다. 이게 더 이쁘기도 하고 다음에 phpmyadming을 설치하면서 살펴 볼 것이 하나 있기 때문입니다. 아래와 같이 설치합니다.

docker run -d --name adminer \
 -p 7080:8080 \
 --link mariadb:db \
 --net wordpress-tier \
 -e ADMINER_DESIGN=nette \
 adminer
  • --link mariadb:db – 이 구문은 mariadb라는 호스트를 내부의 db 호스트에 연결한다는 의미입니다. adminer 내부에서 응용 프로그램을 설정할 때 데이터베이스 호스트의 이름을 db로 정했다라는 뜻이기도 합니다.
  • 7080 – 이미 사용되고 있다면 다른 포트로 변경하셔야 합니다.
  • -e ADMINER_DESIGN=nette – adminer 스킨을 지정하는 부분입니다. nette 스킨을 가장 많이 사용합니다.

설치 & 실행이 완료되면 http://host-ip:7070으로 접속해 보세요. 아래와 같은 화면이 나타납니다(상단에서 언어한국어로 바꿈).

adminer

로그인에서 입력할 정보는 쉽게 알 수 있습니다. 여기서 서버는 데이터베이스 서버의 이름 또는 주소입니다. db가 기본값이고 컨테이너 생성 과정에서 mariadbdb에 연결했습니다. 그래서 서버mariadb를 입력합니다. 사용자 이름과 비밀번호는 mariadb 서버의 관리 사용자, 즉 root와 해당 비밀번호 root08을 사용합니다.

로그인 단추를 클릭하면 연결되어 아래와 같이 데이터베이스가 표시되어야 합니다.

연결된 데이터베이스 화면

Portainer로 돌아가 컨테이너에서 방금 전에 만든 adminer 컨테이너 옆의 콘솔 단추를 클릭하고 /bin/sh로 연결해 보세요. 그리고 아래와 같이 명령 몇 개를 입력합니다.

도커 네트워크 예

몇 가지 사실을 알 수 있습니다. mariadb라는 이름이 인식된다는 것과 주소가 172.21.0.2라는 것, adminer가 실행되고 있는 컨테이너의 주소가 172.21.0.3이라는 것 말이죠. 물론 이 정보는 Portainer 컨테이너 화면에서도 알 수 있습니다. 아래 이미지에서 IP Address 열을 살펴보세요. 172.17.0.x 네트워크와 172.21.0.x 네트워크가 있다는 것을 알 수 있습니다. 172.17.0.x 네트워크는 --net 명령으로 따로 지정하지 않으면 할당되는 기본 네트워크입니다. 172.21.0.x 네트워크가 바로 wordpress-tier인거죠.

그럼 기본 네트워크에서 mariadb 서버가 인식될까요? 아래 이미지를 보시죠.

서로 다른 내부 네트워크의 예

기본 네트워크에 속한 컨테이너의 콘솔에서 mariadb라는 호스트 이름은 해결되지 않는다는 것을 알 수 있습니다. 서로 다른 네트워크에 속한 컨테이너들은 이름이 아닌 도커 내부 IP 주소를 사용해야 서로 연결할 수 있습니다. 복잡할 수도 있지만, 이 차이를 꼭 인식하시길. 이 지식이 필요한 순간이 꼭 옵니다.

PhpMyAdmin

이제 bitnami/phpmyadmin – Docker Hub 컨테이너를 실행해 봅시다. 도커 허브 페이지에서 환경 변수 섹션을 살펴보세요. Adminer 이미지와 달리 다양한 환경 변수를 설정할 수 있다는 것을 알 수 있습니다.

PHPMYADMIN_ALLOW_ARBITRARY_SERVERfalse로 둡니다. 즉, DATABASE_HOST에 지정된 이름을 사용한다는 의미죠. 이 이름의 기본값은 mariadb이고 이미 우리 데이터베이스 서버 이름은 mariadb입니다. 바꿀 필요가 없죠. 환경 변수의 의미를 이해하면 훨씬 자신 있게 도커를 실행할 수 있습니다. phymyadmin 환경 변수 중에 이해 안 되는 것이 있으신가요?

저는 간단히 아래와 같이 컨테이너를 생성하고 실행했습니다.

docker volume create --name phpmyadmin_data
docker run -d --name phpmyadmin -p 4580:80 -p 4543:443 \
  --net wordpress-tier \
  --volume phpmyadmin_data:/bitnami \
  bitnami/phpmyadmin:latest

아래 화면을 볼 수 있다는 잘 따라오신 겁니다.

phpmyadmin 예제 화면

WordPress 설치

이제야 겨우 워드프레스 설치 과정에 이르렀네요. 워드프레스 설치 경험이 없거나, 시간이 있으시다면 내 컴퓨터에 워드프레스 설치하기 | WordPress.org 한국어 페이지를 쭉 읽어보시기 바랍니다. 도커는 설치 과정을 단순화해주지만 결국 사용하려는 응용 프로그램에 대한 지식은 필요합니다. 어떤 과정을 거쳐 설치하는지 머리에 익혀 두시면 도커가 무엇을 간소화하는지 알 수 있습니다.

먼저 워드프레스에서 사용할 데이터베이스와 데이터베이스 사용자를 MariaDB에서 만들어야 합니다. WEBDIR :: 워드프레스 준비물 – DB 생성에 나와 있는 것처럼 여러 방법으로 만들 수 있습니다. 주의할 것은 도커 환경은 localhost가 아니므로 모두 IP를 허용하는 %을 사용해야 한다는 것입니다. 저는 MariaDB 컨테이너 콘솔에서 아래와 같이 직접 생성했습니다.

mysql -u root -proot08

MariaDB [(none)]> create database wp_nova;
MariaDB [(none)]> grant all privileges on wp_nova.* to nova@'%' identified by 'nova01' with grant option;
MariaDB [(none)]> flush privileges;
MariaDB [(none)]> quit

mysql 콘솔 명령 예

워드프레스 설치에 사용할 이미지는 bitnami/wordpress – Docker Hub입니다. 도커 허브 페이지에서 환경 변수 섹션을 살펴보세요. 저는 아래와 같이 설정하고 컨테이너를 만들 것입니다. 이해가 안 되는 환경 변수가 있다면 워드프레스 설치 과정 문서들을 꼼꼼이 읽어보십시오.

docker volume create --name wordpress_data
docker run -d --name wordpress -p 6080:80 -p 6443:443 \
 -e WORDPRESS_USERNAME=nova \
 -e WORDPRESS_PASSWORD=pass01 \
 -e WORDPRESS_EMAIL=nova@eddylab.co.kr \
 -e WORDPRESS_DATABASE_USER=nova \
 -e WORDPRESS_DATABASE_PASSWORD=nova01 \
 -e WORDPRESS_DATABASE_NAME=wp_nova \
 -e WORDPRESS_SCHEME=https \
 --net wordpress-tier \
 --volume wordpress_data:/bitnami \
 bitnami/wordpress:latest

워드프레스 도커는 실행에 시간이 좀 걸립니다. Portainer 컨테이너 화면으로 이동하여 방금 전에 만든 wordpress 컨테이너의 Logs 화면을 확인해 보시길 바랍니다.

nami    INFO  wordpress successfully initialized
INFO  ==> Starting wordpress... 

워드프레스를 시작했다는 메시지가 보이면 지정한 포트를 사용해 접속해 보세요(예: http://192.168.0.109:6080).

워드프레스 시작 화면

모든 설치가 완료되어 완성된 워드프레스 블로그가 보입니다. 이제 초기 워드프레스 관리 과정을 수행합니다.

  1. 아래로 스크롤하여 Meta 섹션에 있는 Log in 링크를 클릭하세요.
  2. 컨테이너를 만들 때 지정한 WORDPRESS_USERNAMEWORDPRESS_PASSWORD를 사용하여 로그인합니다(예: nova/pass01).
  3. 대시보드에서 왼쪽 패널의 User 를 클릭하고 User 목록에서 사용자 이름을 클릭하세요.
  4. Profile 화면에서 맨 아래 스크롤하고 New Password 옆에 있는 Generate password를 클릭하여 암호를 새로 설정하세요.

워드프레스 관리 사용자 암호를 변경했습니다. 이제 워드프레스를 사용자 지정하세요. 지침을 찾으신다면 목차 – WordPress 가이드를 추천합니다.

제가 사용자 지정한 과정을 따라해 보고 싶다면 워드프레스 사용자 지정을 참고하세요.

Nginx Proxy Manager 설치

도메인 이름을 지정해 워드프레스 블로그 두 개를 실행할 예정이기 때문에 프록시 서버가 필요합니다. 사용한 이미지는 Nginx Proxy Manager입니다.

docker volume create nginx-proxy-manager_data
docker run -d --name=nginx-proxy-manager -p 8181:8181 -p 8080:8080 -p 4443:4443 -v nginx-proxy-manager_data:/config:rw  jlesage/nginx-proxy-manager

8181은 관리 인터페이스 접속 포트이고, 8080, 4443은 각각 http, https 프로토콜에 할당된 포트입니다. http://호스트-IP:8181로 접속해 보세요. Default Administrator Account에 따르면 처음 접속할 때 admin@example.com/changeme를 사용해야 합니다. 자동으로 관리자 만들기 페이지로 연결됩니다.

잘 연결되었으면 이제 공유기 포트포워딩 메뉴에서 HTTP와 HTTPS를 Nginx Proxy Manager로 연결해줍니다.

공유기 포트포워딩

설치한 후 공유기에서 http/https를 NginX Proxy Manager 컨테이너로 리디렉션해 주어야 이후의 인증서 설정, 사이트 설정 등에서 오류가 발생하지 않습니다.

도메인 연결

미리 Duck DNS에서 nnote.duckdns.org라는 DDNS를 등록하고 집 IP로 설정되도록 스크립트를 실행했습니다.

이제 nova.nnote.duckdns.org를 방금 전에 만든 워드프레스 블로그에 연결할 것입니다. 참고로, duckdns는 xxx.duckdns.org를 등록하면 yyy.xxx.duckdns.org 형태를 사용할 수 있습니다. yyy는 아무 문자열이나 상관 없습니다. 공유기의 포트 포워딩 서비스가 특정 포트로 들어오는 신호를 내부 호스트:포트로 전달하는 서비스라면, 프록시 서비스는 도메인 이름을 내부 호스트:포트로 연결하는 서비스라고 생각하시면 됩니다.

NPM(Nginx Proxy Manager)에서 HostsProxy Hosts를 클릭하세요.

Proxy Hosts 페이지 왼쪽에 있는 [Add Proxy Host] 단추를 클릭합니다.

Details 페이지에서 아래와 같이 설정합니다.

SSL 페이지에서 아래와 같이 설정합니다.

Save를 클릭합니다.

적용되면 아래와 같은 목록이 나타납니다.

nova.nnote.duckdns.org 링크를 클릭하면 방금 전에 만든 워드프레스 블로그가 나타납니다. 주소 표시줄을 확인해보면 https로 연결된 것을 알 수 있다. 휴대폰의 와이파이를 끄고 데이터 통신으로 접속해 보세요. 이 상태에서 잘 연결되면 프록시 서버가 제대로 작동하는 것입니다(일부 공유기는 외부에서만 제대로 연결되고 내부에서 도메인을 사용할 수 없는 경우가 있음).

워드프레스 고유 주소

워드프레스 블로그에 도메인을 연결했으니 이제 워드프레스 고유주소를 설정합니다. 다음에 수행할 Redis 캐시 설정은 워드프레스 주소를 키로 사용하므로 고유주소 설정이 중요합니다. 워드프레스 알림판에서 설정고유주소 설정으로 이동합니다.

개인적으로 숫자 http://nova.nnote.duckdns.org/archives/123 형식을 좋아합니다. 원하는 형식을 선택하고 [변경 사항 저장]을 클릭합니다.

.htaccess를 업데이트하세요.라는 기분 나쁜 메시지가 상단에 뜨지만 동작은 이상 없이 됩니다. 조금 조사를 해 보니 .htaccess 관련해서 Apache 자체와 이 도커 이미지에 여러 이슈가 있더군요. bitnami 이미지로 만든 워드프레스에서 .htaccess 를 편집하려면 /opt/bitnami/wordpress/wordpress-htaccess.conf를 편집하고 컨테이너를 재시작해야 한다는 것이 제가 얻은 결론이지만, 고유 주소 관련해서는 따로 수정 없이도 동작했습니다.

이와 관련하여 더 알아보고 싶은 분은 아래 글 참고해서 후속 검색하시길.

How to edit .htaccess file to make JWT plugin work? · Issue #104 · bitnami/bitnami-docker-wordpress

아래는 터미널에서 nano를 설치하는 방법입니다.

docker exec -it wordpress bash
install_packages nano
find / -type f -regextype sed -regex ".*htaccess.*"
find / -type f -regextype sed -regex "wp-config.php"

이제 테스트도 겸해서 워드프레스에서 글 몇 개를 씁니다. 두 세 개 정도면 이후 테스트에 충분하겠네요.

Redis 캐시

워드프레스는 무거운 응용 프로그램이기 때문에 캐시를 사용하는 것이 일반적입니다. 캐시는 여러 종류인데, 지금 설치하려는 Redis 캐시는 메모리에 데이터베이스를 만들고 사용자가 워드프레스 페이지를 열 때 관련 데이터베이스 쿼리 결과를 데이터베이스에 저장하고, 후속 연결을 검사하여 예전에 (해당 사용자나 다른 사용자가) 이미 연 페이지라면 워드프레스에서 데이터베이스를 쿼리하는 단계를 생략하게 이전의 결과를 빠르게 반환하는 캐시입니다.

성능이 좋은 캐시는 nginx 프록시 기반 캐시들이지만-이건 결과 html을 캐싱해서 보여주기 때문에 훨씬 빠릅니다- 빠른만큼 단점도 있어서 저는 별로 선호하지 않습니다. 혹시 관심이 있으시다면 rija/docker-nginx-fpm-caches-wordpress: WordPress (no DB server included) running with Nginx in a Docker container with caching and encryption enabled 이걸 한 번 살펴보시길.

Redis 캐시를 사용하려면 Redis 서버를 설치하고 워드프레스에 Redis 지원 플러그인을 설치해서 활성화해야 합니다.

먼저 Redis 서버를 설치합니다.

docker volume create --name redis_data
docker run -d --name=redis \
-e REDIS_PASSWORD=pass10 \
--net wordpress-tier \
--volume redis_data:/bitnami \
-p 6379:6379 \
bitnami/redis:latest

잘 실행되고 있는지, Portainer 컨테이너 목록에서 redis 컨테이너의 Logs를 확인해 보세요.

이제 워드프레스에서 아래 단계를 수행하여 Redis 캐시를 설정합니다.

  1. 워드프레스 알림판플러그인새로 추가를 선택합니다.
  2. 플러그인 검색 입력란에 Redis Object Cache를 입력하고 Enter 키를 누르세요.
  3. 검색 결과에서 Till Krüss님이 만든 Redis Object Cache를 찾아 [지금 설치]하고 [활성화]합니다.
  4. 알림판플러그인설치된 플러그인에서 Redis Object Cache 플러그인을 찾아 해당 Settings를 클릭합니다.
  5. [Enable Object Cache] 단추를 클릭한 다음 Show Diagnostics 링크를 클릭합니다.
  6. Status: Not Connected가 나타납니다. [Disable Object Cache] 단추를 클릭합니다.

이렇게 되는 이유는, Redis 플러그인은 활성화했지만 아직 워드프레스를 Redis 서버에 연결하지 않았기 때문입니다. 이 연결을 수행하려면 워드프레스 wp-config.php 파일을 수정하여 두 환경 변수 WP_REDIS_HOSTWP_CACHE_KEY_SALT를 설정해 주어야 합니다.

wp-config.php 파일은 볼륨 데이터의 일부이므로 wordpress_data 볼륨에서 액세스할 수 있습니다.

root@venus:# pwd
/mnt/sata/docker/volumes/wordpress_data/_data/wordpress
root@venus:# ls -la
total 4
drwxr-xr-x 1 root root     88 Nov  2 12:11 .
drwxr-xr-x 1 root root     18 Nov  2 00:27 ..
-rw-r--r-- 1 root root      0 Nov  2 00:27 .initialized
-rw-r--r-- 1 root root      0 Nov  2 12:50 .restored
-rw-r----- 1 kodi daemon 3829 Nov  2 00:27 wp-config.php
drwxrwxr-x 1 kodi daemon  122 Nov  2 13:47 wp-content

파일을 편집하기 전에 워드프레스 도커를 중지하세요. 실행 중인 도커 컨테이너의 볼륨 데이터는 편집해도 컨테이너가 종료될 때 복구됩니다.

docker stop wordpress

wp-config.php 파일을 편집해 아래 세 환경 변수를 설정합니다. 위치는 // ** MySQL... 행으로 확인하세요.

define('WP_REDIS_HOST', 'redis');
define('WP_REDIS_PASSWORD', 'pass10');
define('WP_CACHE_KEY_SALT', 'wp-nova');

// ** MySQL settings - You can get this info from your web host ** //
/** The name of the database for WordPress */
define('DB_NAME', 'wordpress');

WP_REDIS_HOST는 Redis 서버 호스트 이름입니다. 같은 도커 네트워크에 속하므로 이름만으로 참조가 된다고 여러 번 설명했습니다. WP_CACHE_KEY_SALT는 한 Redis 서버에서 여러 사이트의 캐시를 만들 때 서로 구분하기 위한 키입니다. 고유한 이름을 지정하면 됩니다. (이후에 워드프레스 사이트 하나를 더 추가할 것입니다.)

파일을 편집하고 저장한 후 워드프레스 컨테이너를 다시 시작하세요.

docker start wordpress

워드프레스 알림판설정Redis로 이동하면 정보가 반영된 것을 알 수 있습니다.
[Enable Object Cache]를 선택해서 활성화하세요.

위와 같이 나오면 잘 설정된 것입니다.

Redis 캐시 작동 상태 확인

잘 설정되었다고 했지만 실제로 작동 상태를 학인하고 싶으실 겁니다.

Portainer의 redis 컨테이너 콘솔에 연결합니다. 아래 명령을 입력하세요.

redis-cli -h localhost -p 6379 -a pass10

명령 프롬프트가 나타나면 monitor 명령을 입력하고 Enter 키를 누르세요.

예. redis 서버의 모니터링 기능입니다. 이제 이 상태에서 사이트를 탐색해보세요. 캐시가 작동하는 것을 확인할 수 있습니다.

모니터링 명령 종료는 Ctrl+C입니다.

캐시를 설정한 후 사이트가 빠르게 나타나나요? 실제로 모니터링을 해 보면 상당한 속도 향상을 확인할 수 있습니다.

정리

지금까지 한 일을 명령 중심으로 정리하겠습니다.

네트워크 환경 만들기

docker network create wordpress-tier

mariadb 설치

docker volume create --name mariadb_data
docker run -d --name mariadb \
 -e MARIADB_ROOT_PASSWORD=<change me> \
 -e MARIADB_USER=<change me> \
 -e MARIADB_PASSWORD=<change me> \
 --net wordpress-tier \
 --volume mariadb_data:/bitnami \
 bitnami/mariadb:latest

phpmyadmin 설치

docker volume create --name phpmyadmin_data
docker run -d --name phpmyadmin -p 4580:80 -p 4543:443 \
 --net wordpress-tier \
 --volume phpmyadmin_data:/bitnami \
 bitnami/phpmyadmin:latest

wordpress 설치를 위한 데이터베이스 만들기

mysql -u root -proot08

MariaDB [(none)]> create database wp_nova;
MariaDB [(none)]> grant all privileges on wp_nova.* to nova@'%' identified by 'nova01' with grant option;
MariaDB [(none)]> flush privileges;
MariaDB [(none)]> quit

wordpress 설치

docker volume create --name wordpress_data
docker run -d --name wordpress -p 6080:80 -p 6443:443 \
 -e WORDPRESS_USERNAME=nova \
 -e WORDPRESS_PASSWORD=pass01 \
 -e WORDPRESS_EMAIL=nova@eddylab.co.kr \
 -e WORDPRESS_DATABASE_USER=nova \
 -e WORDPRESS_DATABASE_PASSWORD=nova01 \
 -e WORDPRESS_DATABASE_NAME=wp_nova \
 -e WORDPRESS_SCHEME=https \
 --net wordpress-tier \
 --volume wordpress_data:/bitnami \
bitnami/wordpress:latest

nginx-proxy-manager 설치

docker volume create nginx-proxy-manager_data
docker run -d --name=nginx-proxy-manager -p 8181:8181 -p 8080:8080 -p 4443:4443 -v nginx-proxy-manager_data:/config:rw  jlesage/nginx-proxy-manager

redis 서버 설치

docker volume create --name redis_data
docker run -d --name=redis \
 -e REDIS_PASSWORD=pass10 \
 --net wordpress-tier \
 --volume redis_data:/bitnami \
 -p 6379:6379 \
bitnami/redis:latest

간단합니다~

받고 하나 더!

워드프레스 사이트를 하나 더 설치하고 실행하겠습니다.

  • 컨테이너(호스트) 이름 – fox
  • 사이트 주소 – https:fox.nnote.duckdns.org
  • 워드프레스 데이터베이스 이름 – wp_fox
  • 워드프레스 데이터베이스 암호 – fox01
  • 워드프레스 사용자 이름 – fox
  • 워드프레스 사용자 암호 – fox01

먼저 MariaDB 컨테이너에서 데이터베이스와 사용자를 만듭니다.

mysql -u root -proot08

MariaDB [(none)]> create database wp_fox;
MariaDB [(none)]> grant all privileges on wp_fox.* to fox@'%' identified by 'fox01' with grant option;
MariaDB [(none)]> flush privileges;
MariaDB [(none)]> quit

워드프레스 컨테이너를 만들고 실행합니다.

docker volume create --name foxpress_data
docker run -d --name foxpress -p 5080:80 -p 5443:443 \
 -e WORDPRESS_USERNAME=fox \
 -e WORDPRESS_PASSWORD=fox01 \
 -e WORDPRESS_EMAIL=nova@eddylab.co.kr \
 -e WORDPRESS_DATABASE_USER=fox \
 -e WORDPRESS_DATABASE_PASSWORD=fox01 \
 -e WORDPRESS_DATABASE_NAME=wp_fox \
 -e WORDPRESS_SCHEME=https \
 --net wordpress-tier \
 --volume foxpress_data:/bitnami \
bitnami/wordpress:latest

복사해서 사용할 때 WORDPRESS_DATABASE_NAME을 꼭 확인하세요. 실수하면 다른 데이터베이스를 덮어쓸 수 있습니다.

NPM을 설정합니다.

Redis 캐시를 설정합니다.

먼저 워드프레스 사이트(fox.nnote.duckdns.org)에 접속해서 지정된 사용자로 로그인하고 암호를 바꾼 다음 wp-config.php 파일을 아래와 같이 편집합니다.

define('WP_REDIS_HOST', 'redis');
define('WP_REDIS_PASSWORD', 'pass10');
define('WP_CACHE_KEY_SALT', 'wp-fox');

// ** MySQL settings - You can get this info from your web host ** //
/** The name of the database for WordPress */
define('DB_NAME', 'wordpress');

WP_CACHE_KEY_SALT를 바꿨습니다.

docker stop foxpress
nano /mnt/sata/docker/volumes/foxpress_data/_data/wordpress/wp-config.php
docker start foxpress

이제 완전하게 동작하는 워드프레스 사이트 두 개를 갖게 되었습니다.

주의할 사항

긴 글이 이제야 끝났는데요.

주의할 사항은 각 명령의 포트 매핑입니다. 이 글에서만도 컨테이너 6개 컨테이너를 실행합니다. 꼭 Portainer 컨테이너 목록에서 포트 매핑을 확인하면서 작업하세요.

컨테이너를 만들 때 재시작 정책(--restart)을 지정하지 않았습니다. Portainer에서 적절한 것으로 설정하시길.

추천 도커 이미지

몇 가지 도커 이미지 추천하면서 마칩니다~ 수고하셨습니다.

heimdall

docker volume create heimdall_data
docker create \
  --name=heimdall \
  -e PUID=1000 \
  -e PGID=1000 \
  -e TZ=Asia/Seoul \
  -p 3080:80 \
  -p 3083:443 \
  -v heimdall_data:/config \
  --restart unless-stopped \
  linuxserver/heimdall  

소개는 Heimdall Application Dashboard, 한국어로 못 찼네요. 하나 작성할까요?

transmission

docker volume create transmission_data
docker create \
  --name=transmission \
  -e PUID=1000 \
  -e PGID=100 \
  -e TZ=TZ=Asia/Seoul \
  -e TRANSMISSION_WEB_HOME=/combustion-release/ \
  -e USER=<username> \
  -e PASS=<password> \
  -p 9091:9091 \
  -p 51413:51413 \
  -p 51413:51413/udp \
  -v transmission_data:/config \
  -v /srv/dev-disk-by-label-sata/share/downloads:/downloads \
  -v /srv/dev-disk-by-label-sata/share/watch:/watch \
  --restart unless-stopped \
  linuxserver/transmission

downloads 아래에 complete와 incomplete가 자동으로 만들어집니다.

sjva

docker volume create sjva_data
docker create \
  --name sjva \
  -p 9999:9999 \
  -v sjva_data:/app/data \
  -v /srv/dev-disk-by-label-sata/share:/share \
  soju6jan/sjva:0.1.0

selenium

sjva에 필요합니다.

docker run -d --name selenium -p 5555:4444 -v /dev/shm:/dev/shm selenium/standalone-chrome

jekyll 블로그

latest부터 3.8까지 다 실패하고 3.5에서 성공했습니다.

export JEKYLL_VERSION=3.5
mkdir jekyll-nova ; cd jekyll-nova
docker run --rm --volume="$PWD:/srv/jekyll" -it jekyll/jekyll:$JEKYLL_VERSION jekyll new .

docker run --rm --volume="$PWD:/srv/jekyll" -it jekyll/jekyll:$JEKYLL_VERSION jekyll build

docker run --name jekyll-nova --volume="$PWD:/srv/jekyll" -p 3000:4000 -it jekyll/jekyll:$JEKYLL_VERSION jekyll serve --watch --drafts
Published intips

4 Comments

  1. wolga wolga

    덕분에 도커에 대해서도 알게 되었고 워드프레스를 띄우는데도 성공하였습니다. 장문의 글 감사드리며 포트매핑이 꼬여서 고생좀 했습니다. 고맙습니다:)

    • 아무도 안 보는 줄 알았는데 반갑습니다 😉
      도움이 되었다니 기쁘네요!

      • wolga wolga

        질문 하나만 드리겠습니다. bitnami 이미지의 php 업로드 한도를 변경하려고 합니다. php.ini를 수정해야 한다고 나오는데 적당한 방법을 찾지 못하였습니다. 알려주실 수 있을까요?

        • mc 로 파일 정리하다가 루트 파티션을 실수로 날려서 한 동안 먹통이었네요 -.-;; 다행히 도커 데이터 파티션을 백업해 두고 있어서 데이터 손실은 없었네요. 도커 만세!

          아래 글 참고하세요.
          https://stackoverflow.com/a/57367364

          docker run -v /local/path/to/php.ini:/usr/local/etc/php/php.ini [OPTIONS] IMAGE [COMMAND] [ARG...]
          

          docker 컨테이너 실행할 때 php.ini 파일을 외부 파일에 매핑하는 방식입니다. 볼륨 매핑하는 것처럼 설정 파일을 외부 파일에 매핑해서 사용하는거죠.

          사전 학습이 좀 필요하지만 글에 있는 다른 방식도 살펴보시길.

댓글 남기기

이메일은 공개되지 않습니다. 필수 입력창은 * 로 표시되어 있습니다