docker+php+nginx+PostgreSQL을 이용하여CakePHP의 개발 환경 구축

개요


원활하게 환경을 구축할 수 있다는 보도가 드물기 때문에 프로그램서로 공유하고 있다.
그럼에도 불구하고 저는 Laavel로 구성된nginx와php의 설정을 cake에 사용했을 뿐입니다 w
누군가를 도울 수 있었으면 좋겠어요.

전제 조건


php-fpm: 7.4
CakePHP: 任意
Nginx: 1.19.x
PostgreSQL: 12.x
apt使用

프로비저닝


종교적인 이유로 도커 관련 서류를docker 아래에 설정합니다.
.
├── .docker
│   ├── app
│   │   ├── Dockerfile
│   │   └── conf
│   │         ├── php.ini
│   │         └── docker.conf
│   ├── db
│   └── nginx
│       ├── Dockerfile
│       └── conf
│           └── default.conf
├── .git
├── .gitignore
├── README.md
└── docker-compose.yml

docker 환경 구축


docker-compose.yml


docker-compose.yml
version: '3'
services:
  nginx:
    container_name: nginx
    build:
      context: .docker/nginx
      dockerfile: Dockerfile
    ports:
      - 80:80
    volumes:
      - .:/var/www/html
    tty: true
    depends_on:
      - app

  app:
    container_name: app
    build:
      context: .docker/app
      dockerfile: Dockerfile
    environment:
      LANG: 'ja_JP.UTF-8'
      TZ: 'Asia/Tokyo'
      APP_NAME: 'CakePHP'
      APP_ENV: 'development'
      APP_DEBUG: 'true'
      APP_URL: 'http://localhost'
      LOG_CHANNEL: 'stderr'
      DB_CONNECTION: 'pgsql'
      DB_HOST: 'db'
      DB_PORT: '5432'
      DB_DATABASE: 'cake_development'
      DB_DATABASE_TEST: 'cake_testing'
      DB_USERNAME: 'docker'
      DB_PASSWORD: 'docker'
    env_file:
      - .env
    volumes:
      - .:/var/www/html
    expose:
      - 9000
    tty: true
    depends_on:
      - db

  db:
    image: postgres:12-alpine
    container_name: db
    environment:
      TZ: 'Asia/Tokyo'
      POSTGRES_USER: 'docker'
      POSTGRES_ROOT_PASSWORD: 'docker'
      POSTGRES_PASSWORD: 'docker'
      POSTGRES_DB: 'cake_development'
    volumes:
      - ./.docker/db/data:/var/lib/postgresql/data
      - ./.docker/db/sql:/docker-entrypoint-initdb.d
    ports:
      - 5432:5432

app


주석의 일부분은cake 가져오기에 필요한 내용에 속합니다.꼭 넣어주세요!
.docker/app/Dockerfile
FROM php:7.4-fpm

ENV TZ Asia/Tokyo
ENV COMPOSER_ALLOW_SUPERUSER 1

# install Lib for composer
RUN curl -sL https://deb.nodesource.com/setup_14.x | bash - && \
    apt-get update -qq && \
    apt-get install -y libicu-dev &&\
    apt-get install --no-install-recommends -y libpq-dev libonig-dev libxml2-dev nodejs git zip unzip && \
    apt-get install --no-install-recommends -y zlib1g-dev libfreetype6-dev libpng-dev libjpeg62-turbo-dev libwebp-dev libxpm-dev && \
    apt-get clean && \
    rm -rf /var/cache/apt && \
    npm install npm@latest -g

# add extention
RUN docker-php-ext-configure gd --with-freetype --with-jpeg --with-webp --with-xpm && \
    docker-php-ext-install -j$(nproc) gd && \
    docker-php-ext-install mbstring pdo pdo_pgsql json &&\
    docker-php-ext-install intl

# php.conf php-fpm.conf
COPY conf/php.ini /usr/local/etc/php/php.ini
COPY conf/docker.conf /usr/local/etc/php-fpm.d/docker.conf

# install Composer
RUN curl -sS https://getcomposer.org/installer | php && \
    mv composer.phar /usr/local/bin/composer && \
    chmod +x /usr/local/bin/composer

WORKDIR /app

# CakePHP に必要な拡張機能
# apt-get install -y libicu-dev &&\
# docker-php-ext-install intl \
php.ini와 docker.취향에 따라.

nginx


.docker/nginx/Dockerfile
FROM nginx:1.19-alpine

ENV TZ Asia/Tokyo

COPY conf/default.conf /etc/nginx/conf.d/default.conf
default.conf
server {
    listen 80;

    # 指定先注意
    root  /var/www/html;
    index index.php index.html;

    location / {
        try_files $uri $uri/ /index.php$is_args$args;
    }

    location ~ \.php$ {
        fastcgi_split_path_info ^(.+\.php)(/.+)$;
        fastcgi_pass   app:9000;
        fastcgi_index  index.php;

        include        fastcgi_params;
        fastcgi_param  SCRIPT_FILENAME $document_root$fastcgi_script_name;
        fastcgi_param  PATH_INFO $fastcgi_path_info;
    }
}
이build 환경 ok입니다.다음 명령을 사용하여 실행
build에 복사하면 인용 대상과 포장의 넣는 방법 등이 좋지 않기 때문에 다시 검사하십시오 >>
docker-compose build
docker-compose up

setup


지금까지 PHP,nginx,PostgreSQL의 환경이 모두 갖추어졌기 때문에 저는 Cake PHP setup을 해보겠습니다!
  • CakePHP의 설치
  • // project 名sampleで作成(4.x)
    docker-compose exec app composer create-project --prefer-dist cakephp/app sample
    
    // versionを指定
    docker-compose exec app composer create-project --prefer-dist cakephp/app:^4.0 {プロジェクト名}
    
    카탈로그 이동
    액세스한 경우
    cp -R sample/. ./ 
    rm -rf sample/
    
    http://localhost/
    =>오류가 발생할 수 있다고 생각합니다.
    Database driver Cake\Database\Driver\Mysql cannot be used due to 
    a missing PHP extension or unmet dependency
    
  • driver 설정 수정
    CakePHP3은 기본적으로 mysql을 참조하는 드라이버로 설정되어 있기 때문에 참조 대상을 변경합니다.
    config/app.php를 보니 다음과 같다.
  • config/app.php
    'Datasources' => [
        /*
         * These configurations should contain permanent settings used
         * by all environments.
         *
         * The values in app_local.php will override any values set here
         * and should be used for local and per-environment configurations.
         *
         * Environment variable based configurations can be loaded here or
         * in app_local.php depending on the applications needs.
         */
        'default' => [
          'className' => Connection::class,
          'driver' => Mysql::class,
          'persistent' => false,
          'timezone' => 'UTC',
          // 略
        ],
        'test' => [
          'className' => Connection::class,
          'driver' => Mysql::class,
          // 略
        ],
    
    따라서driver 설정은 다음과 같다.
    'driver' => \Cake\Database\Driver\Postgres::class,
    
    또한default뿐만 아니라test내driver도 변경합니다!
    상술한 절차로 완성!나는 웹 페이지 화면을 확인할 수 있다고 생각한다.
    http://localhost/

    후기


    어느 쪽이었으면 스텝북이 됐지만 누군가에게 도움이 됐으면 좋겠어요.
    중도에 설명을 생략한 부분도 있으니 이해하기 어려운 경우에는 아래 내용을 참고하세요!
    그럼 안녕히 계세요><
    https://github.com/Snails8/cakephp-api-sample

    좋은 웹페이지 즐겨찾기