原始碼地址:composer/packagist
筆者在寫這篇文章的時候對應的commit sha
:aa0d63fd6ebbfd991aa3ab652d33c6c8e463543a
因為
packagist
沒有版本的概念 所以使用commit sha
的方式來記錄一下
環境安裝
由於最新版使用的是php8.0
,所以來安裝一下8.0
使用apt
安裝php8.0
sudo apt install php8.0 php8.0-bcmath php8.0-redis php8.0-cli php8.0-zip php8.0-mysql php8.0-http php8.0-curl php8.0-common php8.0-raphf php8.0-dev php8.0-mbstring php8.0-dom php8.0-xml
安裝過程比較簡單,基本如上
在安裝完成後,composer install 時出現
unrecognised compile-time option bit(s)
按照這個issure 只用執行以下命令即可(如果你沒有出現任何問題,無視即可)sudo apt-get install --only-upgrade libpcre2-16-0 libpcre2-32-0 libpcre2-8-0 libpcre2-dev libpcre2-posix2
專案部署
git clone https://github.com/composer/packagist.git && cd packagist
專案配置
拉取程式碼之後,先配置一下redis
,database
等等
開啟.env
檔案
# 資料庫配置, 修改成自己的配置,並確保擁有packagist庫
DATABASE_URL="mysql://root:123456@127.0.0.1:3306/packagist?serverVersion=8.0"
# ALGOLIA 配置,搜尋用。 可前往 https://www.algolia.com/ 註冊,免費使用,如果只是嘗試本地部署,可忽略
ALGOLIA_APP_ID=xxx
ALGOLIA_ADMIN_KEY=xxx
ALGOLIA_SEARCH_KEY=xxx
ALGOLIA_INDEX_NAME=xxx
# redis 配置,可換成自己
REDIS_URL=redis://localhost
# 谷歌的一個驗證,我在使用時,這裡會有點問題,下面會講。
###> beelab/recaptcha2-bundle ###
APP_RECAPTCHA_ENABLED=false
APP_RECAPTCHA_SITE_KEY=needed
APP_RECAPTCHA_SECRET=needed
###< beelab/recaptcha2-bundle ###
apcu快取錯誤
config/packages/cache.yaml
檔案裡的system
,使用的apcu
,由於我的php沒有裝這個擴充套件導致快取報錯
framework:
cache:
app: cache.adapter.redis
# 下面的這個system快取 使用的是apcu。如果你沒有安裝apcu這個php擴充套件,可以替換成其他的
# 例如:cache.adapter.redis cache.adapter.filesystem 等等
system: cache.adapter.apcu
default_redis_provider: snc_redis.cache
pools:
doctrine.cache: null
prefix_seed: packagist
recaptcha2
的問題
查閱以下程式碼。
templates/registration/register.html.twig
templates/reset_password/request.html.twig
我們會發現這個設定了一個set requiresRecaptcha = true
,這個會讓我們上面.env
中所設定的APP_RECAPTCHA_ENABLED=false
無效。
這樣就會導致如果你沒有設定APP_RECAPTCHA_SITE_KEY
和APP_RECAPTCHA_SECRET
,那麼你就將永遠無法提交登錄檔單,和重置密碼的表單。
這個問題困擾了我很久,具體表現為,點選註冊按鈕,沒有任何反應,只有console
控制檯報了一下recaptcha.js
的錯誤。
如果你跟我一樣,並沒有設定recaptcha
,那麼你需要刪除上面兩個程式碼檔案中的{% set requiresRecaptcha = true %}
並且再次重新 composer install
,或者手動執行php bin/console cache:clear
當你都已經準備好了之後,就可以使用composer install
來安裝你的程式了。
然後使用symfony serve
啟動一個簡單的webserver
如果你沒有
symfony
,請到這裡下載一個 symfony.com/download
提交自己的包
一旦你成功完成以上操作,成功註冊了一個賬號之後,你可以嘗試提交自己的私有包。
例如 https://github.com/xxx/xxx
,https://gitlab.com/xxx/xxx
但,需要記住的是: 這個連結對應的程式碼庫應該是一個 pulic 公開的庫,否則你需要到你部署packagist
專案的機器上設定ssh
或者 設定 git clone https
時的賬號密碼
而且你的程式碼庫中,應該擁有composer.json
檔案,並且正確的配置composer.json
內容。
一旦提交成功,你可以點選update
按鈕更新你的私有包,記住要在伺服器上執行php bin/console packagist:run-workers
當然 最後的做法是按照文件上的,在伺服器上使用crontab
執行上面的命令。
使用自己的包
一旦上面的都完成了,那麼你就已經成功的提交了一個包到自己私有的packagist
上了
在另一個專案中的composer.json
中加上 自己的倉庫
"repositories": [
{
"type" : "composer",
"url" : "https://packagist.mydomain.com"
}
]
然後composer require my/packagist
,你就可以成功的下載
配置私有的gitlab-domains
正常來說,我們的包應該擁有一個版本號,並且可以下載dist
但如果我們使用私有的gitlab
,每次composer install
或者 composer require
時 是使用 git clone
的方式去拉取原始碼。
你可以使用
composer require xxx/xxx -vvv
的方式來檢視composer 下載每個包的細節
這樣就會對你composer install
時的環境有要求,必須擁有git 命令。
在一些k8s,docker 映象中install 時可能會出現一些些問題。
我們在packagist
部署的機器上執行下面的這個命令,再次去packagist
中更新自己的包
然後再rm -rf vendor && rm -rf composer.lock && composer install -vvv
你就可以看到以dist的方式去gitlab下載原始碼了,不再是git clone
的方式去克隆原始碼
composer --global config gitlab-domains gitlab.xxx.cn gitlab.com
本作品採用《CC 協議》,轉載必須註明作者和本文連結