Nginx + docker php-fpm

Nếu bạn là người mới sử dụng Docker, tôi khuyên bạn nên đọc nhiều phần "Docker là gì?"

Vì bạn vẫn đang đọc nên tôi cho rằng bạn đã quen thuộc với Docker và muốn chạy các ứng dụng PHP của mình trong các thùng chứa. Rốt cuộc, ai muốn giải quyết việc cài đặt tất cả các phụ thuộc trên máy trạm của riêng họ hoặc quản lý một loạt máy ảo cho nhiều dự án của họ?

Chúng tôi sẽ triển khai một ứng dụng PHP đơn giản bằng cách sử dụng kho Docker chính thức cho PHP và Nginx. Có một số kho Docker kết hợp PHP-FPM với Nginx, nhưng nếu bạn chỉ dựa vào các kho chính thức, thì bạn hoàn toàn an toàn và đúng cách

Trước tiên, hãy cài đặt Docker trên máy của bạn nếu bạn chưa cài đặt. Yêu cầu thứ hai là cài đặt Docker Compose. Chúng tôi có các công cụ cần thiết và mục tiêu trong tâm trí

thiết lập Nginx

Dựa trên yêu cầu của chúng tôi, Nginx sẽ là một vùng chứa. Vùng chứa này sẽ chạy hình ảnh Nginx chính thức. Vì chúng tôi đang sử dụng Docker Compose, bây giờ chúng tôi sẽ tạo docker-compose sau. tập tin yml. YAML này sẽ chạy hình ảnh Nginx mới nhất và đặt cổng 80 thành cổng 8080

version: "3.9"

services:
    web:
        image: nginx:latest
        ports:
            - "8080:80"

Bây giờ chúng ta có thể chạy container

$ docker-compose up

Bây giờ bạn sẽ thấy trang chào mừng của Nginx trên cổng 8080 qua localhost hoặc IP của máy cục bộ của bạn, thông qua trình duyệt bạn chọn

Bây giờ chúng ta có một máy chủ web đang chạy, hãy cấu hình thêm một chút. Trước tiên, chúng ta cần cập nhật docker-compose. yml để gắn thư mục cục bộ mà chúng ta cần bên trong bộ chứa Nginx của mình. Tôi sẽ sử dụng một thư mục có tên src, nằm trong cùng thư mục với docker-compose của chúng tôi. tập tin yml

version: "3.9"

services:
    web:
        image: nginx:latest
        ports:
            - "8080:80"
        volumes:
            - ./src:/var/www/html

Bước tiếp theo là cho Nginx biết rằng thư mục này tồn tại

Hãy tạo mặc định sau. conf ở cùng cấp độ với docker-compose. tập tin yml

server {
    index index.html;
    server_name phpfpm.local;
    error_log  /var/log/nginx/error.log;
    access_log /var/log/nginx/access.log;
    root /var/www/html;
}

Chúng tôi sẽ xem xét những gì chúng tôi đang làm ở đây ngay từ đầu. chỉ số. html sẽ là chỉ mục mặc định của chúng tôi, tên máy chủ là phpfpm. local và nó sẽ trỏ [Cập nhật tệp máy chủ của bạn nếu cần] vào môi trường Docker của bạn [Linux. máy chủ cục bộ, Mac hoặc Windows. IP cục bộ]. Chúng tôi vẫn đặt nhật ký trong trường hợp truy cập hoặc lỗi, để sau này chúng tôi cũng có thể xem nhật ký trong nhật ký soạn thảo Docker của mình. Cuối cùng, chúng tôi chỉ định thư mục gốc mà chúng tôi đã gắn trong vùng chứa

Để tiện ích mở rộng này có hiệu lực, chúng tôi cần thực hiện thêm một thay đổi đối với docker-compose. tập tin yml

version: "3.9"

services:
    web:
        image: nginx:latest
        ports:
            - "8080:80"
        volumes:
            - ./src:/var/www/html
            - ./default.conf:/etc/nginx/conf.d/default.conf

Điều này thêm mặc định. conf vào thư mục nơi Nginx tìm kiếm các tệp cấu hình để đưa vào. Bây giờ bạn có thể đặt một chỉ mục. html với bất kỳ nội dung nào trong thư mục src

Chúng tôi bắt đầu lại vùng chứa của mình

$ docker-compose up

Bây giờ hãy nhìn vào nội dung của chỉ mục. html trong trình duyệt của bạn dưới phpfpm. địa phương. 8080

