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

Composer là một công cụ quản lý vô cùng mạnh mẽ và phổ biến trong hệ sinh thái PHP được tạo ra chủ yếu để đơn giản hóa việc cài đặt và cập nhật các gói thư viện mà dự án PHP của bạn cần đến.
Nó sẽ tự động kiểm tra những gói nào mà dự án của bạn đang phụ thuộc, sau đó cài đặt chúng với các phiên bản phù hợp theo yêu cầu đã định. Không chỉ vậy, Composer còn là lựa chọn hàng đầu để khởi tạo các dự án mới dựa trên những framework PHP nổi tiếng như Symfony hay Laravel, giúp bạn nhanh chóng thiết lập môi trường phát triển một cách nhất quán và hiệu quả.
Chuẩn bị
Bạn cần có quyền truy cập vào một máy chủ Ubuntu 20.04 với tư cách là người dùng sudo không phải root, và một tường lửa (firewall) đã được kích hoạt trên máy chủ của bạn.
Bước 1: Cài đặt PHP và các gói phụ thuộc bổ sung
Ngoài các gói phụ thuộc cơ bản đã có sẵn trong hệ thống Ubuntu 20.04 của bạn như git và curl, Composer còn yêu cầu php-cli để thực thi các script PHP trên dòng lệnh và unzip để giải nén các tệp lưu trữ. Chúng ta sẽ cài đặt những gói này ngay bây giờ.
Trước tiên, hãy cập nhật bộ nhớ đệm 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
Hệ thống sẽ yêu cầu bạn xác nhận cài đặt. Bạn chỉ cần gõ Y và nhấn ENTER.
Khi các điều kiện tiên quyết đã được cài đặt, chúng ta có thể tiến hành cài đặt Composer.
Bước 2: Tải xuống và cài đặt Composer
Composer cung cấp một script cài đặt được viết bằng PHP. Chúng ta sẽ tải xuống, xác minh rằng nó không bị hỏng, và sau đó sử dụng nó để cài đặt Composer.
Hãy đảm bảo bạn đang ở thư mục gốc của mình, sau đó tải script cài đặt bằng curl:
cd ~
curl -sS <https://getcomposer.org/installer> -o /tmp/composer-setup.php
Tiếp theo, chúng ta sẽ xác minh rằng trình cài đặt đã tải xuống khớp với mã băm SHA-384 mới nhất được tìm thấy trên trang Composer Public Keys / Signatures. Để thuận tiện 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 từ trang Composer và lưu trữ nó vào 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ị đã lấy được, hãy chạy:
echo $HASH
Bạn sẽ thấy đầu ra tương tự:
e0012edf3e80b6978849f5eff0d4b4e4c79ff1609dd1e613307e16318854d24ae64f26d17af3ef0bf7cfb710ca74755a
Bây giờ, hãy thực thi đoạn mã PHP sau, được cung cấp trên trang tải xuống của Composer, để xác minh rằng script cài đặt an toàn để chạy:
php -r "if (hash_file('SHA384', '/tmp/composer-setup.php') === '$HASH') { echo 'Installer verified'; } else { echo 'Installer corrupt'; unlink('composer-setup.php'); } echo PHP_EOL;"
Bạn sẽ thấy đầu ra:
Installer verified
Nếu đầu ra hiển thị Installer corrupt, bạn cần tải lại script cài đặt và kiểm tra kỹ lại rằng bạn đang sử dụng đúng mã băm. Sau đó, lặp lại quy trình xác minh. Khi bạn đã có một trình cài đặt được xác minh, hãy tiếp tục.
Để cài đặt composer toàn cục (globally), hãy sử dụng lệnh sau. Lệnh này sẽ tải xuống và cài đặt Composer như một lệnh hệ thống có tên composer, nằm trong /usr/local/bin:
sudo php /tmp/composer-setup.php --install-dir=/usr/local/bin --filename=composer
Bạn sẽ thấy đầu ra tương tự như sau:
All settings correct for using Composer
Downloading...
Composer (version 2.2.9) 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 lệnh:
composer
Bạn sẽ nhận được một màn hình đầu ra hiển thị thông tin về Composer, bao gồm phiên bản và các tùy chọn sử dụng:
______
/ ____/___ ____ ___ ____ ____ ________ _____
/ / / __ \\\\/ __ `__ \\\\/ __ \\\\/ __ \\\\/ ___/ _ \\\\/ ___/
/ /___/ /_/ / / / / / / /_/ / /_/ (__ ) __/ /
\\\\____/\\\\____/_/ /_/ /_/ .___/\\\\____/____/\\\\___/_/
/_/
Composer version Composer version 2.2.9 2022-03-15 22:13:37
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 nhận rằng Composer đã được cài đặt thành công trên hệ thống của bạn và có sẵn để sử dụng toàn hệ thống.
Lưu ý: Nếu bạn muốn có các tệp thực thi Composer riêng biệt cho từng dự án bạn lưu trữ trên máy chủ này, bạn có thể cài đặt nó cục bộ, theo từng dự án. Phương pháp này cũng hữu ích khi người dùng hệ thống của bạn không có quyền cài đặt phần mềm toàn hệ thống. Để làm điều này, hãy sử dụng lệnh php /tmp/composer-setup.php. Lệnh này sẽ tạo ra một tệp composer.phar trong thư mục hiện tại của bạn, có thể được thực thi bằng php composer.phar.
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 gói phụ thuộc cùng phiên bản của chúng có thể phức tạp. Composer giải quyết vấn đề đó bằng cách theo dõi các phiên bản và gói phụ thuộc của dự án, đồng thời đơn giản hóa quá trình tìm kiếm, cài đặt và cập nhật các gói mà một dự án yêu cầu.
Để sử dụng Composer trong dự án của bạn, bạn sẽ cần một tệp composer.json. Tệp composer.json cho Composer biết những gói phụ thuộc nào cần tải xuống cho dự án của bạn và phiên bản 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 phiên bản không ổn định có thể gây ra sự cố tương thích ngược.
Bạn không cần tạo tệp này thủ công việc đó dễ dẫn đến lỗi cú pháp. Composer cung cấp một cách tương tác để tạo một tệp composer.json mới dựa trên đầu vào của người dùng. Đây là một lựa chọn tốt nếu bạn định chia sẻ dự án của mình sau này dưới dạng một gói công khai trên Packagist. Composer cũng tự động tạo một tệp composer.json cơ bản khi bạn chạy lệnh composer require để thêm một gói phụ thuộc vào một dự án mới được tạo.
Quá trình sử dụng Composer để cài đặt một gói làm 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.
- Tìm kiếm một thư viện mã nguồn mở phù hợp trên Packagist.org, kho gói chính thức của Composer.
- Chọn gói bạn muốn sử dụng.
- Chạy
composer requiređể thêm gói phụ thuộc vào tệpcomposer.jsonvà 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à biến một câu cho trước 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 thư mục cho dự án của chúng ta. Chúng ta sẽ đặt tên nó là slugify:
cd ~
mkdir slugify
cd slugify
Mặc dù không bắt buộc, bạn có thể chạy lệnh composer init để tạo một tệp composer.json chi tiết cho dự án của mình. Tuy nhiên, vì mục tiêu duy nhất của dự án này là minh họa cách cài đặt các gói phụ thuộc với Composer, chúng ta sẽ sử dụng một tệp composer.json đơn giản hơn sẽ được tự động tạo khi chúng ta yêu cầu gói đầu tiên.
Bây giờ là lúc tìm kiếm trên Packagist.org một gói có thể giúp chúng ta tạo slugs. Nếu bạn tìm kiếm từ khóa “slug” trên Packagist, bạn sẽ nhận được một kết quả tương tự như thế này:

Bạn sẽ thấy hai con số ở phía bên phải của mỗi gói trong danh sách. Con số ở trên thể hiện số lần gói đó được cài đặt qua Composer, và con số ở dưới cho biết số lần gói đó được gắn dấu sao trên GitHub.
Nói chung, các gói có nhiều lượt cài đặt và nhiều sao hơn có xu hướng ổn định hơn, vì có 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 để đảm bảo tính liên quan và chắc chắn đó là thứ bạn cần.
Chúng ta cần một bộ chuyển đổi string-to-slug. Từ kết quả tìm kiếm, gói cocur/slugify, xuất hiện là kết quả đầu tiên trên trang đó, dường như là một lựa chọn tốt, với số lượng cài đặt và sao hợp lý.
Các gói trên Packagist có một tên vendor và một tên package. Mỗi gói có một định danh duy nhất (một namespace) theo cùng định dạng mà GitHub sử dụng cho các kho lưu trữ của nó: vendor/package. Thư viện chúng ta muốn cài đặt sử dụng namespace cocur/slugify. Bạn cần namespace của một gói để yêu cầu nó trong dự án của mình.
Bây giờ 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 composer require để thêm nó làm gói phụ thuộc và cũng tạo tệp 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 các gói là Composer theo dõi cả các gói phụ thuộc cấp ứng dụng cũng như các gói phụ thuộc cấp hệ thống.
Các gói phụ thuộc cấp hệ thống rất quan trọng để chỉ ra các module PHP mà một gói dựa vào. Trong trường hợp gói cocur/slugify, nó yêu cầu một module PHP mà chúng ta chưa cài đặt.
Khi một gói yêu cầu một thư viện hệ thống hiện không được cài đặt trên máy chủ của bạn, bạn sẽ nhận được một lỗi cho biết yêu cầu nào bị thiếu:
composer require cocur/slugify
OutputUsing 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 đề gói phụ thuộc hệ thống, chúng ta có thể tìm kiếm gói bị thiếu bằng apt search:
apt search mbstring
OutputSorting... 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ị được tên gói chính xác, bạn có thể sử dụng apt một lần nữa để cài đặt gói phụ thuộc hệ thống:
sudo apt install php-mbstring
Khi cài đặt hoàn tất, bạn có thể chạy lại lệnh composer require:
composer require cocur/slugify
OutputUsing 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 có thể thấy từ đầu ra, Composer tự động quyết định phiên bản nào của gói sẽ sử dụng. Nếu bạn kiểm tra thư mục dự án của mình bây giờ, nó sẽ chứa hai tệp mới: composer.json và composer.lock, và một thư mục vendor:
ls -l
Outputtotal 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ề các phiên bản của mỗi gói đã được cài đặt và đảm bảo các phiên bản tương tự được sử dụng nếu người khác nhân bản dự án của bạn và cài đặt các gói phụ thuộc của nó. Thư mục vendor là nơi chứa các gói phụ thuộc của dự án. Thư mục vendor không nên được commit vào hệ thống kiểm soát phiên bản bạn chỉ cần bao gồm các tệp composer.json và composer.lock.
Khi cài đặt một dự án đã có sẵn tệp composer.json, hãy chạy composer install để tải xuống các gói phụ thuộc của dự án.
Hãy cùng xem nhanh các ràng buộc phiên bản. Nếu bạn kiểm tra nội dung tệp composer.json của mình, bạn sẽ thấy điều gì đó như thế này:
cat composer.json
{
"require": {
"cocur/slugify": "^4.0"
}
}
Bạn có thể nhận thấy ký tự đặc biệt ^ trước số phiên bản trong composer.json. Composer hỗ trợ một số ràng buộc và định dạng khác nhau để định nghĩa phiên bản gói yêu cầu, nhằm cung cấp sự linh hoạt đồng thời giữ cho dự án của bạn ổn định.
Toán tử caret (^) được sử dụng bởi tệp composer.json tự động tạo là toán tử được khuyến nghị để đạt được khả năng tương thích tối đa, theo dõi semantic versioning. Trong trường hợp này, nó định nghĩa 4.0 là phiên bản tương thích tối thiểu và cho phép cập nhật lên bất kỳ phiên bản nào trong tương lai dưới 5.0.
Nói chung, bạn sẽ không cần phải thay đổi các ràng buộc phiên bản trong tệp composer.json của mình. Tuy nhiên, một số tình huống có thể yêu cầu bạn chỉnh sửa thủ công các ràng buộc ví dụ, khi một phiên bản lớn mới của thư viện bạn yêu cầu đượ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 semantic versioning.

Để có cái nhìn sâu hơn về các ràng buộc phiên bản của Composer, hãy xem tài liệu chính thức.
Tiếp theo, hãy cùng xem cách tự động tải các gói phụ thuộc với Composer.
Bước 4: Thêm Script Autoload
Vì bản thân PHP không tự động tải các lớp, Composer cung cấp một script autoload mà bạn có thể Including vào dự án của mình để tự động tải các lớp hoạt động cho dự án của bạn. Tệp này được Composer tự động tạo khi bạn thêm gói phụ thuộc đầu tiên của mình.
Điều duy nhất bạn cần làm là Including tệp vendor/autoload.php vào các script PHP của bạn trước bất kỳ khởi tạo lớp nào.
Hãy thử nó trong ứng dụng demo của chúng ta. Mở một tệp mới tên là test.php trong trình soạn thảo văn bản của bạn:
nano test.php
Thêm đoạn mã sau để đưa tệp vendor/autoload.php vào, tải gói phụ thuộc cocur/slugify, và sử dụng nó để tạo một slug:
<?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 tệp và thoát khỏi trình soạn thảo của bạn.
Bây giờ hãy chạy script:
php test.php
Lệnh này tạo ra đầu ra hello-world-this-is-a-long-sentence-and-i-need-to-make-a-slug-from-it.
Các gói phụ thuộc cần được cập nhật khi có phiên bản mới, vì vậy hãy xem cách xử lý điều đó.
Bước 5: Cập nhật các gói phụ thuộc của dự án
Bất cứ khi nào bạn muốn cập nhật các gói phụ thuộc của dự án lên các phiên bản mới hơn, hãy chạy lệnh update:
composer update
Lệnh này sẽ kiểm tra các phiên bản mới hơn của các thư viện bạn đã yêu cầu trong dự án của mình. Nếu tìm thấy một phiên bản mới hơn và nó tương thích với ràng buộc phiên bản được định nghĩa trong tệp composer.json, Composer sẽ thay thế phiên bản trước đó đã cài đặt. Tệp composer.lock sẽ được cập nhật để phản ánh nhữ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 nhớ kiểm tra các tệp composer.json và composer.lock của bạn vào hệ thống kiểm soát phiên bản sau khi bạn cập nhật các gói phụ thuộc để những người khác cũng có thể cài đặt các phiên bản mới hơn này.
Kết luận
Composer thực sự là một công cụ mạnh mẽ, giúp đơn giản hóa đáng kể công việc quản lý các gói phụ thuộc trong các dự án PHP. Nó cung cấp một cách đáng tin cậy để khám phá, cài đặt và cập nhật các gói PHP mà dự án của bạn cần.
Trong hướng dẫn này, chúng ta đã cùng nhau tìm hiểu cách cài đặt Composer, cách thêm các gói phụ thuộc mới vào dự án, và cách cập nhật chúng khi có phiên bản mới. Nắm vững Composer không chỉ giúp bạn xây dựng các dự án PHP hiệu quả và ổn định hơn mà còn mở ra cánh cửa tiếp cận với hàng ngàn thư viện chất lượng cao trên Packagist, từ đó nâng cao tốc độ và chất lượng phát triển.