Thứ hai, 04/05/2020 | 00:00 GMT+7

Cách cài đặt và sử dụng Composer trên Ubuntu 20.04

Composer là một công cụ quản lý phụ thuộc phổ biến cho PHP, được tạo ra chủ yếu để tạo điều kiện thuận lợi cho việc cài đặt và cập nhật cho các phụ thuộc của dự án. Nó sẽ kiểm tra các gói khác mà một dự án cụ thể phụ thuộc vào và cài đặt chúng cho bạn, sử dụng các version phù hợp theo yêu cầu của dự án. Composer cũng thường được sử dụng để khởi động các dự án mới dựa trên các khung PHP phổ biến, chẳng hạn như SymfonyLaravel .

Trong hướng dẫn này, bạn sẽ cài đặt và bắt đầu với Composer trên hệ thống Ubuntu 20.04.

Yêu cầu

Để làm theo hướng dẫn này, bạn cần truy cập vào server Ubuntu 20.04 với quyền là user sudo không phải root và firewall được bật trên server của bạn. Để cài đặt điều này, bạn có thể làm theo hướng dẫn cài đặt server ban đầu của ta cho Ubuntu 20.04 .

Bước 1 - Cài đặt PHP và các phụ thuộc bổ sung

Ngoài các phần phụ thuộc đã có trong hệ thống Ubuntu 20.04 của bạn, chẳng hạn như gitcurl , Composer yêu cầu php-cli để thực thi các tập lệnh PHP trong dòng lệnh và unzip để extract các repository đã nén. Ta sẽ cài đặt các phần phụ thuộc này ngay bây giờ.

Trước tiên, hãy cập nhật cache ẩn của trình quản lý gói bằng lệnh:

  • sudo apt update

Tiếp theo, chạy lệnh sau để cài đặt các gói cần thiết:

  • sudo apt install php-cli unzip

Bạn sẽ được yêu cầu xác nhận cài đặt bằng lệnh Y rồi ENTER .

Khi các yêu cầu được cài đặt, bạn có thể tiến hành cài đặt Composer.

Bước 2 - Download và cài đặt composer

Composer cung cấp một tập lệnh trình cài đặt được viết bằng PHP. Ta sẽ download , xác minh nó không bị hỏng và sau đó sử dụng nó để cài đặt Composer.

Đảm bảo rằng bạn đang ở trong folder chính của bạn , sau đó truy xuất trình cài đặt bằng curl :

  • cd ~
  • curl -sS https://getcomposer.org/installer -o composer-setup.php

Tiếp theo, ta sẽ xác minh trình cài đặt đã download trùng với hàm băm SHA-384 cho trình cài đặt mới nhất được tìm thấy trên trang Khóa / Chữ ký của composer . Để tạo thuận lợi cho bước xác minh, bạn có thể sử dụng lệnh sau để lấy mã băm mới nhất theo chương trình từ trang Composer và lưu trữ nó trong một biến shell:

  • HASH=`curl -sS https://composer.github.io/installer.sig`

Nếu bạn muốn xác minh giá trị thu được, bạn có thể chạy:

  • echo $HASH
Output
e0012edf3e80b6978849f5eff0d4b4e4c79ff1609dd1e613307e16318854d24ae64f26d17af3ef0bf7cfb710ca74755a

Bây giờ hãy thực thi mã PHP sau, như được cung cấp trong trang download Trình soạn nhạc, để xác minh lệnh cài đặt có an toàn để chạy:

  • php -r "if (hash_file('SHA384', 'composer-setup.php') === '$HASH') { echo 'Installer verified'; } else { echo 'Installer corrupt'; unlink('composer-setup.php'); } echo PHP_EOL;"

Bạn sẽ thấy kết quả sau:

Đầu ra
Installer verified 

Nếu kết quả cho biết Installer corrupt , bạn cần download lại lệnh cài đặt và kiểm tra lại xem bạn có đang sử dụng mã băm chính xác hay không. Sau đó, lặp lại quá trình xác minh. Khi bạn có một trình cài đặt đã được xác minh, bạn có thể tiếp tục.