Thêm PHP FPM

Bây giờ máy chủ web Nginx của chúng tôi đã hoạt động, chúng tôi có thể đưa PHP vào hoạt động. Đầu tiên, chúng tôi lấy repo PHP8-FPM chính thức và liên kết nó với bộ chứa Nginx của chúng tôi

Những điều sau đây cần được lưu ý. PHP chạy trong môi trường riêng của nó [vùng chứa] và không có quyền truy cập vào mã. Chúng ta cũng cần gắn thư mục src trong bộ chứa PHP. Bằng cách này, Nginx sẽ có thể phục vụ tất cả các tệp tĩnh và PHP sẽ có thể tìm thấy các tệp của nó để diễn giải

docker-compose của chúng tôi. yml bây giờ sẽ trông như thế này

version: "3.9"

services:
    web:
        image: nginx:latest
        ports:
            - "8080:80"
        volumes:
            - ./src:/var/www/html
            - ./default.conf:/etc/nginx/conf.d/default.conf
        links:
            - php-fpm
    php-fpm:
        image: php:8-fpm
        volumes:
            - ./src:/var/www/html

Tiếp theo, bạn cần định cấu hình Nginx để sử dụng bộ chứa PHP FPM để diễn giải các tệp PHP

Mặc định được cập nhật của chúng tôi. conf

server {
    index index.php index.html;
    server_name phpfpm.local;
    error_log  /var/log/nginx/error.log;
    access_log /var/log/nginx/access.log;
    root /var/www/html;
    location ~ \.php$ {
        try_files $uri =404;
        fastcgi_split_path_info ^[.+\.php][/.+]$;
        fastcgi_pass php-fpm:9000;
        fastcgi_index index.php;
        include fastcgi_params;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        fastcgi_param PATH_INFO $fastcgi_path_info;
    }
}

Để kiểm tra các thay đổi của chúng tôi, chúng tôi đổi tên chỉ mục. tệp html để lập chỉ mục. php và thay thế nội dung của nó

________số 8

Và cuối cùng nhưng không kém phần quan trọng

$ docker-compose up

Chúng tôi quay lại trình duyệt của chúng tôi. Sau khi làm mới, chúng tôi thấy thông tin PHP đáng thèm muốn

Giờ đây, bạn có thể chạy bất kỳ ứng dụng PHP đơn giản nào bằng bộ chứa Docker, sử dụng hình ảnh chính thức cho Nginx và PHP

Bạn có thể tìm thấy dự án ví dụ tại đây.
https. //github. com/IshtarStar/docker-compose-nginx-phpfpm

Hướng dẫn và cấu hình này, không bao giờ được sử dụng trên máy chủ sản xuất và không phải là ví dụ về phương pháp hay nhất. Bài đăng này nhằm mục đích giới thiệu về Docker Compose cho người mới bắt đầu

bạn muốn tạo một miền cục bộ trên mạng riêng của mình để các thiết bị hoặc dịch vụ khác có thể truy cập được, hãy đọc kỹ bài viết này. Làm cách nào để dễ dàng gán miền cục bộ tĩnh cho Raspberry Pi?

  • Được xuất bản vào ngày 28 tháng 4 năm 2021

Các bài viết khác của tác giả

Mục lục

Twitter

Facebook

LinkedIn

XINH

reddit

E-mail

PrevPrevious Article5 lỗi tiếp thị kỹ thuật số bạn nên tránh

Bài viết tiếp theoCác phương pháp hay nhất để bảo vệ trang web WordPress của bạn khỏi các cuộc tấn công mạngTiếp theo

