>백엔드 개발 >PHP 튜토리얼 >Docker에서 LNMP 작업 환경 배포에 대한 튜토리얼(자세한 단계)

Docker에서 LNMP 작업 환경 배포에 대한 튜토리얼(자세한 단계)

不言
不言앞으로
2019-01-28 09:44:404816검색

이 문서는 Docker에서 LNMP 작업 환경을 배포하는 방법에 대한 튜토리얼(자세한 단계)을 제공합니다. 이는 특정 참조 가치가 있으므로 도움이 필요한 친구에게 도움이 되기를 바랍니다.

다음 구성은 일반 PC 환경에서도 사용할 수 있으며, MYSQL을 공식 버전의 mysql로 ​​교체하면 됩니다.

Docker 설치

$ curl -sSL get.docker.com | sudo sh

작업 디렉터리

/lnmp/conf 가상 호스트 구성 저장
/lnmp/data/mysql mysql 데이터베이스 데이터 저장
/lnmp/log nginx, mysql 로그 저장
/lnmp/workspace 저장소 다양한 프로젝트 파일

/lnmp/.env docker 시작 시 환경 변수 구성
/lnmp/docker-compose.yml 빌드 시 구성 파일
/lnmp/php/Dockerfile PHP 구성 파일 컴파일

Nginx 빌드

Create a project

먼저 정적 파일을 생성합니다. /lnmp/conf/nginx.conf 파일 만들기

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Document</title>
</head>
<body>
    Hello, Docker!
</body>
</html>

가상 호스트 구성

/lnmp/conf/conf.d/default.conf 파일 만들기

참고: 루트 아래 경로는 /var/www여야 합니다. /html, 기본값은 로컬 작업공간 아래의 폴더입니다

SOURCE_DIR=./workspace
HTTP_HOST=80

NGINX_VERSION=alpine
NGINX_CONFD_DIR=./conf/conf.d
NGINX_CONF_FILE=./conf/nginx.conf
NGINX_LOG_DIR=./log

SOURCE_DIR=./workspace workspace文件夹挂载到nginx下的 /var/www/html
HTTP_HOST=80           宿主机的80端口映射到nginx下的80端口
NGINX_VERSION=alpine   nginx镜像使用alpine版本
NGINX_CONFD_DIR=./conf/conf.d   conf.d文件夹挂载到nginx下的/etc/nginx/conf.d
NGINX_CONF_FILE=./conf/nginx.conf   nginx.conf挂载nginx的 /etc/nginx/nginx.conf
NGINX_LOG_DIR=./log

Nginx 구성 빌드

docker-composer.yml을 편집하세요

다음 ${}는 위의 .env 파일에 구성된 모든 변수입니다

user  nginx;
worker_processes  1;

pid        /var/run/nginx.pid;
error_log  /var/log/nginx/nginx.error.log warn;

events {
    worker_connections  1024;
}


