Php docker-soạn thảo

Trong hướng dẫn này, tôi sẽ trình bày cách bắt đầu tốt nhất với việc thiết lập môi trường phát triển PHP, hướng dẫn bạn cách thiết lập với Docker. Có rất nhiều cách để thiết lập môi trường phát triển PHP của bạn, nhưng sử dụng Docker là cách tốt nhất hiện nay

Tôi sẽ bắt đầu với một lịch sử ngắn gọn về cách mọi người đã thiết lập môi trường phát triển PHP của họ trong những năm qua, dẫn đến vị trí hiện tại của chúng tôi. Nhưng nếu bạn muốn bỏ qua tất cả những điều đó và chỉ để máy chủ của mình chạy, bạn có thể bỏ qua ngay các bước cấu hình

Một chút bối cảnh

Một trong những vấn đề với phát triển web là mọi thứ thay đổi với tốc độ chóng mặt. Các phương pháp hay nhất về CSS thay đổi khi các thuộc tính mới được thêm vào thông số kỹ thuật. [Làm sao chúng ta có thể xử lý mà không có CSS ​​Grid?] PHP hiện đã có phiên bản 8 và ngay cả những công cụ chúng ta sử dụng để thực thi các tập lệnh PHP cũng đang được tinh chỉnh theo thời gian. Kết quả là, rất nhiều hướng dẫn bị lỗi thời khá nhanh

Cho đến vài năm trước, tôi đã gửi cho mọi người mà tôi đang dạy bài báo xuất sắc của Bruno Skvorc Giới thiệu lại Vagrant. Cách đúng đắn để bắt đầu với PHP. Vào thời điểm đó, nó là một phần giới thiệu tuyệt vời về cách tốt nhất [khi đó] để thiết lập môi trường phát triển địa phương

Bài viết đó chỉ mới từ năm 2015, nhưng năm hoặc sáu năm là một khoảng thời gian dài trong khoảng thời gian phát triển web luôn chuyển động. “Con đường đúng đắn” đã thay đổi đáng kể kể từ đó

Tôi sẽ nhanh chóng tóm tắt mọi thứ đã thay đổi như thế nào trong những năm qua

1. Cài đặt thủ công PHP, MySQL và Apache

Nếu, giống như tôi, bạn đủ lớn để phát triển các trang web vào những năm 90, bạn sẽ nhớ trải nghiệm đó khó chịu như thế nào. Trước đó, nếu bạn thuộc nhóm thiểu số không chỉ phát triển trên máy chủ web trực tiếp [vâng, chúng tôi thực sự đã làm điều này, vâng, đó là một ý tưởng tồi tệ], bạn sẽ cài đặt Apache, PHP và MySQL theo cách thủ công trên máy phát triển của mình

Để thiết lập một môi trường phát triển cần có chuyên môn quan trọng. Bạn cần biết cách định cấu hình máy chủ web, cách định cấu hình PHP và bạn phải trải qua quá trình cài đặt và định cấu hình thủ công tất cả phần mềm bạn đã sử dụng. Đây là một nhiệm vụ tốn thời gian và khó khăn đối với các nhà phát triển mới làm quen.

2. Các gói được cấu hình sẵn như XAMPP

Vào đầu đến giữa những năm 2000, mọi người đã bắt đầu tập hợp tất cả các phần mềm cần thiết vào một gói duy nhất cài đặt và định cấu hình tất cả phần mềm bạn cần. Các gói này là những thứ như XAMPP và WAMP, và chỉ cần nhấp vào một nút, chúng đã cung cấp cho bạn một môi trường phát triển có thể sử dụng được

Nếu bạn tham gia nhiều nhóm facebook PHP khác nhau, bạn sẽ thấy rằng một phần đáng kể các nhà phát triển mới vẫn làm theo các hướng dẫn từ thời đại này và một số lượng lớn các nhà phát triển hiện tại không bao giờ chuyển sang, vì vậy XAMPP vẫn được sử dụng khá rộng rãi. Nếu điều này mô tả bạn, đã đến lúc tiếp tục

Sử dụng XAMPP giúp dễ dàng thiết lập và chạy môi trường phát triển web trên máy của bạn. Bài viết của Bruno vạch ra các vấn đề với cách tiếp cận này, nhưng vấn đề chính xảy ra khi bạn muốn đưa trang web của mình lên Web. Phiên bản PHP, MySQL và Apache [hoặc NGINX] có thể khác với phiên bản bạn đã cài đặt trong gói XAMPP của mình. Ngoài ra, có một vài sự khác biệt nhỏ nhưng khó chịu giữa Windows và Linux. Nếu bạn đang phát triển trang web của mình trên máy Windows và tải nó lên máy chủ Linux, một số mã của bạn có thể không hoạt động sau khi được tải lên

3. Máy ảo và Vagrant

Vào cuối những năm 2000 và đầu những năm 2010, xu hướng của các nhà phát triển là chuyển sang máy ảo. Ý tưởng là bạn có thể chạy một bản sao của hệ điều hành của máy chủ web thực với tất cả các chương trình đã cài đặt của nó — cấu hình và thiết lập chính xác giống như máy chủ web thực mà cuối cùng bạn sẽ triển khai trang web của mình. Bằng cách đó, khi bạn làm cho trang web hoạt động, sẽ không có khả năng nó không hoạt động

Mặc dù nhiều lập trình viên đã nhìn thấy lợi ích của một môi trường như vậy, nhưng độ khó và thời gian cần thiết để thiết lập điều này có nghĩa là rất ít người làm được. Đó là cho đến khi Vagrant [và các công cụ liên quan như Puphpet] xuất hiện và loại bỏ mọi rắc rối khi làm như vậy

