YYPHP#6 이벤트 리포트 「clean-code-php, Concrete5를 Kusanagi의 Docker 컨테이너로 이동한다」



이것은 2017년 9월 13일에 개최한 PHPer 이벤트YYPHP#6의 이벤트 리포트입니다.

YYPHP 는 한마디로 "PHPer의 부실"입니다. PHP에 대해서, 잡담하고, 느긋하게, 와와이와 이야기하는 모임입니다. 매회 주제를 결정하지 않고 잡담을 출발점에 여러가지 일을 돌발적으로 합니다. 모인 사람에게 코드 리딩을 하는 경우도 있고, 함께 개발 툴을 만져 보거나, 프레임워크에 대한 정보 교환을 하는 경우도 있습니다. 개최는 매주 수요일 19:00에 다카다노바바에서.



이번에는 5명이 참가해 주었습니다! 참가해 주신 여러분 감사합니다. 부디 다음 번에도 오세요~!

그럼 YYPHP에서 화제가 된 것을 드러내고 싶습니다.

clean-code-php



PHP: Clean Code (clean-code-php) 밀감약 - Qiita을 조금 바라 보았습니다.

Concrete5+kusanagi Docker 환경 만들기



Concrete5+kusanagi의 Docker 환경을 만드는 데 도전했습니다.

Kusanagi란?


  • KUSANAGI – 초고속 WordPress 가상 머신 [고속 튜닝된 WordPress 서버]
  • Kusanagi에서 WordPress를 움직이면 10 배 빠릅니다. 보안도 강하다.
  • Nginx, MariaDB, HHVM이나 PHP7을 튜닝하고 있는 VM 이미지(AWS나 VMware등)이므로, WordPress에 불과해 PHP어플리라면 퍼포먼스가 오른다.
  • Concrete5는 격중하지만 3배 정도 빠르다.
  • Docker 쪽은 아직 개발중이라는 것으로, 진짜 Kusanagi와는 다르다.

  • Docker 환경을 만드는 방법



  • primestrategy/kusanagi-nginx - Docker Hub에 있는 docker-compose의 YAML을 그대로 사용한다.
  • mkdir kusanagi-concrete5
    cd kusanagi-concrete5
    touch docker-compose.yml
    

    docker-compose.yml에 다음을 적는다.

    docker-compose.yml
    version: '2'
    
    services:
      kusanagi-data:
        container_name: kusanagi-data
        image: busybox
        restart: always
        stdin_open: true
        tty: true
        volumes:
          - /var/lib/mysql
          - /etc/nginx/conf.d
          - /etc/httpd/conf.d
          - /etc/kusanagi.d
          - /home/kusanagi
        command: /bin/sh
    
      kusanagi-nginx:
        container_name: kusanagi-nginx
        image: primestrategy/kusanagi-nginx:1.10.0-1
        environment:
          PROFILE: kusanagi
          FQDN: kusanagi.example.jp
          WPLANG: ja
          BCACHE: "off"
          FCACHE: "off"
        volumes_from:
          - kusanagi-data
        links:
          - kusanagi-php7:php
          - kusanagi-mariadb:mysql
        ports:
          - "80:80"
          - "443:443"
    
      kusanagi-mariadb:
        container_name: kusanagi-mariadb
        image: mariadb:10.0.24
        environment:
          MYSQL_ROOT_PASSWORD: my-secret-pw
          MYSQL_USER:     user
          MYSQL_PASSWORD: password
          MYSQL_DATABASE: wordpress
        volumes_from:
          - kusanagi-data
    
      kusanagi-php7:
        container_name: kusanagi-php7
        image: primestrategy/kusanagi-php7:7.0.6-1
        links:
          - kusanagi-mariadb:mysql
        volumes_from:
          - kusanagi-data
    
    docker-compose up -d
    

    이 상태에서 브라우저http://localhost를 엽니다. 아래에 설정에서 WordPress는 달릴 수 있다.



    시간 초과 오류가 발생하면,

    ERROR: An HTTP request took too long to complete. Retry with --verbose to obtain debug information.
    If you encounter this issue regularly because of slow network conditions, consider setting COMPOSE_HTTP_TIMEOUT to a higher value (current value: 60).

    다음과 같이 타임아웃을 설정한다.
    COMPOSE_HTTP_TIMEOUT=240 docker-compose up
    

    kusanagi-nginx 컨테이너의 /home/kusanagi/kusanagi/DocumentRoot가 문서 루트이므로, 여기에 Concrete5를 배치하면 된다.

    다음 명령으로 nginx 컨테이너에 들어갑니다.
    docker-compose exec kusanagi-nginx bash
    

    컨테이너에서 다음 명령을 실행하여 WordPress를 지우고 Concrete5를 다운로드하고 배치합니다.
    rm -rf /home/kusanagi/kusanagi/DocumentRoot &&
    yum install -y unzip wget &&
    wget https://www.concrete5.org/download_file/-/view/96959/ -O concrete5-8.2.1.zip &&
    unzip concrete5-8.2.1.zip &&
    mv concrete5-8.2.1 /home/kusanagi/kusanagi/DocumentRoot
    cd /home/kusanagi/kusanagi/DocumentRoot
    chmod 777 /home/kusanagi/kusanagi/DocumentRoot/application/{files,config}
    chmod 777 /home/kusanagi/kusanagi/DocumentRoot/packages
    

    2017-09-13 현재, primastrategy/kusanagi-php7:7.0.16-1이 최신으로 이것이 아니면 pdo_mysql이 없는 것과, GD의 여러가지 들어가지 않기 때문에 Dockerfile을 만들어 빌드한다.

    Dockefile
    FROM primestrategy/kusanagi-php7:7.0.16-1
    
    RUN apk add \
                --no-cache \
                freetype \
                libpng \
                libjpeg-turbo \
                freetype-dev \
                libpng-dev \
                libjpeg-turbo-dev\
            && docker-php-ext-configure gd \
                --with-gd \
                --with-freetype-dir=/usr/include/ \
                --with-png-dir=/usr/include/ \
                --with-jpeg-dir=/usr/include/ \
            && docker-php-ext-install gd
    
      kusanagi-php7:
        container_name: kusanagi-php7
        build: . #ここ
        links:
          - kusanagi-mariadb:mysql
        volumes_from:
          - kusanagi-data
    

    kusanagi-php7을 다시 빌드하고,
    docker-compose build
    

    컨테이너를 다시 시작합니다.
    docker-compose up -d
    

    이 상태에서 브라우저http://localhost를 열고 Concrete5의 인스톨러 화면이 표시되면 성공.

    편리한 기술



    YYPHP로 화제가 된 편리 테크. PHP와는 관계없는 것.

    편리한 기술: 쉘의 편리한 키 바인딩


  • 터미널에서 ↑를 누르면 이전 명령이 저장됩니다.
  • 아는 사람은 당연합니다만, 모르는 분은 감동하고 있었습니다.

  • 편리한 기술: iTerm2에서 Command+/로 초점을 표시할 수 있습니다.



    프로젝터로 iTerm2를 낼 때 어디에 커서가 있는지 강조할 때 편리합니다.



    프로젝터로 보면 이런 느낌.



    YYPHP는 매주 하고 있습니다.



    PHP에 대해 이야기하고 싶다면 YYPHP 이벤트 정보을 확인하십시오.

    이상, YYPHP#6의 리포트였습니다. 다음 번에도 와이와이 해 가고 싶습니다! 그럼 또 다음주!

    좋은 웹페이지 즐겨찾기