Cài đặt private package với Composer

2038

Highlight: Mặc định composer sẽ kéo các package từ packagist.org về, nhưng bạn có biết composer cũng có thể kéo package từ một repo git về không? Nhờ điều này, mà mình sẽ tạo một private repo trên github, sau đó khai báo với composer để kéo về.

Chào các bạn,

Composer là trình quản lý gói của PHP. Mặc định khi chạy lệnh composer require nó sẽ kéo các package tương ứng từ packagist.org về. Tuy nhiên, các package tại đây đều ở chế độ public – tức ai cũng có thể kéo về được. Nhưng trong thực tế, nhiều lúc chúng ta muốn tạo ra các package private, ví dụ như các package chỉ lưu hành nội bộ của công ty thôi chẳng hạn, thì phải làm thế nào? Trong bài viết này, mình sẽ hướng dẫn các bạn nhé.

Cài đặt private package với Composer + Github

Mặc định composer sẽ kéo các package từ packagist.org về, nhưng bạn có biết composer cũng có thể kéo package từ một repo git về không? Nhờ điều này, mà mình sẽ tạo một private repo trên github, sau đó khai báo với composer để kéo về.

Để hiểu hơn, chúng ta sẽ cùng đi thực hiện một ví dụ đơn giản thông qua các bước dưới đây nhé.

Kết quả của các bước sau đây là mình có thể sử dụng composer để cài một private package từ một private repo trên github.

Lưu ý: Mình mặc định là bạn đã biết các thao tác cơ bản với git như pull, push, commit rồi nhé

Lưu ý: Ví dụ này mình sử dụng Github, nhưng bạn cũng có thể sử dụng Gitlab hay bất kỳ hệ thống git nào

Bước 1: Thêm ssh key vào github

Kiểm tra xem bạn đã thêm ssh key vào github chưa bằng lệnh

ssh -T git@github.com

Nếu kết quả hiện ra dạng như sau thì có nghĩa là bạn đã thêm ssh key trước đó rồi.

Hi phambinh217! You've successfully authenticated, but GitHub does not provide shell access.

Nếu đã thêm rồi, bạn có thể bỏ qua bước này. Nếu chưa thêm, hãy làm theo các bước dưới đây.

Sử dụng ssh key để xác thực tài khoản github sẽ tiện hơn nhiều so với việc phải nhập tên tài khoản và mật khẩu.

Bước 1: Tạo ssh key

ssh-keygen -t rsa -b 4096 -C "your-email@example.com"

Mặc định ssh key sẽ được tạo ra ở đường dẫn ~/.ssh/id_rsa.pub

Bước 2: Copy ssh key

Sử dụng lệnh sau để lấy ssh key vừa tạo

cat ~/.ssh/id_rsa.pub

Kết quả sẽ dạng như

ssh-rsa ... 
...
your-email@example.com

Bạn copy lấy đoạn mã này để chuẩn bị cho bước tiếp theo.

Bước 3: Thêm ssh key vào github

Truy cập vào https://github.com/settings/ssh/new để thêm ssh key.

Nhấn “Add SSH key” để lưu lại. Sau đó bạn có thể kiểm tra lại bằng command mà mình đã gợi ý ở trên (ssh -T git@github.com).

Bước 2: Chuẩn bị source code

Chúng ta sẽ chuẩn bị một source code đơn giản nhất có thể với 3 file như sau

README.md

## Hello world

index.php

<?php

namespace PhambinhNet;

class TestPrivatePackage
{
    public static function sayHello()
    {
        return 'Hello world';
    }
}

composer.json

{
     "name": "phambinhnet/test-private-package",
     "autoload": {
         "psr-4": {
             "PhamBinhNet\\": "/"
         }
     }
 }

Bước 3: Đẩy source code lên một private github repo

Giả sử mình tạo một repo trên github với thông tin như hình sau

Tên package thì bạn đặt là gì cũng được, nhưng nhớ phải tích vào ô “Private” nhé.

Sau khi tạo xong, thì tiến hành đẩy toàn bộ source code lên.

Bước 3: Relase một phiên bản cho private github repos

Để composer có thể dễ dàng tìm thấy package của bạn, chúng ta nên release một phiên bản. Giả sử mình sẽ relase phiên bản đầu tiên là 1.0.0 bằng cách sử dụng các lệnh sau.

cd /path/to/your/local/repo
git tag 1.0.0
git push --tags

Bước 4: Sử dụng private package thông qua composer

Tại dự án muốn sử dụng private package trên, bạn thêm thông tin sau vào file composer.json

"repositories":[
     {
         "type": "vcs",
         "url": "git@github.com:phambinh217/laravel-test-package.git"
     }
 ]

Nhớ đổi phambinh217/laravel-test-package thành package của bạn nhé.

Sau đó chạy lệnh sau để cài đặt private package từ github

composer require phambinhnet/test-private-package

Việc cài đặt package diễn ra như chúng ta cài đặt các package khác.

Sau khi command trên chạy xong, bạn có thể kiểm tra lại bằng cách đi vào thư mục vendor xem có thấy package phambinhnet/test-private-package được kéo về không. Nếu có nghĩa là bạn đã thành không, ngược lại thì… hãy kiểm tra lại xem bạn có làm thiếu bước nào không.

Lời kết

Nếu bạn không đạt được kết quả mong muốn, thì hãy báo lại với mình, mình sẽ giúp bạn debug.

Chúc các bạn thành công