HOME > etc > wordpress

Docker(Compose)로 워드프레스 설치하기

JSFollow12 Jun 2019

저는 지금까지 Jekyll, Gatsbyjs 같은 정적 블로그(Static blog)만 사용했었습니다. 이번에 워드프레스를 써보려고 로컬에 설치했는데, 워드프레스 설정 파일과 DB가 로컬에 저장되기 때문에 다른 서버에 마이그레이션을 하려면 뭘 해야할지 감이 안잡히더라구요. Gatsbyjs같은 정적 블로그는 로컬에 마크다운 파일에 글을 쓰고 그것을 빌드한 다음 HTML파일을 서버에 업로드만 하면 끝나거든요. 그래서 파일들을 git에 올려두고, 다른 PC에서 파일들을 가져오기만하면 되기 때문에 마이그레이션의 개념이 없었습니다.

반면에, 워드프레스를 사용해보고 느낀점은 한번 세팅해두면 다른 서버로 옴기기가 번거로울 것 같았습니다. 그래서, Docker로 워드프레스를 설치하고 데이터는 주기적으로 git에 업로드를 하면 마이그레이션이 편할 것 같다는 생각을 했습니다. 오래 써보지는 않았지만, 일단 지금은 제 생각대로 동작하는 것 같습니다.

이 글에서는 docker-compose로 워드프레스를 설치하고, 마이그레이션을 쉽게하도록 세팅하는 방법에 대해서 정리하였습니다.

Docker-Compose로 워드프레스 설치하기

저는 docker-compose를 사용하였습니다. 설치가 되어있다는 전제로 설명합니다.

빈 폴더를 만드시고 그 폴더 안에 docker-compose.yml 파일을 생성해주세요

$ mkdir tinytips
$ cd tinytips
$ touch docker-compose.yml

docker-compose.yml의 내용은 아래 처럼 입력해주세요. 아래 파일들은 DB와 워드프레스에 대한 세팅입니다.

version: '3.3'

services:
   db:
     image: mysql:5.7
     volumes:
       - ./mysql:/var/lib/mysql
     restart: always
     environment:
       MYSQL_ROOT_PASSWORD: wordpress
       MYSQL_DATABASE: wordpress
       MYSQL_USER: wordpress
       MYSQL_PASSWORD: wordpress

   wordpress:
     depends_on:
       - db
     image: wordpress:latest
     ports:
       - "8000:80"
     restart: always
     environment:
       WORDPRESS_DB_HOST: db:3306 // mysql 기본 설정
       WORDPRESS_DB_USER: wordpress
       WORDPRESS_DB_PASSWORD: wordpress
       WORDPRESS_DB_NAME: wordpress
     volumes:
       - ./html:/var/www/html

이제 docker-compose를 이용하여 container를 만들고 실행해보겠습니다. docker-compose up -d명령어를 입력하시면 DB와 워드프레스 container가 생성되고 실행됩니다.

$ docker-compose up -d
Creating network "tinytips_default" with the default driver
Creating tinytips_db_1 ...
Creating tinytips_db_1 ... done
Creating tinytips_wordpress_1 ...
Creating tinytips_wordpress_1 ... done

이제 http://0.0.0.0:8000에 접속해보시면 워드프레스 설정화면이 나옵니다. wordpress setupwizard

위의 docker-compose.yml 파일 중에 중요한 것은 volumes입니다. volumes 아래에 정의된 내용 중에 : 이전의 내용은 내 로컬의 폴더 위치이고, : 이후는 container 안에서 매핑될 폴더 위치입니다. 그래서 container 안에서 저장되는 파일들은 내 로컬의 ./mysql./html에 저장됩니다.

db:
volumes:
  - ./mysql:/var/lib/mysql
.....
wordpress:
volumes:
  - ./html:/var/www/html

그래서 현재 폴더를 보시면 html과 mysql폴더에 데이터가 저장되어있습니다.

$ tree -L 2
.
├── docker-compose.yml
├── html
│   ├── index.php
|   ....
│   ├── wp-settings.php
│   ├── wp-signup.php
│   ├── wp-trackback.php
│   └── xmlrpc.php
└── mysql
    ├── auto.cnf
    ├── ca-key.pem
    ├── ca.pem
    ├── client-cert.pem
    ├── client-key.pem
    ....
    ├── server-key.pem
    ├── sys
    └── wordpress

주기적으로 데이터 백업하기

지금까지 docker로 쉽게 워드프레스와 DB를 설치하였고, 그 파일들이 내 폴더로 저장되도록 하였습니다. 이 파일들을 git으로 관리하여 주기적으로 백업할 수 있습니다.

$ ls
docker-compose.yml html  mysql
$ git init
$ git add .
$ git commit .....

다른 서버에 마이그레이션 쉽게 하기

git에 저장된 파일들을 가져와서, docker-compose up -d 명령어를 입력하면 container가 생성되고 실행됩니다.

$ git clone <git path> tinytips
$ cd tinytips
$ docker-compose up -d

위에서 설명한 것처럼, 내 로컬폴더가 docker의 container가 생성될 때 지정된 위치에 마운트가 됩니다. 그렇기 때문에 워드프레스의 사이트에 접속해보면 초기 설정화면이 아니라 지금까지 저장된 데이터를 기반으로 블로그 화면을 보여줍니다.

정리

Docker를 이용하여 워드프레스를 설치해보았습니다. 마이그레이션을 편하게 하기 위해 데이터는 git으로 백업할 수 있게 만들었습니다. 마이그레이션 뿐만 아니라, 주기적으로 백업을 했다면 몇일 전 상태로 쉽게 돌아갈 수도 있습니다.