Hãy xem bài viết mà tôi đã liên kết trước đó để biết mô tả tuyệt vời về Vagrant, Máy ảo và lợi ích của việc thiết lập môi trường phát triển theo cách này

4. docker

Tất cả nền tảng này đưa chúng ta đến ngày hôm nay và lý do cho bài viết này. Nếu Vagrant tuyệt vời như vậy, tại sao lại sử dụng thứ khác thay thế?

Những lợi ích chính của môi trường ảo được thiết lập bằng Vagrant là

  1. PC phát triển của bạn không bị ràng buộc vào một môi trường cụ thể. Bạn có thể lưu trữ nhiều trang web. một sử dụng Apache, một sử dụng NGINX, một sử dụng PHP 7 và một sử dụng PHP 8

  2. Khi trang web được đưa vào hoạt động, trang web sẽ được tải lên chính xác cùng một môi trường mà nó được phát triển trên đó

Thật dễ hiểu tại sao các nhà phát triển lại muốn điều này. Thực hiện bước tiếp theo để Docker giữ những lợi ích này trong khi tránh một số nhược điểm của môi trường Vagrant/Virtual Machine

Có gì sai với Vagrant?

Bất chấp những lợi ích, môi trường phát triển dựa trên Vagrant đưa ra những hạn chế và vấn đề của riêng nó

  1. Tài nguyên hệ thống. Vagrant yêu cầu chạy một hệ điều hành hoàn toàn khác. Bạn cần tải xuống và cài đặt hệ điều hành đang chạy trên máy chủ web của mình và tất cả các gói mà nó đã cài đặt. Điều này sử dụng một lượng đáng kể không gian đĩa và bộ nhớ. Một máy ảo thông thường sẽ cần ít nhất 512 MB RAM. Đó không phải là nhiều đối với máy tính ngày nay, nhưng nó nhanh chóng tăng lên. Nếu bạn muốn lưu trữ một trang web trên PHP 7 và một trên PHP 8, bạn cần cài đặt và định cấu hình hai phiên bản máy ảo khác nhau trên máy tính của mình

  2. Bạn phải đảm bảo máy ảo và máy chủ đồng bộ. Bất cứ khi nào bạn cập nhật máy chủ hoặc thay đổi cấu hình của máy chủ, bạn phải nhớ cập nhật môi trường phát triển cục bộ của mình với những thay đổi tương tự

  3. Nó khóa chặt bạn vào một hệ điều hành máy chủ và cấu hình. Di chuyển một trang web từ máy chủ này sang máy chủ khác là một nhiệm vụ khó khăn. Một trang web không chỉ là các tập lệnh PHP, hình ảnh và CSS tạo nên nó. Một cấu hình máy chủ cụ thể [chẳng hạn như phần mở rộng PHP đã cài đặt và

    version: '3'
    
    5/
    version: '3'
    
    6] cũng được yêu cầu để trang web hoạt động bình thường

  4. Có một sự lựa chọn rất hạn chế của các gói có sẵn. Tùy thuộc vào bản phân phối Linux mà máy chủ web của bạn đang chạy, bạn có thể không có bất kỳ lựa chọn nào về phiên bản PHP mà bạn chạy. Trừ khi bạn cài đặt các gói từ kho lưu trữ của bên thứ ba, bạn sẽ không thể sử dụng phiên bản PHP mới nhất và tốt nhất. Tại thời điểm viết bài, PHP 8 gần đây đã có sẵn. Nếu bạn đang sử dụng CentOS 8/RHEL 8, thì bạn đang mắc kẹt với PHP 7. 3 cho đến khi bạn nhận được phiên bản mới của hệ điều hành. Nếu bạn đang dùng Debian, phiên bản mới nhất hiện có là 7. 3. Các bản phân phối khác sẽ có sẵn các phiên bản khác nhau

  5. Cấu hình máy chủ là toàn cầu. PHP có tệp cài đặt có tên là

    version: '3'
    
    7. Việc thay đổi này sẽ áp dụng cấu hình đã cập nhật cho mọi trang web được lưu trữ trên máy chủ. Điều tương tự cũng xảy ra với
    version: '3'
    
    5 cho NGINX hoặc
    version: '3'
    
    6 cho Apache. Phiên bản cơ sở dữ liệu MySQL có cơ sở dữ liệu cho tất cả các trang được lưu trữ trên máy chủ. Thực hiện bất kỳ thay đổi cấu hình cơ sở dữ liệu quy mô lớn nào đang vươn xa. Cập nhật cài đặt MySQL sẽ ảnh hưởng đến mọi trang web sử dụng máy chủ MySQL đó

  6. Các phiên bản gói là toàn cầu trên máy chủ thực. Mặc dù có thể chạy nhiều phiên bản PHP trên cùng một máy chủ web, nhưng rất khó để định cấu hình và có thể có các tác dụng phụ kỳ lạ tùy thuộc vào những gì tập lệnh của bạn đang thực hiện [chẳng hạn như khi bạn có một tập lệnh muốn chạy trong một đơn vị systemd/cronjob và

Mặc dù có thể khắc phục điểm 5 và 6 trên máy phát triển bằng cách chạy các máy ảo Vagrant khác nhau, nhưng bạn sẽ cần một máy chủ web thực phản ánh từng cấu hình bạn đang chạy để các trang web hoạt động khi bạn tải chúng lên

Giới thiệu Docker

Docker giải quyết tất cả các vấn đề được liệt kê ở trên. Nhưng Docker là gì và nó hoạt động như thế nào?

Hãy bắt đầu với phần giới thiệu từ Wikipedia

Docker là một tập hợp các sản phẩm nền tảng dưới dạng dịch vụ [PaaS] sử dụng ảo hóa cấp hệ điều hành để phân phối phần mềm trong các gói được gọi là bộ chứa. Các thùng chứa được cách ly với nhau và đóng gói phần mềm, thư viện và tệp cấu hình của riêng chúng;

Trước khi đi sâu vào kỹ thuật, lợi ích thiết thực đối với chúng tôi với tư cách là nhà phát triển web là Docker cho phép chúng tôi đóng gói mọi thứ mà trang web cần, tất cả mã PHP cùng với tệp thực thi PHP, máy chủ MySQL và máy chủ NGINX cùng với các tệp cấu hình được sử dụng bởi những người đó.

Tất cả mã của trang web và các phiên bản chính xác của chương trình cần thiết để chạy mã đó, được đóng gói cùng nhau, hiệu quả như một ứng dụng duy nhất. Toàn bộ ứng dụng này sau đó có thể chạy trên bất kỳ hệ điều hành nào. Khi ai đó chạy ứng dụng được đóng gói, PHP, MySQL, NGINX và tất cả các tệp PHP mà bạn đã viết đều được nhúng trong chính ứng dụng đó. Thậm chí tốt hơn, các phiên bản MySQL, NGINX và PHP chính xác là một phần của gói. Khi bạn chạy ứng dụng, các phiên bản chính xác của các công cụ này mà ứng dụng được phát triển sẽ được tải xuống và cài đặt

“Đó không phải là điều mà một máy ảo đã làm rồi sao?” . Đúng vậy, nhưng có một sự khác biệt lớn giữa cách Vagrant và Docker xử lý cài đặt phần mềm

Với Vagrant, chạy Máy ảo, hệ điều hành hoàn chỉnh với phiên bản PHP cụ thể, phiên bản MySQL và cấu hình máy chủ [thường] được sao chép từ máy chủ web thực. Khi máy chủ được cập nhật, máy ảo cũng phải được cập nhật

Tuy nhiên, khi sử dụng Docker, phiên bản PHP/MySQL/NGINX được cung cấp dưới dạng một gói duy nhất được gọi là hình ảnh và máy chủ có thể chạy bao nhiêu hình ảnh khác nhau tùy thích

Lợi ích ở đây là máy chủ web và máy phát triển của bạn đều chạy cùng một hình ảnh. Bạn chỉ cần tải hình ảnh của mình lên máy chủ web, chạy toàn bộ ứng dụng ở đó và trang web của bạn hoạt động mà không cần bất kỳ cấu hình máy chủ web nào cả

Ngoài ra, mỗi hình ảnh hoàn toàn tách biệt với hình ảnh khác trên máy chủ. Mỗi hình ảnh [một hình ảnh trên mỗi trang web trong ví dụ đơn giản này] tách biệt với nhau. Mỗi trang web sẽ có cấu hình NGINX riêng,

version: '3'
7 riêng và cài đặt PHP và MySQL riêng. Mỗi trang web có thể chạy các phiên bản PHP hoàn toàn khác nhau. Bạn thậm chí có thể có một trang web chạy trên Apache và một trang web chạy trên NGINX, trên cùng một máy tại cùng một thời điểm. Ngay cả khi bạn đang chạy hai trang web NGINX khác nhau, bạn sẽ có hai quy trình NGINX khác nhau, với cấu hình riêng, chạy cùng một lúc

Điều này có một chi phí bộ nhớ nhỏ, nhưng tính linh hoạt mà nó mang lại khiến đây là một sự đánh đổi rất đáng giá

  1. Toàn bộ trang web, với các phiên bản PHP/MySQL được yêu cầu, tất cả cấu hình và tất cả mã có thể được di chuyển dễ dàng. Di chuyển trang web sang một máy chủ mới chỉ cần sao chép một thư mục. Bạn không cần thực hiện bất kỳ thay đổi nào đối với cấu hình PHP hoặc NGINX trên máy chủ mới. Bạn thậm chí không cần cài đặt PHP hoặc NGINX trên chính máy chủ. Chúng sẽ được Docker tự động cài đặt khi bạn khởi chạy ứng dụng

  2. Bạn có thể chạy cùng một hình ảnh trên máy phát triển của mình. Sử dụng Vagrant, bạn đang chạy một cách hiệu quả một bản sao cấu hình của máy chủ/các gói đã cài đặt trên cùng một máy. Với Docker, cùng một hình ảnh chính xác được chạy trên PC của bạn để phát triển giống như đang được chạy trên máy chủ

  3. version: '3'
    
    7 chỉnh sửa,
    version: '3'
    
    5 thay đổi cấu hình hoặc cập nhật PHP lên phiên bản mới nhất được xử lý giống như tải mã PHP đã cập nhật lên máy chủ. Bạn cập nhật ứng dụng và không quan trọng đó là thay đổi một số mã PHP hay cập nhật
    version: '3'
    
    7

  4. Mỗi hình ảnh được chứa trong một thứ gọi là “thùng chứa”. Một tập lệnh PHP đang chạy trong một hình ảnh không thể truy cập các tệp đang chạy trong một hình ảnh khác. Hãy suy nghĩ

    version: '3'
    services:
        web:
            image: nginx:1.18.0
            ports:
                - "80:80"
    
    6 nhưng chặt chẽ hơn nhiều. Container giống như một máy ảo rất nhẹ. Nó hoạt động giống như hệ điều hành của chính nó và mã chạy trong một thùng chứa thậm chí không biết nó đang chạy bên trong nó trong khi không thể nhìn thấy bất cứ thứ gì bên ngoài thùng chứa. Nếu một trong các tập lệnh PHP của bạn không an toàn và cấp cho ai đó quyền truy cập trình bao hiệu quả, thì họ chỉ có thể truy cập các tệp trên máy chủ mà bạn đã cấp quyền truy cập vùng chứa

  5. Không giống như máy ảo, nếu hai trang web khác nhau nằm trong các vùng chứa hoàn toàn khác nhau nhưng sử dụng cùng một phiên bản NGINX hoặc PHP, dung lượng ổ đĩa và RAM sẽ được chia sẻ giữa hai vùng chứa

  6. Bởi vì mỗi hình ảnh là độc lập, việc di chuyển trang web đến một máy chủ khác rất dễ dàng. Ứng dụng không phụ thuộc vào phiên bản PHP đã cài đặt của máy chủ và nó không quan tâm gói nào được cài đặt trên máy chủ. Nếu bạn muốn di chuyển ứng dụng Dockerized sang một máy chủ khác, đơn giản như sao chép tất cả các tệp trang web và khởi chạy ứng dụng

  7. Bạn có thể chạy bao nhiêu hình ảnh Docker trên máy chủ tùy thích, mỗi hình ảnh có phiên bản PHP, phần mềm máy chủ web, cơ sở dữ liệu và các tệp liên quan của riêng chúng

Thiết lập mọi thứ

Đó là lý thuyết ngoài lề. Bây giờ hãy bắt đầu và tạo một máy chủ bằng Docker

điều kiện tiên quyết

Trước khi bắt đầu, bạn cần tải xuống và cài đặt Docker. Truy cập trang web Docker, sau đó tải xuống và cài đặt nó cho hệ điều hành của bạn

Nếu bạn đang dùng Linux, bạn nên cài đặt các gói

version: '3'
services:
    web:
        image: nginx:1.18.0
        ports:
            - "80:80"
7 và
version: '3'
services:
    web:
        image: nginx:1.18.0
        ports:
            - "80:80"
8 thông qua trình quản lý gói của bản phân phối của bạn. Tùy thuộc vào phân phối của bạn, bạn có thể cần phải

  1. Thêm người dùng của bạn vào nhóm

    version: '3'
    services:
        web:
            image: nginx:1.18.0
            ports:
                - "80:80"
    
    7 như được nêu trong hướng dẫn sử dụng Docker tại đây

  2. Bắt đầu dịch vụ

    version: '3'
    services:
        web:
            image: nginx:1.18.0
            ports:
                - "80:80"
    
    7
    version: '3'
    
    61 và kích hoạt nó với
    version: '3'
    
    62

Nếu bạn đang dùng Windows hoặc macOS, trình cài đặt sẽ làm việc này cho bạn

Thứ hai, bởi vì chúng tôi sẽ chạy một máy chủ web bên trong Docker và chuyển tiếp một số cổng nếu bạn đã có máy chủ web [Apache, NGINX, XAMPP, IIS, v.v. ] hoặc MySQL đang chạy trên máy của bạn, hãy dừng chúng trước khi tiếp tục

Bắt đầu

Một máy chủ web thường bao gồm nhiều chương trình khác nhau — chẳng hạn như NGINX, PHP và MySQL. Theo thuật ngữ của Docker, mỗi chương trình bạn muốn cài đặt là một dịch vụ

Có một số cách để tạo các dịch vụ này trong Docker. Tôi sẽ bao gồm thân thiện với người dùng nhất. Docker hỗ trợ tạo tệp cấu hình bằng YAML [Yet Another Markup Language]

Mặc dù bạn có thể nhập tất cả các tùy chọn trên dòng lệnh, nhưng tôi khuyên bạn nên sử dụng tệp cấu hình YAML vì một số lý do

  1. Nó dễ đọc/hiểu hơn rất nhiều

  2. Bạn không phải gõ lại nhiều câu lệnh dài dòng mỗi khi muốn chạy máy chủ

  3. Bạn có thể theo dõi các thay đổi đối với tệp bằng Git

version: '3'
63 cho NGINX

Docker cung cấp một công cụ có tên là

version: '3'
services:
    web:
        image: nginx:1.18.0
        ports:
            - "80:80"
8 lấy tệp cấu hình có tên là
version: '3'
63 và khởi chạy các dịch vụ được liệt kê bên trong nó. Hãy bắt đầu bằng cách thêm một máy chủ web, NGINX

Đầu tiên, tạo một thư mục ở đâu đó trên máy tính của bạn sẽ lưu trữ trang web của bạn. Bạn sẽ cần quay lại thư mục này thường xuyên, vì vậy hãy nhớ vị trí của nó. Tạo

version: '3'
63 với nội dung sau

version: '3'
2

Chúng ta hãy xem qua cấu hình từng dòng một

version: '3'

Điều này cho

version: '3'
services:
    web:
        image: nginx:1.18.0
        ports:
            - "80:80"
8 biết phiên bản nào của đặc tả YAML sẽ sử dụng.
version: '3'
68 là phiên bản mới nhất và các phiên bản khác nhau có thông số kỹ thuật, từ khóa và cấu trúc hơi khác nhau

Dòng tiếp theo,

version: '3'
69, sẽ được theo sau bởi danh sách tất cả các dịch vụ bạn muốn chạy

Trong ví dụ của chúng tôi cho đến nay, chỉ có một dịch vụ có tên là

version: '3'
70 [bạn có thể gọi nó là gì tùy thích] sử dụng hình ảnh NGINX chính thức là
version: '3'
71. Lưu ý rằng thụt đầu dòng sử dụng dấu cách [không phải tab. ] vấn đề. YAML dựa vào cấp độ lồng nhau để xác định cấu trúc của tệp

Nếu bạn muốn chỉ định một phiên bản NGINX khác, bạn có thể chỉ định ở đây như vậy

version: '3'
services:
    web:
        image: nginx:1.18.0
        ports:
            - "80:80"

Tôi khuyên bạn nên sử dụng

version: '3'
72 trừ khi bạn có lý do chính đáng để sử dụng phiên bản cũ hơn

Khối

version: '3'
73 thiết lập cổng chuyển tiếp. Nó chuyển tiếp
version: '3'
74 trên máy cục bộ sang
version: '3'
74 trên hình ảnh. Mọi yêu cầu trên máy chủ tới
version: '3'
76 sẽ được chuyển tiếp tới máy chủ NGINX đang chạy trong vùng chứa

Chạy dịch vụ

Để khởi động máy chủ, bạn cần mở một thiết bị đầu cuối trong hệ điều hành của mình và trỏ nó vào thư mục chứa tệp

version: '3'
63 của bạn. Trên Windows 10, phương pháp đơn giản nhất là sử dụng File Explorer [trước đây gọi là Windows Explorer và đừng nhầm lẫn với Internet Explorer]. Điều hướng đến thư mục chứa
version: '3'
63 của bạn, sau đó nhấp vào Tệp và sau đó là Mở Windows Powershell. Trên Linux, hầu hết các trình quản lý tệp đều có Open Terminal Here hoặc nút tương tự. Trên macOS, trước tiên bạn cần bật tùy chọn này

Khi bạn đã mở thiết bị đầu cuối của mình ở đúng vị trí, hãy nhập

version: '3'
79. Bạn sẽ thấy đầu ra tương tự như hình bên dưới

Nếu bạn nhận được bất kỳ thông báo lỗi nào, hãy kiểm tra xem Docker đã được cài đặt và chạy đúng chưa. Nếu bạn thấy đầu ra như trên, bạn có thể kết nối với máy chủ bằng cách truy cập http. //127. 0. 0. 1 trong trình duyệt của bạn. Nếu nó hoạt động, bạn sẽ thấy trang thử nghiệm của NGINX, như hình bên dưới

Tại sao không phải là Apache?

Trước khi chúng tôi tiếp tục, bạn có thể thắc mắc tại sao tôi không sử dụng Apache ở đây. Nếu bạn đang sử dụng XAMPP hoặc gói tương tự, máy chủ web bạn đang sử dụng là Apache. Máy chủ web là một phần của máy chủ lắng nghe yêu cầu từ trình duyệt web và gửi tệp cho nó

Apache vẫn ổn, và nó hoạt động, nhưng nó tồn tại mãi mãi. Khi Apache được tạo ra, Web là một nơi rất khác. Apache rất lớn và có rất nhiều tính năng khác nhau đã xuất hiện và biến mất — nhưng những tính năng mà Apache vẫn hỗ trợ. Web đã thay đổi rất nhiều kể từ khi Apache được tạo ra và mặc dù đây là một máy chủ có khả năng hoạt động tốt, nhưng hầu hết các trang web ngày nay đều có xu hướng sử dụng NGINX. Nó dễ cấu hình hơn, nhẹ hơn và được điều chỉnh tốt hơn cho các loại nhiệm vụ mà nhiều trang web hiện đại sử dụng [chẳng hạn như truyền phát video] và do đó, thị phần của nó đang tăng lên nhanh chóng với chi phí của Apache.

Lời khuyên chung của tôi là. nếu bạn đã có một trang web chạy Apache, thì không có lý do gì để thay đổi nó, nhưng nếu bạn đang bắt đầu một dự án mới từ đầu, hãy sử dụng NGINX

Đưa tập tin lên máy chủ

Bây giờ máy chủ đã được cài đặt và chạy qua Docker, chúng tôi có thể hiển thị các tệp của mình trên máy chủ. Nếu bạn đã quen với Apache, bạn sẽ đặt chúng vào thư mục

version: '3'
80,
version: '3'
81 hoặc
version: '3'
82 ở đâu đó trên máy tính của mình

Vì máy chủ đang chạy trong một vùng chứa nên nó không có quyền truy cập vào bất kỳ tệp nào trên máy tính của bạn. Tuy nhiên, Docker cho phép bạn chỉ định một ổ đĩa — một tệp hoặc thư mục trên máy tính của bạn được chia sẻ với vùng chứa. Bạn sẽ cần hai tập. tệp cấu hình

version: '3'
5 [mà chúng tôi chưa tạo] và một thư mục sẽ lưu trữ các tệp của trang web của bạn. Sửa đổi
version: '3'
63 của bạn để bao gồm hai
version: '3'
85

version: '3'
6

Thao tác này làm cho thư mục tệp

version: '3'
5 và
version: '3'
87 từ cùng thư mục với tệp
version: '3'
63 của bạn có sẵn trong vùng chứa. Bất kỳ thay đổi nào bạn thực hiện đối với các tệp trong ổ sẽ được thay đổi ngay lập tức trong vùng chứa và các tệp được chia sẻ giữa chúng

Tệp

version: '3'
5 từ máy chủ được đặt tại
version: '3'
90 bên trong vùng chứa. Đây là thư mục nơi NGINX đọc các tệp cấu hình từ. Thư mục
version: '3'
87 được tạo ở thư mục gốc của vùng chứa trong
version: '3'
92 và là nơi bạn sẽ đặt tất cả các tập lệnh PHP, hình ảnh và tệp JavaScript của trang web của mình

Trước khi khởi động lại máy chủ, hãy tạo tệp

version: '3'
5 trong cùng thư mục với tệp
version: '3'
63 của bạn với nội dung sau

version: '3'
7

Điều này cho NGINX biết rằng đây là cấu hình mà nó sẽ sử dụng cho máy chủ mặc định và nó sẽ phục vụ các tệp từ thư mục

version: '3'
95. Chúng tôi chỉ có thể cung cấp các tệp từ thư mục
version: '3'
92, nhưng tốt nhất là giữ hầu hết các tệp PHP ngoài thư mục có thể truy cập công khai. Vì các tập lệnh PHP sẽ cần tải các tệp bằng cách sử dụng
version: '3'
97, chúng tôi sẽ đặt thư mục chung xuống một cấp

Để kiểm tra xem nó có hoạt động không, hãy tạo trang “Xin chào, Thế giới” tại

version: '3'
98, tạo các thư mục khi bạn thực hiện. Nội dung chỉ có thể là như vậy

version: '3'
8

Khởi động lại máy chủ bằng cách quay lại thiết bị đầu cuối của bạn và nhấn

version: '3'
99 để dừng máy chủ, sau đó chạy lại lệnh
version: '3'
79 để khởi động lại. [Bạn có thể nhấn mũi tên lên rồi Enter chứ không cần gõ lại. ]

Tải lại http. //127. 0. 0. 1 trong trình duyệt của bạn và bạn sẽ thấy Hello, World. trang thử nghiệm. Bây giờ bạn có một máy chủ web đang hoạt động với các tệp của bạn đang được cung cấp trên http. //127. 0. 0. 1 từ thư mục

version: '3'
services:
    web:
        image: nginx:1.18.0
        ports:
            - "80:80"
21 của bạn

PHP

Nếu bạn muốn chạy các tập lệnh PHP, bạn sẽ cần thêm một dịch vụ khác cho PHP vào

version: '3'
63 của mình và liên kết nó với
version: '3'
services:
    web:
        image: nginx:1.18.0
        ports:
            - "80:80"
23

version: '3'
9

Có một dịch vụ mới,

version: '3'
services:
    web:
        image: nginx:1.18.0
        ports:
            - "80:80"
24, đang sử dụng hình ảnh
version: '3'
services:
    web:
        image: nginx:1.18.0
        ports:
            - "80:80"
25. Đối với NGINX, bạn sẽ cần sử dụng gói
version: '3'
services:
    web:
        image: nginx:1.18.0
        ports:
            - "80:80"
26 [FastCGI Process Manager], nhưng bạn có thể chọn bất kỳ phiên bản PHP nào bạn thích — chẳng hạn như
version: '3'
services:
    web:
        image: nginx:1.18.0
        ports:
            - "80:80"
27,
version: '3'
services:
    web:
        image: nginx:1.18.0
        ports:
            - "80:80"
28,
version: '3'
services:
    web:
        image: nginx:1.18.0
        ports:
            - "80:80"
29. Nếu bạn không chỉ định phiên bản và chỉ sử dụng
version: '3'
20, nó sẽ sử dụng phiên bản mới nhất — tại thời điểm viết bài này, là
version: '3'
21

Vì PHP sẽ cần truy cập các tệp

version: '3'
22 của bạn từ thư mục
version: '3'
92, nên bạn sẽ cần gắn ổ đĩa vào ảnh PHP giống như cách bạn đã làm với ảnh NGINX. PHP không cần quyền truy cập vào tệp cấu hình
version: '3'
5, vì vậy không cần cấp cho nó quyền truy cập vào tệp đó

Thư mục

version: '3'
87 hiện có thể truy cập được trên máy chủ và trong các vùng chứa
version: '3'
services:
    web:
        image: nginx:1.18.0
        ports:
            - "80:80"
23 và
version: '3'
services:
    web:
        image: nginx:1.18.0
        ports:
            - "80:80"
24

Trước khi khởi động lại máy chủ với

version: '3'
79, chúng ta cần định cấu hình NGINX để chạy các tệp
version: '3'
22 thông qua dịch vụ PHP. Mở
version: '3'
5 của bạn và thay đổi nó như sau

version: '3'
services:
    web:
        image: nginx:1.18.0
        ports:
            - "80:80"
2

Dòng

version: '3'
41 yêu cầu máy chủ tìm kiếm
version: '3'
42 thay vì
version: '3'
43 làm trang mặc định. Khối
version: '3'
44 hướng dẫn NGINX chạy bất kỳ tệp nào có phần mở rộng
version: '3'
22 thông qua dịch vụ PHP [
version: '3'
46, trong đó
version: '3'
services:
    web:
        image: nginx:1.18.0
        ports:
            - "80:80"
24 là tên của dịch vụ được định cấu hình trong
version: '3'
63]

Tạo tệp

version: '3'
49 tại
version: '3'
00

version: '3'
2

Khởi động lại máy chủ bằng cách nhấn

version: '3'
99 trong thiết bị đầu cuối của bạn và chạy lại lệnh
version: '3'
79. Nếu mọi thứ được thiết lập chính xác, khi bạn truy cập http. //127. 0. 0. 1 bạn sẽ thấy đầu ra
version: '3'
03

Giả sử trang web của bạn đang sử dụng MySQL, nếu bạn xem qua trang

version: '3'
03, bạn sẽ nhận thấy rằng không có trình điều khiển PHP MySQL nào được cài đặt. Chúng tôi sẽ muốn cài đặt gói PDO trong PHP

Điều này phức tạp hơn một chút, vì chúng ta cần cài đặt các gói trong hình ảnh. May mắn thay, hình ảnh PHP chính thức chứa một tập lệnh để thực hiện việc đó

Chúng tôi sẽ sử dụng hình ảnh chính thức của

version: '3'
20 làm cơ sở và cài đặt trình điều khiển PDO MySQL vào đó. Điều này đòi hỏi phải xây dựng hình ảnh của chính chúng ta, nhưng điều đó không khó như ta tưởng

Đầu tiên, sửa đổi

version: '3'
63 của bạn để hướng dẫn nó xây dựng hình ảnh cho PHP thay vì sử dụng hình ảnh
version: '3'
20 hiện có

version: '3'
4

Thay vì một mục nhập

version: '3'
08, giờ đây có một dòng
version: '3'
09 bên dưới
version: '3'
services:
    web:
        image: nginx:1.18.0
        ports:
            - "80:80"
24. Chỉ thị
version: '3'
11 là thư mục chứa tệp cấu hình, trong trường hợp của chúng tôi là
version: '3'
12, thư mục hiện tại [cùng thư mục với
version: '3'
63 của chúng tôi] và
version: '3'
14 là tên của tệp chúng tôi sẽ sử dụng để xây dựng hình ảnh của mình

Tạo

version: '3'
15 trong cùng thư mục với
version: '3'
63 của bạn và thêm phần sau

version: '3'
0

Thao tác này sẽ cài đặt tiện ích mở rộng

version: '3'
17 cho PHP. Chỉ thị
version: '3'
18 nói với Docker rằng nó nên sử dụng
version: '3'
20 làm hình ảnh cơ sở và chỉ thị
version: '3'
20 được sử dụng để chạy các lệnh bên trong hình ảnh. Bạn có thể chạy bất kỳ lệnh Linux nào tại đây. Trong trường hợp này, chúng tôi đang chạy tập lệnh
version: '3'
21, được cung cấp thuận tiện như một phần của gói PHP chính thức và cho phép chúng tôi cài đặt các tiện ích mở rộng PHP

Nếu bạn muốn sử dụng thư viện MySQLi [mặc dù có lẽ bạn nên sử dụng PDO], bạn có thể cài đặt thư viện đó thay vì hoặc cùng với PDO

version: '3'
1

Khởi động lại máy chủ của bạn bằng lệnh

version: '3'
79. Lần này, bạn sẽ thấy nhiều đầu ra hơn khi nó xây dựng hình ảnh. Nó sẽ chỉ làm điều này trong lần đầu tiên bạn chạy
version: '3'
79. Tuy nhiên, nếu bạn thực hiện bất kỳ thay đổi nào đối với
version: '3'
15 trong tương lai, bạn sẽ cần xây dựng lại nó theo cách thủ công bằng cách chạy lệnh
version: '3'
25

Bạn có thể xác minh rằng tiện ích mở rộng

version: '3'
17 đã được cài đặt bằng cách xem đầu ra
version: '3'
03 trên http. //127. 0. 0. 1

Trong khi chúng tôi đang cài đặt tiện ích mở rộng, hãy thêm tiện ích mở rộng

version: '3'
28 để có thông báo lỗi đẹp hơn trên máy chủ phát triển của chúng tôi

version: '3'
2

version: '3'
28 được cài đặt thông qua
version: '3'
30, được cung cấp như một phần của hình ảnh PHP chính thức. Xây dựng lại hình ảnh bằng
version: '3'
25, sau đó khởi động lại máy chủ bằng
version: '3'
79. Đầu ra của
version: '3'
03 sẽ hiển thị rằng cả
version: '3'
17 và
version: '3'
28 đều được cài đặt

mysql

Bây giờ chúng ta đã sẵn sàng để cài đặt MySQL. Một lần nữa, chúng tôi sẽ thêm nó làm dịch vụ trong

version: '3'
63. Tuy nhiên, thay vì cài đặt hình ảnh MySQL chính thức, chúng tôi sẽ sử dụng MariaDB, một giải pháp thay thế thả xuống với các điều khoản cấp phép có khả năng tốt hơn trong tương lai khi MySQL thuộc sở hữu của Oracle. Nếu bạn đã sử dụng MySQL trước đây, MariaDB sẽ hoạt động giống như vậy

version: '3'
3

Hình ảnh chúng tôi đang sử dụng là

version: '3'
37. Như với NGINX và PHP, nếu muốn, bạn có thể chỉ định một phiên bản cụ thể của MariaDB tại đây

Lần này có một khối

version: '3'
38, được sử dụng để chuyển một số biến vào vùng chứa khi nó được tạo. Chúng được sử dụng để định cấu hình cơ sở dữ liệu với các tùy chọn sau. Đặt giá trị của riêng bạn cho các biến sau

  • version: '3'
    
    39. mật khẩu gốc cho cơ sở dữ liệu. Bạn có thể sử dụng điều này để đăng nhập với tên
    version: '3'
    
    40 và quản lý cơ sở dữ liệu

  • version: '3'
    
    41 và
    version: '3'
    
    42. tên và mật khẩu cho người dùng MySQL được tạo với quyền hạn chế. Bạn sẽ muốn sử dụng cái này từ các tập lệnh PHP của mình

  • version: '3'
    
    43. tên của lược đồ được tạo tự động mà người dùng đã xác định ở trên có quyền truy cập vào

Ví dụ trên tạo một cơ sở dữ liệu có tên là

version: '3'
44, có thể truy cập bằng cách sử dụng người dùng
version: '3'
44 và mật khẩu
version: '3'
46

Bạn cũng sẽ nhận thấy rằng có một mục nhập

version: '3'
85 ở dưới cùng. Điều này tạo ra một loại ổ đĩa đặc biệt không được ánh xạ tới hệ thống tệp cục bộ. Đây sẽ là nơi lưu trữ dữ liệu cho MySQL — tất cả các bảng, bản ghi của bạn, v.v.

Lý do chúng tôi không muốn sử dụng thư mục trong hệ thống tệp cục bộ là khi ứng dụng được tải lên máy chủ web thực, bạn không muốn ghi đè cơ sở dữ liệu thực bằng cơ sở dữ liệu thử nghiệm của mình. Tất cả hồ sơ môi trường thử nghiệm/phát triển của bạn sẽ được lưu trữ tại đây. Điều này cho phép bạn có một cơ sở dữ liệu khác trên máy chủ trực tiếp và máy chủ phát triển khi bạn tải lên trang web của mình

Cuối cùng, khối

version: '3'
73 hiển thị cổng 3306 để chúng tôi có thể kết nối với nó với một máy khách như MySQL Workbench để quản lý cơ sở dữ liệu. Tôi thực sự khuyên bạn nên sử dụng cái này trên PHPMyAdmin nếu đó là những gì bạn đã quen sử dụng, mặc dù bạn có thể đặt PHPMyAdmin trong thư mục
version: '3'
services:
    web:
        image: nginx:1.18.0
        ports:
            - "80:80"
21 và chạy nó từ đó nếu muốn

Khởi động lại máy chủ của bạn. Sẽ mất một hoặc hai phút để tải xuống và định cấu hình MariaDB lần đầu tiên. Sau đó, trong tập lệnh PHP, hãy thử kết nối với MySQL bằng PDO và tên người dùng, mật khẩu và tên cơ sở dữ liệu đã chọn của bạn

version: '3'
4

Chạy tập lệnh này trên máy chủ. Nếu bạn thấy phiên bản MySQL và không có thông báo lỗi, thì bạn đã kết nối với máy chủ MySQL của mình và tất cả đã được thiết lập chính xác

Xong

Như bạn vừa khám phá ra, Docker sẽ thiết lập một chút nếu bạn tự làm. Nếu bạn sử dụng một

version: '3'
63 hiện có và các tệp cấu hình thì đó có thể chỉ là một vài lệnh

Khi bạn làm cho trang web của mình hoạt động, bạn sẽ chỉ cần tải lên toàn bộ dự án, bao gồm

version: '3'
63,
version: '3'
5 và
version: '3'
15, chạy
version: '3'
54 trên máy chủ [cờ
version: '3'
55 chạy nó dưới dạng dịch vụ trong nền] và nó sẽ chạy chính xác cùng một trang web của bạn . Bạn sẽ không cần thiết lập và cài đặt thủ công PHP, MariaDB và NGINX trên máy chủ web

Một khi bạn hiểu rõ về nó, bạn sẽ không bao giờ nhìn lại. Docker làm cho quá trình phát triển một trang web trở nên đơn giản hơn rất nhiều vì mọi thứ đều khép kín

TL;DR. Chỉ cần đưa cho tôi các tập tin

Nếu bạn chỉ muốn khởi động máy chủ với cấu hình hiển thị ở đây, hãy làm theo các bước sau

  1. Cài đặt Docker
  2. Mở một thiết bị đầu cuối trong thư mục bạn muốn lưu trữ trang web của mình [sử dụng Tệp > Mở Powershell trên cửa sổ để mở PowerShell trong thư mục hiện đang mở]
  3. Chạy lệnh
    version: '3'
    
    56 [dấu chấm cuối cùng đó rất quan trọng. ]
  4. Chạy
    version: '3'
    
    79
  5. Điều hướng đến http. //127. 0. 0. 1
  6. Tạo tập lệnh và tệp PHP của bạn trong
    version: '3'
    services:
        web:
            image: nginx:1.18.0
            ports:
                - "80:80"
    
    21

Chia sẻ bài viết này

tom quản gia

Tom Butler là một nhà phát triển web và giảng viên đại học. Anh ấy có bằng tiến sĩ trong lĩnh vực thực hành tốt nhất về công nghệ phần mềm và thích đánh giá các cách tiếp cận khác nhau đối với các vấn đề lập trình

Làm cách nào để sử dụng Trình soạn thảo PHP trong Docker?

Đảm bảo có cùng phiên bản PHP trong bộ chứa trình soạn thảo của bạn như trong bộ chứa PHP của bạn. .
Cài đặt trình soạn nhạc và Docker. Composer là trình quản lý phụ thuộc PHP, tương tự như NPM cho Node. .
Kiểm tra dự án [hoặc bắt đầu từ đầu].
Thiết lập docker-compose. .
Xây dựng và chạy. .
Đi qua công cụ thiết lập. .
điều chỉnh docker-compose

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

Nếu bạn mở công cụ máy tính để bàn Docker, bộ chứa sẽ được thiết lập và chạy . Để đảm bảo vùng chứa được thiết lập để thực thi tập lệnh PHP, hãy mở bài đăng máy chủ lưu trữ cục bộ đã xác định của bạn trong trình duyệt, tôi. e. , http. //máy chủ cục bộ. 8000/. Điều này cho thấy bộ chứa được thiết lập để chạy một số mã dựa trên PHP.

Làm cách nào để cài đặt PHP thông qua Docker?

Để thiết lập bộ chứa tác nhân PHP cho Docker. Đảm bảo cài đặt PHP có sẵn trong vùng chứa. Ví dụ: sử dụng hình ảnh Docker đã xuất bản như php. 7. 1. Để cài đặt tác nhân, hãy tải xuống gói tác nhân PHP từ trang web tải xuống tệp tar của New Relic và chạy tập lệnh newrelic-install với đối số cài đặt .

Làm cách nào để tạo môi trường phát triển PHP với Docker Compose?

Docker Compose được cài đặt trên máy cục bộ hoặc máy chủ phát triển của bạn, làm theo Bước 1 của Cách cài đặt và sử dụng Docker Compose trên Ubuntu 20. 04. .
Bước 1 — Tải xuống Ứng dụng Demo. .
Bước 2 — Thiết lập ứng dụng. .
Bước 3 — Chạy Docker Compose. .
Bước 4 — Hoàn tất thiết lập ứng dụng

Chủ Đề