4 phản hồi

  1. Joseph Zimmerman nói.

    Xin chào, Không chắc bạn đã biết chưa vì trang web này đã được một năm tuổi nhưng docker-compose thứ hai của bạn. khối yml có lỗi đánh máy trong đó

    Nó có "-. /src. /src” thay vì “-. /src. /var/www/html” đó là những gì tất cả các khối tệp yml khác có

    Chạy nó như một lỗi "không tìm thấy tệp" trên trang web. Thay đổi nó thành những gì người khác có, hoạt động

    Cảm ơn bạn cho hướng dẫn này

    1. Marc nói.

      Chào

      Vâng, thực sự đã có một lỗi đánh máy. Cảm ơn vì chỉ ra điều ấy. Mặc dù hướng dẫn đã khá “cũ” nhưng nó vẫn được cập nhật và có thể được sử dụng theo cách hiện đại. Hiện tại tôi đang viết bài mới về docker soạn thay thế podman. Còn lâu, hãy theo dõi

      Trân trọng
      Marc

  2. Stefan Chrobak nói.

    Bài đăng đầy đủ, cảm ơn rất nhiều, nếu tìm thấy hai điều quan trọng, nếu bạn muốn sử dụng nó cục bộ và cũng đã chạy một máy chủ web cục bộ [apache, nginx, etx…] hoặc/và chạy một Máy chủ DB cục bộ [mysql, v.v.]. ]

    Thông thường, máy chủ web cục bộ theo dõi cổng 8080, vì vậy chúng tôi gặp sự cố khi cố gắng chạy Vùng chứa trên cùng một cổng 80. 80.
    Tôi tạm thời sử dụng cách giải quyết đó [linux], nhưng thật tuyệt nếu có một. env_default để quản lý cái này đẹp hơn.

    Đầu tiên hãy tìm các cổng [web] cục bộ miễn phí.
    $ comm -23
    8087
    8085

    Tôi chỉnh sửa docker-compose. yml ở dòng 13 [dịch vụ. nginx. cổng].
    cổng.
    – "8087. 80"

    Cũng phải thay đổi cổng DB-Server ở dòng 42 [các dịch vụ. mariadb. cổng],
    vì cổng mặc định là 3306. 3306.
    cổng.
    – "3307. 3306. 80"

    Bây giờ tôi có một câu hỏi. tôi phải viết gì trong /etc/hosts để sử dụng
    ví dụ http. // docker. php8 thay vì http. //máy chủ cục bộ. 8087/

    [Xin lỗi vì tiếng Anh của tôi không tốt]

    1. Marc nói.

      Chào Stefan

      Tệp máy chủ chỉ dành cho phân giải tên máy chủ, trên Windows cũng như trên các hệ thống giống Unix. Bạn không thể đặt số cổng vào đó và không có cách nào để thực hiện những gì bạn muốn với cấu hình cấp hệ điều hành chung – trình duyệt là thứ chọn cổng để chọn

      Vì vậy, sử dụng dấu trang hoặc một cái gì đó. Một số phần mềm tường lửa/định tuyến có thể cho phép chuyển hướng cổng ra ngoài, nhưng điều đó không thực sự giống như một tùy chọn hấp dẫn cho việc này

      Cách cài đặt PHP

      Chạy hình ảnh PHP-FPM, gắn một thư mục từ máy chủ của bạn. .
      Sudo docker container run --rm -v $[pwd]. /var/www/html nanoninja/php-fpm chỉ mục php. php
      Sudo docker container run --rm --name phpfpm -v $[pwd]. /var/www/html -p 3000. 3000 nanoninja/php-fpm php -S="0. 0. 0. 0. 3000" -t="/var/www/html"

      Làm cách nào để sử dụng PHP với nginx Docker?

      Dịch vụ Nginx . Create a folder named PHP with Nginx and open it in Visual Studio Code. Bên trong nó, tạo một tệp có tên docker-compose. yml và viết cái này bên trong nó. Trong Docker Compose, bạn định nghĩa cái gọi là "dịch vụ", sẽ được đại diện bởi các container chạy trên docker.

      Cách sử dụng PHP

      Cung cấp ứng dụng PHP của bạn thông qua giao diện người dùng nginx .
      Bước 1. Tạo mạng. .
      Bước 2. Tạo một khối máy chủ. .
      Bước 3. Chạy hình ảnh PHP-FPM với một tên cụ thể. .
      Bước 4. Chạy hình ảnh nginx. .
      Bước 1. Chạy hình ảnh PHP-FPM. .
      Bước 2. Chỉnh sửa cấu hình. .
      Bước 3. Khởi động lại PHP-FPM. .
      Bước 1. Nhận hình ảnh cập nhật

      Tôi có thể chạy Nginx trong Docker không?

      Chạy NGINX Plus trong Docker Container . Sự khác biệt giữa việc sử dụng Docker với NGINX Open Source là trước tiên bạn cần tạo một image NGINX Plus, bởi vì NGINX Plus là một sản phẩm thương mại không có sẵn tại Docker Hub. Docker can also be used with NGINX Plus. The difference between using Docker with NGINX Open Source is that you first need to create an NGINX Plus image, because as a commercial offering NGINX Plus is not available at Docker Hub.

Chủ Đề