>  기사  >  백엔드 개발  >  Nginx 및 Docker Compose를 사용하여 PHP 애플리케이션 배포 최적화

Nginx 및 Docker Compose를 사용하여 PHP 애플리케이션 배포 최적화

WBOY
WBOY원래의
2023-10-12 11:01:571489검색

使用Nginx和Docker Compose优化PHP应用程序的部署

Nginx 및 Docker Compose를 사용하여 PHP 애플리케이션 배포 최적화

소개:
인터넷 및 웹 애플리케이션이 발전하면서 널리 사용되는 프로그래밍 언어인 PHP는 다양한 웹 사이트 및 애플리케이션을 구축하는 데 널리 사용됩니다. 그러나 기존 배포 방법은 번거로운 환경 구성, 버전 충돌, 용량 확장의 어려움 등 몇 가지 문제에 직면할 수 있습니다. 이 경우 Nginx와 Docker Compose를 사용하면 PHP 애플리케이션의 배포 프로세스를 크게 단순화하고 개발자 생산성과 애플리케이션 안정성을 향상시킬 수 있습니다.

1. Nginx의 장점 및 기본 구성

Nginx는 오픈소스 고성능 웹 서버이자 역방향 프록시 서버입니다. 기존 Apache 서버와 비교하여 Nginx는 메모리 소비가 적고 동시 처리 기능이 높으며 성능이 더 좋습니다. 다음은 Nginx의 몇 가지 장점입니다.

  1. 고성능: Nginx는 비동기 비차단 이벤트 기반 아키텍처를 채택하여 더 낮은 하드웨어 구성에서 동시에 많은 수의 동시 연결을 처리할 수 있어 더 빠른 응답 시간을 제공합니다.
  2. 역방향 프록시: Nginx를 역방향 프록시 서버로 사용하여 클라이언트 요청을 여러 내부 애플리케이션 서버에 분산시켜 전반적인 로드 밸런싱과 성능을 향상시킬 수 있습니다.
  3. 높은 신뢰성: Nginx는 안정적이고 신뢰할 수 있는 작업 모드와 자동 오류 복구 메커니즘을 갖추고 있어 애플리케이션의 지속적인 가용성을 보장할 수 있습니다.

Nginx 기본 구성을 수행할 때 아래와 같이 간단한 nginx.conf 파일을 생성하고 그에 맞게 구성할 수 있습니다.

worker_processes  auto;
events {
    worker_connections  1024;
}
http {
    include       mime.types;
    default_type  application/octet-stream;
    server {
        listen       80;
        server_name  localhost;
        location / {
            root   /usr/share/nginx/html;
            index  index.php;
        }
        location ~ .php$ {
            root           /usr/share/nginx/html;
            fastcgi_pass   PHP_CONTAINER:9000;
            fastcgi_index  index.php;
            fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;
            include        fastcgi_params;
        }
    }
}

위 구성 파일에서는 포트 80을 수신하고 웹사이트를 지정하도록 구성되어 있습니다. 루트를 통해 루트 디렉터리와 서버 이름은 localhost입니다. 요청이 .php로 끝나면 요청은 PHP_CONTAINER라는 PHP 컨테이너로 전달되고 요청된 파일 이름은 처리를 위해 PHP 컨테이너에 전달됩니다.

2. Docker Compose 사용 및 예

Docker Compose는 컨테이너화된 애플리케이션 배포를 단순화하고 여러 컨테이너에서 애플리케이션을 정의하고 관리할 수 있는 도구입니다. Docker Compose는 YAML 파일을 사용하여 컨테이너 간의 관계와 매개변수를 구성하고 이러한 컨테이너를 관리하기 위한 간단한 명령을 제공합니다. 다음은 docker-compose.yml 파일의 예입니다.

version: '3'
services:
  web:
    build: .
    ports:
      - 80:80
    volumes:
      - .:/usr/share/nginx/html
    depends_on:
      - php

  php:
    build:
      context: .
      dockerfile: Dockerfile-php
    volumes:
      - .:/var/www/html

  db:
    image: mysql:5.7
    ports:
      - 3306:3306
    environment:
      MYSQL_ROOT_PASSWORD: password
      MYSQL_DATABASE: mydatabase

위의 예에서는 web, php, db의 3가지 서비스를 정의했습니다. 웹 서비스는 Dockerfile을 사용하여 Nginx 컨테이너를 빌드하고, 호스트의 현재 디렉터리를 컨테이너의 /usr/share/nginx/html 디렉터리에 매핑하고, 컨테이너의 포트 80을 호스트의 포트 80에 매핑합니다. php 서비스는 Dockerfile-php를 사용하여 PHP 컨테이너를 빌드하고 호스트의 현재 디렉터리를 컨테이너의 /var/www/html 디렉터리에 매핑합니다. db 서비스는 mysql:5.7 이미지를 사용하여 MySQL 컨테이너를 구축하고 컨테이너의 3306 포트를 호스트의 3306 포트에 매핑합니다.

3. Nginx 및 PHP 애플리케이션을 Docker Compose에 통합

다음으로 Nginx 및 PHP 컨테이너를 빌드하기 위해 해당 Dockerfile을 생성해야 합니다. 다음은 Dockerfile의 예입니다.

# 构建Nginx容器
FROM nginx:latest

# 将宿主机的配置文件复制到容器中
COPY nginx.conf /etc/nginx/conf.d/default.conf

# 定义容器启动时执行的命令
CMD ["nginx", "-g", "daemon off;"]

# 构建PHP容器
FROM php:7.4-fpm

# 安装PHP扩展和依赖库
RUN docker-php-ext-install pdo_mysql

# 定义容器启动时执行的命令
CMD ["php-fpm"]

위의 Dockerfile 예에서는 먼저 nginx:latest 이미지를 사용하여 Nginx 컨테이너를 빌드하고 호스트의 구성 파일을 컨테이너에 복사한 다음 php:7.4-fpm 이미지를 사용하여 빌드합니다. PHP 컨테이너를 설치하고 pdo_mysql 확장 및 기타 종속 라이브러리를 설치했습니다.

4. Docker Compose를 사용하여 PHP 애플리케이션 배포

위의 구성 및 정의를 완료한 후 Docker Compose를 사용하여 PHP 애플리케이션을 배포할 수 있습니다. 먼저 애플리케이션의 루트 디렉터리에 docker-compose.yml 파일을 만들고 위 예제의 콘텐츠를 해당 파일에 복사합니다. 그런 다음 명령줄에서 다음 명령을 실행하여 컨테이너를 빌드하고 시작합니다.

docker-compose build
docker-compose up -d

이 명령은 필요한 이미지를 빌드하고 컨테이너를 시작합니다. http://localhost에 액세스하면 배포된 PHP 애플리케이션에 액세스할 수 있습니다.

요약:
Nginx 및 Docker Compose를 사용하여 PHP 애플리케이션 배포를 최적화하면 배포 프로세스를 크게 단순화하고 개발자 생산성 및 애플리케이션 안정성을 향상시킬 수 있습니다. Nginx는 고성능 웹 서버 및 역방향 프록시 서버로서 많은 장점을 갖고 있으며, 컨테이너화된 애플리케이션을 위한 배포 도구인 Docker Compose는 여러 컨테이너를 보다 쉽게 ​​관리할 수 있습니다. 이러한 방식으로 PHP 애플리케이션을 배포하면 개발 프로세스가 더욱 효율적이 되고 애플리케이션을 쉽게 확장하고 유지 관리할 수 있습니다.

위 내용은 Nginx 및 Docker Compose를 사용하여 PHP 애플리케이션 배포 최적화의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.