http {
    include       /etc/nginx/mime.types;
    default_type  application/octet-stream;

    log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                      '$status $body_bytes_sent "$http_referer" '
                      '"$http_user_agent" "$http_x_forwarded_for"';

    access_log  /var/log/nginx/nginx.access.log  main;

    sendfile        on;
    #tcp_nopush     on;

    keepalive_timeout  65;

    #gzip  on;

    include /etc/nginx/conf.d/*.conf;
}

Nginx 시작

명령을 실행한 후 Raspberry Pi의 IP에 액세스합니다. 일반적으로 Hello, Docker!

server {
    listen       80;
    server_name  localhost default-server;
    root   /var/www/html/default;
    index  index.php index.html index.htm;

    access_log  /var/log/nginx/nginx.localhost.access.log  main;
    error_log  /var/log/nginx/nginx.localhost.error.log  warn;

    #error_page  404              /404.html;

    # redirect server error pages to the static page /50x.html
    #
    error_page   500 502 503 504  /50x.html;
    location = /50x.html {
        root   /usr/share/nginx/html;
    }
}

Build PHP

/lnmp/.env를 편집하여 PHP 빌드 변수를 추가합니다

version: "3"
services:
  nginx:
    image: nginx:${NGINX_VERSION}
    ports:
      - ${HTTP_HOST}:80
    volumes:
      - ${SOURCE_DIR}:/var/www/html/:rw
      - ${NGINX_CONFD_DIR}:/etc/nginx/conf.d/:rw
      - ${NGINX_CONF_FILE}:/etc/nginx/nginx.conf:ro
      - ${NGINX_LOG_DIR}:/var/log/nginx/:rw
    restart: always

php 때문입니다. ini 구성이 좀 길어요. 다음 주소에 복사하시면 됩니다. php.ini

php-fpm.conf

Add Dockerfile

/lnmp/php/Dockerfile

$ docker-compose up

Add build PHP

/lnmp/docker-compose .yml 파일 편집

PHP_CONFIG_FILE=./conf/php.ini
PHP_FPM_CONFIG_FILE=./conf/php-fpm.conf

가상 호스트는 PHP 구문 분석을 지원합니다

/lnmp/conf/conf.d/default.conf

아래 fastcgi_pass php:9000의 php는 다음과 같은 서비스 이름을 나타냅니다. 위의 docker-compose.yml을 사용하면 특정 프로젝트의 PHP 버전을 지정하는 데 사용할 수 있습니다

ARG PHP_VERSION
FROM php:${PHP_VERSION}-fpm
RUN apt update
RUN apt-get install -y \
        libfreetype6-dev \
        libjpeg62-turbo-dev \
        libmcrypt-dev \
        libpng-dev \
        unixodbc-dev \
        gcc g++ make autoconf libc-dev pkg-config

파일을 추가하세요

/lnmp/workspace/default/index.php

version: "3"
services:
  nginx:
    image: nginx:${NGINX_VERSION}
    ports:
      - ${HTTP_HOST}:80
    volumes:
      - ${SOURCE_DIR}:/var/www/html/:rw
      - ${NGINX_CONFD_DIR}:/etc/nginx/conf.d/:rw
      - ${NGINX_CONF_FILE}:/etc/nginx/nginx.conf:ro
      - ${NGINX_LOG_DIR}:/var/log/nginx/:rw
    restart: always
  php:
    build: 
      context: ./php
      args:
        PHP_VERSION: 7.2
    volumes:
      - ${SOURCE_DIR}:/var/www/html/:rw
      - ${PHP_PHP_CONFIG_FILE}:/usr/local/etc/php/php.ini:ro
      - ${PHP_FPM_CONFIG_FILE}:/usr/local/etc/php-fpm.d/www.conf:rw
    cap_add:
      - SYS_PTRACE
    restart: always
    networks:
      - default

미리보기 시작

If 이전에 프로세스를 종료한 적이 없다면 ctrl + c를 사용하여 종료할 수 있습니다. 그런 다음 다음 명령을 실행합니다.

예기치 않은 일이 발생하지 않으면 Raspberry Pi에 액세스할 때 IP에 Hello, PHP!가 표시됩니다.

#...其它代码

location ~ \.php$ {
    fastcgi_pass   php:9000;
    fastcgi_index  index.php;
    include        fastcgi_params;
    fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;
}

Add PHP Extension

/lnmp/.env 다음은 다른 확장에 대한 데모입니다. , 다음 작업을 참고하세요.

<?php

echo ‘Hello, PHP!’;
/lnmp/docker-compose.yml

$ docker-compose up
/lnmp/php/Dockerfile에 변수를 추가할 수 있습니다. swoole
PHP_SWOOLE_VERSION=4.2.10
Recompile


참고: Dockerfile이 변경된 경우 , --build를 추가하고 다시 컴파일해야 합니다. 그렇지 않으면 docker-compose가 적용되지 않습니다

php:
    build: 
      context: ./php
      args:
        PHP_VERSION: 7.2
        PHP_SWOOLE: ${PHP_SWOOLE_VERSION}

Preview/lnmp/workspace/default/index.php를 편집하고 저장한 다음 Raspberry Pi의 IP에 액세스합니다. 예상대로 swoole 확장을 찾을 수 있습니다

# ...其它代码
ARG PHP_SWOOLE=false
RUN if [ ${PHP_SWOOLE} != false ]; then \
    curl -O http://pecl.php.net/get/swoole-${PHP_SWOOLE}.tgz -L \
    && pecl install swoole-${PHP_SWOOLE}.tgz \
    && docker-php-ext-enable swoole \
;fi

Build MYSQL

MYSQL 지속성

Docker 컨테이너 서비스는 데이터가 손실되지 않도록 삭제되었습니다.

Create /lnmp/data/mysql 폴더

빌드 시간 변수

/lnmp/.env 파일을 편집하고 mysql 서비스 포트, 로그인 비밀번호 및 데이터 지속성 폴더를 추가하세요.

$ docker-compose up --build
빌드 구성

<?php

phpinfo();
Start시작 후 데이터 연결 도구를 사용하여 테스트합니다. 링크 주소: Raspberry Pi IP 포트: 3306 사용자 이름: root 비밀번호: 1234

MYSQL_HOST_PORT=3306
MYSQL_PASSWORD=1234
MYSQL_DATA_DIR=./data/mysql
지금까지 자체 LNMP 작업 환경은 다음과 같습니다. 준비가 된.

위 내용은 Docker에서 LNMP 작업 환경 배포에 대한 튜토리얼(자세한 단계)의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
이 기사는 segmentfault.com에서 복제됩니다. 침해가 있는 경우 admin@php.cn으로 문의하시기 바랍니다. 삭제