源码地址: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