Docker Compose로 WordPress를 설치하는 방법
이 튜토리얼은 다음 OS 버전에 대해 존재합니다.
- Ubuntu 22.04(Jammy Jellyfish)
- Ubuntu 16.04(Xenial Xerus)
이 페이지에서
- 전제 조건
- 1단계 - 방화벽 구성\n
- 2단계 - Docker 및 Docker Compose 설치
- 3단계 - WordPress용 Docker Compose 파일 만들기
- 4단계 - Nginx용 Docker Compose 업데이트
- 5단계 - SSL용 Docker Compose 업데이트
- 6단계 - WordPress 시작 및 설치
- 7단계 - PhpMyAdmin 액세스
- 8단계 - WP-CLI에 액세스
- 9단계 - WordPress 백업
- 10단계 - WordPress 업그레이드
- 결론
WordPress는 세계에서 가장 인기 있는 블로깅 플랫폼입니다. Shell 명령, 스크립트를 사용한 수동 설치 또는 널리 사용되는 웹 호스트에서 제공하는 웹 설치 프로그램을 사용하여 WordPress를 설치하는 방법은 많습니다. WordPress를 실행하려면 LAMP(Linux, Apache, MySQL 및 PHP) 또는 LEMP(Linux, Nginx, MySQL 및 PHP) 스택을 설치해야 합니다.
이 튜토리얼은 Docker/Docker Compose를 사용하여 WordPress를 설치하는 방법을 알려줍니다. Docker를 사용하면 기본 스택을 설치하는 프로세스가 훨씬 쉬워집니다. 동일한 구성을 사용하여 여러 서버에 WordPress를 빠르게 설치할 수 있습니다. 또한 SSL을 통해 사이트를 제공하기 위해 Nginx 프록시 서버와 함께 데이터베이스 관리를 위한 phpMyAdmin 도구를 설치합니다.
전제 조건
-
A Linux server with a non-root user having sudo privileges. We are using a server running Ubuntu 22.04 for our tutorial.
-
A fully qualified domain name (FQDN) pointing to your server. For our purposes, we will use
example.com
as the domain name for the WordPress site andphpmyadmin.example.com
for the phpMyAdmin website. -
Make sure everything is updated.
$ sudo apt update
-
Install basic utility packages. Some of them may already be installed.
$ sudo apt install wget curl nano software-properties-common dirmngr apt-transport-https gnupg gnupg2 ca-certificates lsb-release ubuntu-keyring unzip -y
1단계 - 방화벽 구성
첫 번째 단계는 방화벽을 구성하는 것입니다. 우분투는 기본적으로 ufw(복잡하지 않은 방화벽)와 함께 제공됩니다.
방화벽이 실행 중인지 확인하십시오.
$ sudo ufw status
다음 출력을 얻어야 합니다.
Status: inactive
방화벽이 활성화 시 현재 연결을 끊지 않도록 SSH 포트를 허용합니다.
$ sudo ufw allow OpenSSH
HTTP 및 HTTPS 포트도 허용합니다.
$ sudo ufw allow http $ sudo ufw allow https
방화벽 활성화
$ sudo ufw enable Command may disrupt existing ssh connections. Proceed with operation (y|n)? y Firewall is active and enabled on system startup
방화벽의 상태를 다시 확인하십시오.
$ sudo ufw status
비슷한 출력이 표시되어야 합니다.
Status: active To Action From -- ------ ---- OpenSSH ALLOW Anywhere 80/tcp ALLOW Anywhere 443 ALLOW Anywhere OpenSSH (v6) ALLOW Anywhere (v6) 80/tcp (v6) ALLOW Anywhere (v6) 443 (v6) ALLOW Anywhere (v6)
2단계 - Docker 및 Docker Compose 설치
Ubuntu 22.04는 이전 버전의 Docker와 함께 제공됩니다. 최신 버전을 설치하려면 먼저 Docker GPG 키를 가져옵니다.
$ curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
Docker 리포지토리 파일을 만듭니다.
$ echo \ "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu \ $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
시스템 저장소 목록을 업데이트하십시오.
$ sudo apt update
최신 버전의 Docker를 설치합니다.
$ sudo apt install docker-ce docker-ce-cli containerd.io docker-compose-plugin
실행 중인지 확인합니다.
$ sudo systemctl status docker ? docker.service - Docker Application Container Engine Loaded: loaded (/lib/systemd/system/docker.service; enabled; vendor preset: enabled) Active: active (running) since Mon 2023-01-09 13:19:16 UTC; 9s ago TriggeredBy: ? docker.socket Docs: https://docs.docker.com Main PID: 1863 (dockerd) Tasks: 7 Memory: 20.5M CPU: 278ms CGroup: /system.slice/docker.service ??1863 /usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock
기본적으로 Docker에는 루트 권한이 필요합니다. sudo
명령을 실행할 때마다 sudo
를 사용하지 않으려면 docker
명령에 사용자 이름을 추가하세요. > 그룹.
$ sudo usermod -aG docker $(whoami)
이 변경 사항을 활성화하려면 서버에서 로그아웃하고 동일한 사용자로 다시 로그인하거나 다음 명령을 사용해야 합니다.
$ su - ${USER}
사용자가 Docker 그룹에 추가되었는지 확인합니다.
$ groups navjot wheel docker
3단계 - WordPress용 Docker Compose 파일 만들기
WordPress 구성을 위한 디렉터리를 만듭니다.
$ mkdir wordpress
디렉터리로 전환합니다.
$ cd wordpress
편집을 위해 Docker 작성 파일을 만들고 엽니다.
$ nano docker-compose.yml
다음 코드를 붙여넣습니다.
version: '3.9' services: wp: image: wordpress:latest container_name: wordpress-app restart: unless-stopped expose: - 8080 volumes: - ./config/php.conf.ini:/usr/local/etc/php/conf.d/conf.ini - ./wp-app:/var/www/html #- ./plugin-name/trunk/:/var/www/html/wp-content/plugins/plugin-name # Plugin development #- ./theme-name/trunk/:/var/www/html/wp-content/themes/theme-name # Theme development environment: WORDPRESS_DB_HOST: db WORDPRESS_DB_NAME: "${DB_NAME}" WORDPRESS_DB_USER: "${DB_USER_NAME}" WORDPRESS_DB_PASSWORD: "${DB_USER_PASSWORD}" VIRTUAL_HOST: example.com LETSENCRYPT_HOST: example.com depends_on: - db links: - db wpcli: image: wordpress:cli container_name: wpcli_app volumes: - ./config/php.conf.ini:/usr/local/etc/php/conf.d/conf.ini - ./wp-app:/var/www/html environment: WORDPRESS_DB_HOST: db WORDPRESS_DB_NAME: "${DB_NAME}" WORDPRESS_DB_USER: "${DB_USER_NAME}" WORDPRESS_DB_PASSWORD: "${DB_USER_PASSWORD}" depends_on: - db - wp pma: image: phpmyadmin/phpmyadmin container_name: pma restart: unless-stopped environment: # https://docs.phpmyadmin.net/en/latest/setup.html#docker-environment-variables PMA_HOST: db PMA_PORT: 3306 MYSQL_ROOT_PASSWORD: "${DB_ROOT_PASSWORD}" UPLOAD_LIMIT: 50M VIRTUAL_HOST: phpmyadmin.example.com LETSENCRYPT_HOST: phpmyadmin.example.com expose: - 8081 links: - db:db db: image: mysql:latest container_name: wordpressdb restart: unless-stopped command: [ '--default_authentication_plugin=mysql_native_password', '--character-set-server=utf8mb4', '--collation-server=utf8mb4_unicode_ci' ] volumes: - ./wp-data:/docker-entrypoint-initdb.d - db_data:/var/lib/mysql environment: MYSQL_DATABASE: "${DB_NAME}" MYSQL_ROOT_PASSWORD: "${DB_ROOT_PASSWORD}" MYSQL_USER: "${DB_USER_NAME}" MYSQL_PASSWORD: "${DB_USER_PASSWORD}" volumes: db_data:
Ctrl + X를 누르고 메시지가 표시되면 Y를 입력하여 파일을 저장합니다.
우리가 가져오는 두 개의 WordPress 이미지가 있습니다. 하나는 웹 사이트용이고 다른 하나는 WP-CLI 도구용입니다. 두 이미지 모두 MySQL 8.0 도커 이미지에 의존합니다. 여기에서 데이터베이스 자격 증명에 대한 환경 변수를 설정합니다. 우리는 두 컨테이너에 대해 두 개의 볼륨을 생성했습니다. 그 중 하나는 WordPress 사이트의 공용 파일을 가리키고 두 번째는 사용자 지정 PHP.ini 위치를 가리킵니다. 또한 Nginx 가상 호스트 도메인에 대한 환경 변수와 WordPress 사이트에 대한 Lets encrypt SSL 도메인을 정의했습니다.
더 많은 환경 변수를 추가하고 사용자 지정 wp-config.php
데이터를 Docker 파일에 추가할 수 있습니다. WordPress DockerHub 페이지에서 추가 환경 변수에 대해 알아볼 수 있습니다.
다음 이미지는 동일한 MySQL 이미지에 의존하고 루트 암호를 사용하여 연결하는 phpMyAdmin용입니다. 50MB의 업로드 제한이 있습니다. 요구 사항 및 데이터베이스 크기에 따라 변경할 수 있습니다. WordPress 사이트와 마찬가지로 Nginx 가상 호스트 도메인을 정의하고 phpMyAdmin 사이트의 SSL 도메인 이름을 암호화합니다.
마지막 이미지는 MySQL 데이터베이스용입니다. 기본 인증 방법과 문자 집합을 설정하기 위해 몇 가지 명령을 전달했습니다. 또한 데이터를 저장하기 위해 두 개의 볼륨을 만들었습니다. 데이터베이스 자격 증명에 대한 환경 변수도 설정했습니다.
다음 단계는 Compose 파일에서 사용되는 변수에 대한 환경 파일을 만드는 것입니다. 편집할 환경 파일을 만들고 엽니다.
$ sudo nano .env
다음 코드를 붙여넣습니다.
DB_NAME=wordpress DB_USER_NAME=username DB_USER_PASSWORD=userpassword DB_ROOT_PASSWORD=password
Ctrl + X를 누르고 메시지가 표시되면 Y를 입력하여 파일을 저장합니다. 변수를 선택한 사용자 이름과 암호로 바꿉니다.
사용자 지정 php.ini 파일을 사용하여 PHP 구성을 사용자 지정할 수 있습니다.
PHP 구성을 위한 폴더를 만듭니다.
$ mkdir config
편집을 위해 php.conf.ini
파일을 만들고 엽니다.
$ nano config/php.conf.ini
다음 코드를 붙여넣습니다. 요구 사항에 따라 값을 조정하십시오. PhpMyadmin 컨테이너의 업로드 제한은 이 파일에서 사용하는 값과 무관합니다.
file_uploads = On memory_limit = 500M upload_max_filesize = 30M post_max_size = 30M max_execution_time = 600
Ctrl + X를 누르고 메시지가 표시되면 Y를 입력하여 파일을 저장합니다.
4단계 - Nginx용 Docker Compose 업데이트
Nginx 구성을 위한 디렉터리를 만듭니다.
$ mkdir nginx
해당 디렉터리 내에 가상 호스트에 대한 디렉터리를 만듭니다.
$ mkdir nginx/vhost
편집을 위해 nginx/vhost/wordpress.example.com
을 생성하고 엽니다.
$ nano nginx/vhost/wordpress.example.com
다음 코드를 붙여넣습니다.
server_tokens off; client_max_body_size 30m;
Ctrl + X를 누르고 메시지가 표시되면 Y를 입력하여 파일을 저장합니다.
nginx/vhost/phpmyadmin.example.com
파일에 대해 동일한 작업을 수행합니다.
$ nano nginx/vhost/phpmyadmin.example.com
다음 코드를 붙여넣습니다.
server_tokens off; client_max_body_size 50m;
Ctrl + X를 누르고 메시지가 표시되면 Y를 입력하여 파일을 저장합니다.
docker compose 파일을 다시 엽니다.
$ nano docker-compose.yml
volumes: db_data:
줄 앞에 다음 코드를 붙여넣습니다.
nginx: container_name: nginx image: nginxproxy/nginx-proxy restart: unless-stopped ports: - 80:80 - 443:443 volumes: - /var/run/docker.sock:/tmp/docker.sock:ro - ./nginx/html:/usr/share/nginx/html - ./nginx/certs:/etc/nginx/certs - ./nginx/vhost:/etc/nginx/vhost.d logging: options: max-size: "10m" max-file: "3"
Ctrl + X를 누르고 메시지가 표시되면 Y를 입력하여 파일을 저장합니다.
위의 코드에서 Nginx 프록시 Docker 이미지를 가져오고 외부 세계에 연결하는 데 사용할 호스트 컨테이너에 포트 80 및 443을 노출합니다. 우리는 또한 Nginx HTML 페이지용 볼륨, 모든 SSL 인증서가 저장될 디렉터리, 추가 nginx 구성을 추가하기 위해 위에서 사용한 가상 호스트용 디렉터리를 생성했습니다. 여기에서 WordPress 및 phpMyAdmin 사이트에 대한 파일 업로드 크기를 구성했습니다. 사이트의 도메인 이름은 이전 단계에서 정의한 환경 변수에서 선택됩니다.
5단계 - SSL용 Docker Compose 업데이트
편집을 위해 docker compose 파일을 엽니다.
$ nano docker-compose.yml
volumes: db_data:
줄 앞에 다음 코드를 붙여넣습니다.
acme-companion: container_name: acme-companion image: nginxproxy/acme-companion restart: unless-stopped volumes_from: - nginx volumes: - /var/run/docker.sock:/var/run/docker.sock - ./nginx/acme:/etc/acme.sh environment: DEFAULT_EMAIL:
Ctrl + X를 누르고 메시지가 표시되면 Y를 입력하여 파일을 저장합니다.
여기서는 Nginx 프록시와 함께 작동하는 Acme 컴패니언 Docker 이미지를 가져옵니다. Nginx 컨테이너에서 볼륨을 가져옵니다. Lets encrypt SSL과 관련된 모든 구성을 저장하는 acme.sh 도구의 볼륨도 정의합니다. 마지막으로 SSL 인증서를 Lets Encrypt에 등록하기 위한 환경 변수를 정의합니다.
6단계 - WordPress 시작 및 설치
이제 모든 구성 파일이 완료되었으므로 컨테이너를 시작하고 실행할 차례입니다.
$ docker compose up -d
몇 분 정도 기다렸다가 컨테이너의 상태를 확인하십시오.
$ docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES c1e8a9b5169d nginxproxy/acme-companion "/bin/bash /app/entr…" 14 seconds ago Up 7 seconds acme-companion 8a37c78ff790 wordpress:latest "docker-entrypoint.s…" 14 seconds ago Up 7 seconds 80/tcp, 8080/tcp wordpress-app 4f9c777c97c2 phpmyadmin/phpmyadmin "/docker-entrypoint.…" 14 seconds ago Up 7 seconds 80/tcp, 8081/tcp pma 1b1dede46b07 nginxproxy/nginx-proxy "/app/docker-entrypo…" 14 seconds ago Up 11 seconds 0.0.0.0:80->80/tcp, :::80->80/tcp, 0.0.0.0:443->443/tcp, :::443->443/tcp nginx b9cf64a2f4a3 mysql:latest "docker-entrypoint.s…" 14 seconds ago Up 11 seconds 3306/tcp, 33060/tcp wordpressdb
URL https://example.com
을 열어 WordPress 설치 프로그램을 시작합니다.
언어를 선택하고 계속 버튼을 클릭하여 다음 페이지로 진행합니다.
사이트 세부 정보를 입력하고 사용자 이름, 비밀번호 및 이메일 주소를 선택한 다음 WordPress 설치 버튼을 클릭하여 설치를 시작합니다.
설치 성공 페이지로 이동합니다. 로그인 버튼을 클릭하시면 로그인 페이지로 이동합니다.
로그인 세부 정보를 입력하고 로그인 버튼을 클릭하여 WordPress 대시보드를 엽니다.
지금 WordPress를 사용할 수 있습니다.
7단계 - PhpMyAdmin 액세스
URL https://phpmyadmin.example.com
을 통해 phpMyAdmin에 액세스할 수 있습니다.
사용자 이름과 루트 암호로 root
를 입력하고 로그인을 클릭하여 대시보드를 엽니다.
지금 phpMyAdmin을 사용할 수 있습니다.
8단계 - WP-CLI에 액세스
다음 명령을 사용하여 WP-CLI에 액세스할 수 있습니다.
$ docker compose run --rm wpcli cli version
다음과 같은 결과가 표시됩니다.
[+] Running 2/0 ? Container wordpressdb Running 0.0s ? Container wordpress-app Running 0.0s WP-CLI 2.7.1
이렇게 긴 명령을 매번 입력하지 않으려면 Linux의 별칭 기능을 사용할 수 있습니다.
$ alias wp="docker compose -f ~/wordpress/docker-compose.yml run --rm wpcli"
이제 컨테이너의 어디에서나 다음 명령을 입력할 수 있습니다.
$ wp cli version
Linux의 별칭은 일시적입니다. 별칭을 영구적으로 만들려면 ~/.bashrc
파일을 편집해야 합니다. 편집을 위해 엽니다.
$ nano ~/.bashrc
파일 끝에 다음 줄을 붙여넣습니다.
# Custom aliases alias wp="docker compose -f ~/wordpress/docker-compose.yml run --rm wpcli"
Ctrl + X를 누르고 메시지가 표시되면 Y를 입력하여 파일을 저장합니다.
파일을 소싱하여 구성을 다시 로드합니다.
$ source ~/.bashrc
WP-CLI를 사용하여 시작할 수 있습니다.
9단계 - WordPress 백업
WordPress를 백업하는 방법에는 여러 가지가 있습니다. 가장 쉬운 방법은 플러그인을 사용하는 것입니다. 이를 위해 사용할 수 있는 여러 플러그인이 있습니다. phpMyAdmin을 사용하여 백업을 생성할 수도 있습니다.
명령줄을 사용하여 WordPress 데이터베이스를 백업할 수도 있습니다. WordPress 디렉토리로 전환합니다.
$ cd ~/wordpress
다음 명령을 사용하여 WordPress 데이터베이스를 백업합니다. MySQL 루트 암호를 묻는 메시지가 표시됩니다.
$ docker compose exec db sh -c "exec mysqldump wordpress -uroot -p" | sudo tee wp-data/data_`date +%d-%m-%Y"_"%H_%M_%S`.sql >/dev/null Enter password: password
위의 명령은 ~/wordpress/wp-data
디렉토리에 SQL 백업을 생성합니다.
디렉토리 내용을 확인하십시오.
$ ls -al wp-data total 908 drwxr-xr-x 2 root root 4096 Jan 11 10:15 ./ drwxrwxr-x 6 navjot navjot 4096 Jan 11 10:05 ../ -rw-r--r-- 1 root root 919814 Jan 11 10:14 data_11-01-2023_10_14_40.sql
디렉터리에 백업된 데이터베이스를 볼 수 있습니다. phpMyAdmin 도구 또는 다음 명령을 사용하여 이 데이터베이스를 복원할 수 있습니다.
$ docker compose exec db sh -c "exec mysql -uroot -p" < wp-data/data_11-01-2023_10_14_40.sql
크론 작업을 생성하여 정기적으로 데이터베이스를 백업할 수 있습니다.
/etc/cron.daily
디렉터리에 백업 스크립트를 생성하고 편집을 위해 엽니다.
$ sudo nano /etc/cron.daily/wpbackup.sh
다음 코드를 붙여넣습니다.
#!/bin/bash docker compose exec db sh -c "exec mysqldump wordpress -uroot -p" | tee wp-data/data_`date +%d-%m-%Y"_"%H_%M_%S`.sql >/dev/null
Ctrl + X를 누르고 메시지가 표시되면 Y를 입력하여 파일을 저장합니다.
스크립트를 실행 가능하게 만드십시오.
$ sudo chmod +x /etc/cron.daily/wpbackup.sh
이제 데이터베이스가 매일 백업됩니다.
10단계 - WordPress 업그레이드
WordPress를 업그레이드하는 가장 쉬운 방법은 내장 업데이트 프로그램을 사용하는 것입니다. Docker를 사용하여 업그레이드할 수도 있습니다. 첫 번째 단계는 9단계의 명령을 사용하여 WordPress 데이터베이스를 백업하는 것입니다.
그런 다음 디렉터리로 전환합니다.
$ cd ~/wordpress
컨테이너를 중지합니다.
$ docker compose down --remove-orphans
최신 컨테이너 이미지를 가져옵니다.
$ docker compose pull
원하는 경우 docker-compose.yml
을 변경합니다.
WordPress 컨테이너를 다시 시작합니다.
$ docker compose up -d
결론
이것으로 Docker Compose, phpMyAdmin 및 WP-CLI를 사용하여 WordPress를 설치하는 방법에 대한 자습서를 마칩니다. 질문이 있으시면 아래 의견에 게시하십시오.