wordpress , PI 를 위한 Docker 환경 구축

You are currently viewing wordpress , PI 를 위한 Docker 환경 구축

개요

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를 통해서 정상동작 여부를 확인해야한다.

wordpress 를 구동하고 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를 통해 정상동작 여부를 확인해야함


관련글

Leave a Reply