개요
Raspberry PI 3에서 만들었던 wordpress 를 Raspberry PI 4로 이전하는 중이다.
당시 주류였던 APM (Apache + PHP + Mysql)으로 구축했었으나 그대로 이전하기는 골치아팠다.
그래서 개인 클라우드 구축에 잘 활용중인 Docker로 환경을 구축하게 되었다.
Docker환경에서 wordpress 사이트 구축
Docker는 약간의 성능(10~20%)을 희생하고 셋업,디버깅의 편의성을 극대화 해준다.
환경 구축을 위한 여러가지 방법이 있지만 docker-compose를 가장 추천한다.
docker-compose는 apt를 통해 간단하게 설치할 수 있고 스크립트를 통해 docker를 제어하게 해준다.
이번에 사용된 docker-compose.yml을 다음과 같다.
version: "3.6" services: wordpress: container_name: wordpress depends_on: - db image: wordpress volumes: - wordpress_data:/var/www/html - ./uploads.ini:/usr/local/etc/php/conf.d/uploads.ini ports: - "80:80" restart: always environment: WORDPRESS_DB_HOST: db WORDPRESS_DB_USER: wordpress WORDPRESS_DB_PASSWORD: ** WORDPRESS_DB_NAME: wordpress db: container_name: mysql image: jsurf/rpi-mariadb volumes: - db_data:/var/lib/mysql restart: always environment: MYSQL_ROOT_PASSWORD: **** MYSQL_DATABASE: wordpress MYSQL_USER: wordpress MYSQL_PASSWORD: ** volumes: db_data: {} wordpress_data: {}
셋업 환경: Raspberry PI 4 (Raspbian Buster)
Docker 이미지들은 Linux에서 호환성이 좋지만 Raspbian은 version에 따라 호환되지 않는 경우도 많다.
또한 yml에서는 python과 마찬가지로 공백으로 구조체를 구분하기때문에 오류가 발생할 시 이를 잘 수정해보길 바란다.
위 파일에서 사용된 간단한 키워드에 대해 설명하겠다.
container_name: docker ps에서 보이는 container의 이름을 지정
image: '/'를 기준으로 앞부분은 architecture나 구분자(저자)를 의미하고 ':'뒤에 태그(종류)를 지정
volumes: 컨테이너의 내용을 특정 로컬 폴더에 저장, volume에 저장되지 않은 내용은 재시작시 삭제됨
environment: 환경변수, image별로 사전에 정의되어야 하는 변수는 다름
images 예시) arm64v8/wordpress:6-php7.4-apache
일반적인 경우 docker에서 적절한 architecture를 선정해주지만 호환성을 위해 별도(arm32v7 ) 지정해야할 수 있다.
사용자에 따라 원하는 환경이 다를 수 있는데 docker에서는 이를 tag로 구분한다.
위에서 6은 wordpress 6을 의미하며 이외에도 fpm, alpine 등의 키워드를 추가할 수 있다.
volumes는 하단에서 어떤 volume을 만들 것인지 정의해 줘야 하며 그 이름은 service 이름으로 해주어도 상관없다.
‘/’를 사용하는 절대 경로를 사용할 수도 있고 위처럼 키워드를 사용할 수도 있는데
키워드를 사용한 경우 ‘/var/lib/docker/volumes/컨테이너이름_키워드/_data/’에 저장된다.
docker-compose에서 핵심적인 요소는 어떤 image를 사용하느냐이고 되도록이면 공식 image를 추천한다.
wordpress 공식 이미지는 Raspbian Buster를 지원하지만 mariadb는 그렇지 않다.
‘linuxserver/mariadb’,’yobasystems/alpine-mariadb’ 등 다양한 mariadb image가 존재하지만 buster에서 제대로 동작하지 않는다.
‘jsurf/rpi-mariadb‘는 PI에서 가장 많이 쓰이는 mariadb 이미지 중 하나이며 buster에서도 정상 동작한다.
한가지 더 주의할 점은 잘못된 이미지를 사용하더라도 실제 구동시에는 정상동작하는것처럼 보인다.
그러므로 docker ps를 통해서 정상동작 여부를 확인해야한다.
보통 command에 docker-entrypoint 이외의 값이 뜨면 구동과정에서 문제가 발생한 것이다.
uploads.ini는 docker-compose.yml과 같은 폴더에 존재하며 다음 값이 담겨져 있다.
file_uploads = On
memory_limit = 500M
upload_max_filesize = 500M
post_max_size = 500M
max_execution_time = 600
기본적으로 wordpress는 업로드 파일 사이즈를 제한하기때문에 그 설정을 변경하기 위한 것이다.
이 설정은 워드프레스와는 다른 위치에 저장되기때문에 volumes에 별도로 정의되어야한다.
요약
- Docker는 셋업 및 유지보수를 용이하게 만들어줌
- Raspberry PI에서는 mariadb image를 적절하게 골라야함
- docker ps를 통해 정상동작 여부를 확인해야함