Để cài đặt trình composer trên phạm vi global , hãy sử dụng lệnh sau sẽ download và cài đặt Composer dưới dạng lệnh trên toàn hệ thống có tên là trình composer , trong /usr/local/bin :

  • sudo php composer-setup.php --install-dir=/usr/local/bin --filename=composer

Bạn sẽ thấy kết quả tương tự như sau:

Output
All settings correct for using Composer Downloading... Composer (version 1.10.5) successfully installed to: /usr/local/bin/composer Use it: php /usr/local/bin/composer

Để kiểm tra cài đặt của bạn, hãy chạy:

  • composer
Output
______ / ____/___ ____ ___ ____ ____ ________ _____ / / / __ \/ __ `__ \/ __ \/ __ \/ ___/ _ \/ ___/ / /___/ /_/ / / / / / / /_/ / /_/ (__ ) __/ / \____/\____/_/ /_/ /_/ .___/\____/____/\___/_/ /_/ Composer version 1.10.5 2020-04-10 11:44:22 Usage: command [options] [arguments] Options: -h, --help Display this help message -q, --quiet Do not output any message -V, --version Display this application version --ansi Force ANSI output --no-ansi Disable ANSI output -n, --no-interaction Do not ask any interactive question --profile Display timing and memory usage information --no-plugins Whether to disable plugins. -d, --working-dir=WORKING-DIR If specified, use the given directory as working directory. --no-cache Prevent use of the cache -v|vv|vvv, --verbose Increase the verbosity of messages: 1 for normal output, 2 for more verbose output and 3 for debug ...

Điều này xác minh Composer đã được cài đặt thành công trên hệ thống của bạn và khả dụng trên toàn hệ thống.

Lưu ý: Nếu bạn muốn có các file thực thi Composer riêng biệt cho từng dự án mà bạn lưu trữ trên server này, bạn có thể cài đặt nó local trên cơ sở từng dự án. Phương pháp này cũng hữu ích khi user hệ thống của bạn không có quyền cài đặt phần mềm trên toàn hệ thống.

Để thực hiện việc này, hãy sử dụng lệnh php composer-setup.php . Thao tác này sẽ tạo file composer.phar trong folder hiện tại của bạn, file này có thể được thực thi bằng php composer.phar .

Bây giờ ta hãy xem xét việc sử dụng Composer để quản lý các phụ thuộc.

Bước 3 - Sử dụng Composer trong một dự án PHP

Các dự án PHP thường phụ thuộc vào các thư viện bên ngoài và việc quản lý các phụ thuộc đó và các version của chúng có thể khó khăn. Composer giải quyết vấn đề đó bằng cách theo dõi các version và phần phụ thuộc của dự án, đồng thời tạo điều kiện thuận lợi cho quá trình tìm kiếm, cài đặt và cập nhật các gói được yêu cầu bởi một dự án.

Để sử dụng Composer trong dự án của bạn , bạn cần có file composer.json . Tệp composer.json cho Composer biết phụ thuộc nào mà nó cần download cho dự án của bạn và version nào của mỗi gói được phép cài đặt. Điều này cực kỳ quan trọng để giữ cho dự án của bạn nhất quán và tránh cài đặt các version không ổn định có thể gây ra các vấn đề tương thích ngược.

Bạn không cần phải tạo file này theo cách thủ công - bạn thường gặp lỗi cú pháp khi làm như vậy. Composer cung cấp một cách tương tác để tạo file composer.json mới dựa trên đầu vào của user , đây là một lựa chọn tốt nếu bạn định chia sẻ dự án của bạn sau này dưới dạng gói công khai trên Packagist . Composer cũng tự động tạo file composer.json trần trụi khi bạn chạy lệnh composer require bao gồm phần phụ thuộc trong một dự án mới được tạo.

Quá trình sử dụng Composer để cài đặt một gói phụ thuộc trong một dự án bao gồm các bước sau:

  • Xác định loại thư viện mà ứng dụng cần.
  • Nghiên cứu thư viện open-souce phù hợp trên Packagist.org , repository chính thức cho Composer.
  • Chọn gói bạn muốn phụ thuộc vào.
  • Run composer require bao gồm phần phụ thuộc trong file composer.json và cài đặt gói.

Hãy thử điều này với một ứng dụng demo.

Mục tiêu của ứng dụng này là chuyển đổi một câu đã cho thành một chuỗi thân thiện với URL - một slug . Điều này thường được sử dụng để chuyển đổi tiêu đề trang thành đường dẫn URL (như phần cuối cùng của URL cho hướng dẫn này).

Hãy bắt đầu bằng cách tạo một folder cho dự án của ta . Ta sẽ gọi nó là slugify :

  • cd ~
  • mkdir slugify
  • cd slugify

Mặc dù không bắt buộc, nhưng bây giờ bạn có thể chạy lệnh composer init để tạo file composer.json chi tiết cho dự án của bạn . Vì mục tiêu duy nhất của dự án là chứng minh cách cài đặt các phần phụ thuộc với Composer, ta sẽ sử dụng file composer.json đơn giản hơn sẽ được tạo tự động khi ta yêu cầu gói đầu tiên của bạn .

Bây giờ đã đến lúc tìm kiếm Packagist.org cho một gói có thể giúp ta tạo slug . Nếu bạn tìm kiếm cụm từ “slug” trên Packagist, bạn sẽ nhận được kết quả tương tự như sau:

Kết quả tìm kiếm Packagist cho thuật ngữ "slug"

Bạn sẽ thấy hai số ở bên phải của mỗi gói trong danh sách. Số ở trên cùng thể hiện số lần gói được cài đặt qua Composer và số ở dưới cùng cho biết số lần một gói được gắn dấu sao trên GitHub. Nói chung, các gói có nhiều cài đặt hơn và nhiều sao hơn có xu hướng ổn định hơn, vì có rất nhiều người đang sử dụng chúng. Điều quan trọng là phải kiểm tra mô tả gói về mức độ liên quan đảm bảo đó là thứ bạn cần.

Ta cần một công cụ chuyển đổi string-to-slug . Từ kết quả tìm kiếm, gói cocur/slugify , xuất hiện dưới dạng kết quả đầu tiên trong trang đó, có vẻ là một đối sánh tốt, với số lượng cài đặt và số sao hợp lý.

Các gói trên Packagist có tên nhà cung cấp và tên gói . Mỗi gói có một định danh duy nhất (một không gian tên) ở cùng một định dạng mà GitHub sử dụng cho các kho của nó: vendor / package . Thư viện ta muốn cài đặt sử dụng không gian tên cocur/slugify . Bạn cần không gian tên của gói để yêu cầu nó trong dự án của bạn.

Đến đây bạn đã biết chính xác gói nào bạn muốn cài đặt, bạn có thể chạy trình composer require để bao gồm nó như một gói phụ thuộc và cũng tạo file composer.json cho dự án của bạn. Một điều quan trọng cần lưu ý khi yêu cầu gói là Composer theo dõi cả phụ thuộc cấp ứng dụng cũng như phụ thuộc cấp hệ thống. Các phụ thuộc mức hệ thống rất quan trọng để chỉ ra gói dựa vào module PHP nào. Trong trường hợp của gói cocur/slugify , nó yêu cầu một module PHP mà ta chưa cài đặt.

Khi một gói yêu cầu dựa trên thư viện hệ thống hiện chưa được cài đặt trên server của bạn, bạn sẽ gặp lỗi cho biết yêu cầu nào bị thiếu:

  • composer require cocur/slugify
Output
Using version ^4.0 for cocur/slugify ./composer.json has been updated Loading composer repositories with package information Updating dependencies (including require-dev) Your requirements could not be resolved to an installable set of packages. Problem 1 - Installation request for cocur/slugify ^4.0 -> satisfiable by cocur/slugify[v4.0.0]. - cocur/slugify v4.0.0 requires ext-mbstring * -> the requested PHP extension mbstring is missing from your system. ...

Để giải quyết vấn đề phụ thuộc hệ thống, ta có thể tìm kiếm gói bị thiếu bằng cách sử dụng apt search :

  • apt search mbstring
Output
Sorting... Done Full Text Search... Done php-mbstring/focal 2:7.4+75 all MBSTRING module for PHP [default] php-patchwork-utf8/focal 1.3.1-1 all UTF-8 strings handling for PHP php7.4-mbstring/focal 7.4.3-4ubuntu1 amd64 MBSTRING module for PHP

Sau khi định vị đúng tên gói, bạn có thể sử dụng apt để cài đặt hệ thống phụ thuộc:

  • sudo apt install php-mbstring

Khi cài đặt xong , bạn có thể chạy lại lệnh composer require :

  • composer require cocur/slugify
Output
Using version ^4.0 for cocur/slugify ./composer.json has been created Loading composer repositories with package information Updating dependencies (including require-dev) Package operations: 1 install, 0 updates, 0 removals - Installing cocur/slugify (v4.0.0): Downloading (100%) Writing lock file Generating autoload files

Như bạn thấy từ kết quả , Composer tự động quyết định version của gói để sử dụng. Nếu bạn kiểm tra folder của dự án ngay bây giờ, nó sẽ chứa hai file mới: composer.jsoncomposer.lock , và một folder vendor :

  • ls -l
Output
total 12 -rw-rw-r-- 1 sammy sammy 59 May 4 13:56 composer.json -rw-rw-r-- 1 sammy sammy 3229 May 4 13:56 composer.lock drwxrwxr-x 4 sammy sammy 4096 May 4 13:56 vendor

Tệp composer.lock được sử dụng để lưu trữ thông tin về version nào của mỗi gói được cài đặt và đảm bảo các version tương tự được sử dụng nếu ai đó sao chép dự án của bạn và cài đặt các phụ thuộc của nó. Thư mục vendor là nơi chứa các phụ thuộc của dự án. Các vendor folder không nên được commit vào điều khiển version - bạn chỉ cần bao gồm các file composer.jsoncomposer.lock.

Khi cài đặt một dự án đã chứa file composer.json , hãy chạy composer install để download các phần phụ thuộc của dự án.

Hãy xem qua các ràng buộc của version . Nếu bạn kiểm tra nội dung của file composer.json của bạn , bạn sẽ thấy thông tin như sau:

  • cat composer.json
Output
{ "require": { "cocur/slugify": "^4.0" } }

Bạn có thể nhận thấy ký tự đặc biệt ^ trước số version trong composer.json . Composer hỗ trợ một số ràng buộc và định dạng khác nhau để xác định version gói yêu cầu, nhằm cung cấp tính linh hoạt trong khi vẫn giữ cho dự án của bạn ổn định. Toán tử dấu mũ ( ^ ) được sử dụng bởi file composer.json được tạo tự động là toán tử được khuyến khích để có khả năng tương tác tối đa, sau cách lập phiên bản ngữ nghĩa . Trong trường hợp này, nó xác định 4.0 là version tương thích tối thiểu và cho phép cập nhật lên bất kỳ version nào trong tương lai dưới 5.0 .

Nói chung, bạn sẽ không cần phải can thiệp vào các ràng buộc version trong file composer.json của bạn . Tuy nhiên, một số tình huống có thể yêu cầu bạn chỉnh sửa các ràng buộc theo cách thủ công – ví dụ: khi một version mới chính của thư viện yêu cầu của bạn được phát hành và bạn muốn nâng cấp hoặc khi thư viện bạn muốn sử dụng không tuân theo cách lập version ngữ nghĩa.

Dưới đây là một số ví dụ để bạn hiểu rõ hơn về cách hoạt động của các ràng buộc version Composer:

Hạn chế Ý nghĩa Các version mẫu được phép
^ 1,0 > = 1,0 <2,0 1.0, 1.2.3, 1.9.9
^ 1.1.0 > = 1.1.0 <2.0 1.1.0, 1.5.6, 1.9.9
~ 1.0 > = 1,0 <2,0,0 1.0, 1.4.1, 1.9.9
~ 1.0.0 > = 1.0.0 <1.1 1.0.0, 1.0.4, 1.0.9
1.2.1 1.2.1 1.2.1
1. * > = 1,0 <2,0 1.0.0, 1.4.5, 1.9.9
1.2. * > = 1,2 <1,3 1.2.0, 1.2.3, 1.2.9

Để có cái nhìn chuyên sâu hơn về các ràng buộc của version Composer, hãy xem tài liệu chính thức .

Tiếp theo, hãy xem cách tải các phụ thuộc tự động bằng Composer.

Bước 4 - Bao gồm Tập lệnh Tự động tải

Vì bản thân PHP không tự động tải các lớp, nên Composer cung cấp một tập lệnh tự động tải mà bạn có thể đưa vào dự án của bạn để tự động tải hoạt động cho dự án của bạn. Tệp này được tạo tự động bởi Composer khi bạn thêm phần phụ thuộc đầu tiên của bạn .

Điều duy nhất bạn cần làm là đưa file vendor/autoload.php vào các tập lệnh PHP của bạn trước khi khởi tạo bất kỳ lớp nào.

Hãy thử nó trong ứng dụng demo của ta . Mở một file mới có tên test.php trong editor của bạn:

  • nano test.php

Thêm đoạn mã sau vào file vendor/autoload.php , tải phần phụ thuộc cocur/slugify và sử dụng nó để tạo một slug:

test.php
<?php require __DIR__ . '/vendor/autoload.php';  use Cocur\Slugify\Slugify;  $slugify = new Slugify();  echo $slugify->slugify('Hello World, this is a long sentence and I need to make a slug from it!'); 

Lưu file và thoát khỏi editor .

Bây giờ hãy chạy tập lệnh:

  • php test.php

Điều này tạo ra kết quả hello-world-this-is-a-long-sentence-and-i-need-to-make-a-slug-from-it .

Sự phụ thuộc cần cập nhật khi có version mới, vì vậy hãy xem cách xử lý điều đó.

Bước 5 - Cập nhật dependencies của dự án

Khi nào bạn muốn cập nhật các phụ thuộc dự án của bạn lên các version mới hơn, hãy chạy lệnh update :

  • composer update

Điều này sẽ kiểm tra các version mới hơn của các thư viện mà bạn yêu cầu trong dự án của bạn . Nếu tìm thấy version mới hơn và nó tương thích với giới hạn version được xác định trong file composer.json , Composer sẽ thay thế version đã cài đặt trước đó. Tệp composer.lock sẽ được cập nhật để áp dụng thay đổi này.

Bạn cũng có thể cập nhật một hoặc nhiều thư viện cụ thể bằng cách chỉ định chúng như sau:

  • composer update vendor/package vendor2/package2

Hãy chắc chắn để kiểm tra bạn composer.jsoncomposer.lock file trong hệ thống kiểm soát version của bạn sau khi bạn cập nhật phụ thuộc của bạn để những người khác có thể cài đặt các version mới hơn quá.

Kết luận

Composer là một công cụ mạnh mẽ có thể tạo điều kiện thuận lợi cho công việc quản lý các phần phụ thuộc trong các dự án PHP. Nó cung cấp một cách tin cậy để khám phá, cài đặt và cập nhật các gói PHP mà một dự án phụ thuộc vào. Trong hướng dẫn này, ta đã xem cách cài đặt Composer, cách đưa các phần phụ thuộc mới vào một dự án và cách cập nhật các phần phụ thuộc này khi có version mới.


Tags:

Các tin liên quan

Cách cài đặt Jenkins trên Ubuntu 18.04
2020-05-04
Cách thêm không gian swap trên Ubuntu 20.04
2020-05-04
Cách thiết lập firewall với UFW trên Ubuntu 20.04
2020-05-04
Cách cài đặt và cấu hình Elasticsearch trên Ubuntu 20.04
2020-04-30
Cách thiết lập và cấu hình Tổ chức phát hành chứng chỉ (CA) trên Ubuntu 20.04
2020-04-28
Cách thiết lập khóa SSH trên Ubuntu 20.04
2020-04-23
Cách thiết lập khóa SSH trên Ubuntu 20.04
2020-04-23
Cách cài đặt và cấu hình Elasticsearch trên Ubuntu 18.04
2020-04-22
Cách cài đặt và bảo mật phpMyAdmin trên Ubuntu 18.04
2020-04-21
Cách cài đặt và cấu hình Ansible trên Ubuntu 18.04
2020-04-16