部署 packagist私服 搭配gitlab 私服使用

部署packagist 搭配gitlab使用

源码地址:composer/packagist 笔者在写这篇文章的时候对应的commit sha :aa0d63fd6ebbfd991aa3ab652d33c6c8e463543a

因为packagist没有版本的概念 所以使用commit sha 的方式来记录一下

环境安装

由于最新版使用的是php8.0,所以来安装一下8.0

使用apt安装php8.0

1
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文件

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
# 数据库配置, 修改成自己的配置,并确保拥有packagist库
DATABASE_URL="mysql://root:[email protected]: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没有装这个扩展导致缓存报错

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
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_KEYAPP_RECAPTCHA_SECRET,那么你就将永远无法提交注册表单,和重置密码的表单。

这个问题困扰了我很久,具体表现为,点击注册按钮,没有任何反应,只有console控制台报了一下recaptcha.js的错误。

如果你跟我一样,并没有设置recaptcha,那么你需要删除上面两个代码文件中的{% set requiresRecaptcha = true %} 并且再次重新 composer install,或者手动运行php bin/console cache:clear

当你都已经准备好了之后,就可以使用composer install来安装你的程序了。

然后使用symfony serve 启动一个简单的webserver

如果你没有symfony,请到这里下载一个 https://symfony.com/download

提交自己的包

一旦你成功完成以上操作,成功注册了一个账号之后,你可以尝试提交自己的私有包。

例如 https://github.com/xxx/xxxhttps://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中加上 自己的仓库

1
2
3
4
5
6
    "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的方式去克隆源码

1
 composer --global config gitlab-domains gitlab.xxx.cn gitlab.com
Licensed under CC BY-NC-SA 4.0
Built with Hugo
主题 StackJimmy 设计