如何在 Ubuntu 上安装自定义 Composer 资源库

在本教程中,我们将安装一个自定义的 Composer 存储库,这意味着您可以托管自己的私人包,并在 composer.json 文件中使用它们。

Composer 是一个 PHP 依赖管理工具,允许您指定您的项目需要哪些库,并将自动为您安装它们。

有两种类型的自定义存储库:SatisPackagist。Satis是一个静态的,这意味着它生成了JSON和HTML文件,它是一个静态的网页。Packagist是packagist.org的代码,因此是一个非常先进的工具,还包括统计和搜索。

在这里,我们假设您知道什么是 Composer 以及如何使用它,Satis 或 Packagist 都应该安装(不是两者)。

要求

满足

如前所述,Satis 是一个静态存储库,GitHub 存储库的 README 声明如下:

它使用任何 composer.json 文件作为输入,并将所有所需的包(根据其版本限制)放到 Composer Repository 文件中。

安装Satis非常简单:

1cd /var/www/
2curl -sS https://getcomposer.org/installer | php
3php composer.phar create-project composer/satis --stability=dev --keep-vcs

现在所需要做的就是添加存储库并生成静态网页。 要做到这一点,请在 /var/www中创建一个satis.json文件,包含以下内容(使用nano /var/www/satis.json来编辑该文件):

 1{
 2    "name": "My Repository",
 3    "homepage": "http://YOUR_IP",
 4    "repositories": [
 5        { "type": "vcs", "url": "https://github.com/symfony/yaml" },
 6        { "type": "vcs", "url": "https://github.com/symfony/HttpFoundation"
 7}
 8    ],
 9    "require-all": true
10}

在此文件中,我们为存储库设置了名称,设置了主页(必须设置到Satis托管的Web根),并指定了一些存储库。

1php satis/bin/satis build satis.json .

使用这些示例,这将需要很长一段时间,因为这些存储库有许多版本. 您可能需要对 GitHub 进行身份验证,因为 Composer 使用 GitHub API,该 API 在默认情况下对其使用有限制。

由于GitHub在其API上的率限制,Composer可能会要求您的用户名和密码进行身份验证,以便它可以继续工作

如果您更愿意不向Composer提供您的GitHub凭证,您可以使用以下程序手动创建一个代币:

  1. 创建在GitHub上的OAuth代币。

当 Composer 完成后,您可以访问 http://YOUR_IP. 这将显示已添加的所有包和版本。

每当其中一个存储库被更新时,我们使用的生成网页的命令应该被执行. 您也可以使用 cron 工作来完成这项工作,但它已经被涵盖在 本教程中。

包装

现在,我们将开始安装Packagist。Packagist是一个Symfony2应用程序,这意味着它有很少的依赖性。本文假定你正在使用一个新安装,所以Satis不应该安装。

首先,必须满足所有要求。

其中一个要求是 Redis,一个数据库存储服务器. 执行以下命令来安装 Redis:

1sudo apt-get update
2sudo apt-get -y install build-essential tcl8.5
3cd /opt
4wget http://download.redis.io/releases/redis-2.8.7.tar.gz
5tar xzf redis-2.8.7.tar.gz
6mv redis-2.8.7 redis
7cd redis

这个下载了Redis,现在我们应该编译并安装它:

1make
2sudo make install
3cd utils

以下命令设置服务器:

1sudo ./install_server.sh

您可以按按键输入每一个问题你得到,这意味着默认将被使用,这对于这个安装是好的。

1sudo update-rc.d redis_6379 defaults

测试它是否通过执行工作:

1redis-cli ping

如果它响应为PONG,您的安装工作顺利。

另一个要求是 Solr:搜索引擎. 要安装此软件,先安装Java:

1sudo apt-get -y install openjdk-7-jdk
2mkdir /usr/java

如果您使用的是 64 位 Droplet (大多数人将使用它),您应该执行以下命令:

1ln -s /usr/lib/jvm/java-7-openjdk-amd64 /usr/java/default

如果您使用的是 32 位系统,则应执行以下命令:

1ln -s /usr/lib/jvm/java-7-openjdk-i386 /usr/java/default

下载太阳:

1cd /opt
2wget http://archive.apache.org/dist/lucene/solr/3.6.2/apache-solr-3.6.2.tgz
3tar -xvf apache-solr-3.6.2.tgz
4cp -R apache-solr-3.6.2/example /opt/solr
5cd /opt/solr
6sudo wget -O /etc/default/jetty
7https://gist.githubusercontent.com/koesie10/93cd2f2ab68471c34a25/raw/jetty
8sudo wget -O /opt/solr/etc/jetty-logging.xml
9https://gist.githubusercontent.com/koesie10/1070b285b45fb9de652c/raw/6adbb2d54455de4a0adce44015a294b77795d298/jetty-logging.xml

接下来,我们可以设置Solar用户并自动启动:

1sudo useradd -d /opt/solr -s /sbin/false solr
2sudo chown solr:solr -R /opt/solr
3sudo wget -O /etc/init.d/jetty http://svn.codehaus.org/jetty/jetty/branches/jetty-6.1/bin/jetty.sh
4sudo chmod a+x /etc/init.d/jetty
5sudo update-rc.d jetty defaults

最后一步是重新启动 Solr:

1sudo /etc/init.d/jetty restart

要测试Solr是否有效,请访问您的浏览器中的http://YOUR_IP:8983/solr。如果提供管理界面,则您的安装成功。

我们还应该正确地配置Apache和PHP:

1sudo a2enmod rewrite
2sudo apt-get -y install php5-intl php5-curl acl git

您现在可以开始实际安装 Packagist. 要开始,请执行以下命令:

1cd /var/www/
2rm index.html info.php
3git clone https://github.com/composer/packagist .
4curl -sS https://getcomposer.org/installer | php

首先,通过打开 mysql 命令行创建数据库:

1mysql

如果您已为 root 用户设置了密码,您可能会被要求进行身份验证,这是建议的。创建一个名为packagist的用户并分配一个密码(将密码your_password更改为更安全的东西):

1CREATE USER 'packagist'@'localhost' IDENTIFIED BY 'your_password';
2GRANT USAGE ON * . * TO  'packagist'@'localhost' IDENTIFIED BY
3'your_password' WITH MAX_QUERIES_PER_HOUR 0 MAX_CONNECTIONS_PER_HOUR 0
4MAX_UPDATES_PER_HOUR 0 MAX_USER_CONNECTIONS 0 ;
5CREATE DATABASE IF NOT EXISTS  `packagist`;
6GRANT ALL PRIVILEGES ON  `packagist` . * TO  'packagist'@'localhost';
7exit;

这也将创建一个名为packagist的数据库。

现在将文件 parameters.yml.dist 复制到 parameters.yml:

1cp app/config/parameters.yml.dist app/config/parameters.yml

我们现在应该编辑文件以满足我们的需求:

1nano app/config/parameters.yml

文件应根据服务器的需求进行更改。

第一种选项是 database_* 参数,这些参数是自我描述的,可以很容易地填写。如果您按照上面的步骤创建数据库,您可以将 database_driver 留给 pdo_mysql,就像 database_host 可以留给默认 localhostdatabase_namedatabase_user 应该设置为 packagist,而 database_password 应该设置为您先前设置的密码。

下一个部分是关于邮件. 您可能希望使用SMTP或sendmail作为mailer_transport,但这取决于您的邮件服务器。

packagist_host参数是必需的,所以要么将其设置为与您的Droplet连接的域名,要么使用您的Droplet的IP。在packagist_host被填写后,请放弃以下两个参数。如果您不使用HTTPS,则router.request_context.scheme应设置为http

如果上述步骤是正确的,则不需要更改redis_dsn参数。locale也可以保留为默认,而ga_key不需要使用。但是,建议填写github.client_idgithub.client_secret。 首先在 GitHub上注册一个新应用程序。 回复 URL 可以空。 应用程序注册后,将客户 ID 复制到github.client_id

需要填写的下一个东西是秘密记住_me.secret。这些可以随机填写,或者它可能是在 thebitmill.com生成的随机字符串。

其余的参数可以留在其默认值,现在执行以下命令:

 1php composer.phar install
 2app/console doctrine:schema:create
 3app/console cache:clear --env=prod
 4app/console assets:install web
 5mkdir home
 6sudo chown www-data:www-data -R /var/www/home
 7APACHEUSER=`ps aux | grep -E '[a]pache|[h]ttpd' | grep -v root | head -1 |
 8cut -d\  -f1`
 9sudo setfacl -R -m u:$APACHEUSER:rwX -m u:`whoami`:rwX app/cache app/logs
10sudo setfacl -dR -m u:$APACHEUSER:rwX -m u:`whoami`:rwX app/cache app/logs

唯一剩下的就是设置一个正确的 VirtualHost. 编辑 /etc/apache2/sites-available/default:

1nano /etc/apache2/sites-available/default

DocumentRoot /var/www更改为DocumentRoot /var/www/web 然后在DocumentRoot下添加一行,内容为SetEnv HOME /var/www/home 然后将<Directory /var/www>更改为<Directory /var/www/web>

1Options -Indexes FollowSymLinks MultiViews

然后从AllowOverride None更改到AllowOverride All

1sudo service apache2 restart

现在,我们需要正确地设置 Solr。 编辑 /opt/solr/solr/solr.xml:

1nano /opt/solr/solr/solr.xml

在此檔案中,尋找「collection1」並以「packagist」取代,讓檔案看起來像這樣:

 1<?xml version="1.0" encoding="UTF-8" ?>
 2
 3<!--
 4 All (relative) paths are relative to the installation path
 5
 6  persistent: Save changes made via the API to this file
 7  sharedLib: path to a lib directory that will be shared across all cores
 8-->
 9<solr persistent="false">
10
11  <!--
12  adminPath: RequestHandler path to manage cores.
13    If 'null' (or absent), cores will not be manageable via request handler
14  -->
15  <cores adminPath="/admin/cores" defaultCoreName="packagist">
16    <core name="packagist" instanceDir="." />
17  </cores>
18</solr>

现在, Packagist 的 schema.xml 应该在 Solr 中使用,执行以下命令:

1rm /opt/solr/solr/conf/schema.xml
2cp /var/www/doc/schema.xml /opt/solr/solr/conf/schema.xml
3sudo /etc/init.d/jetty restart

你的安装现在可以访问在http://YOUR_IP/`. 它应该像Packagist一样工作. 当你的安装需要支持更多的版本控制系统(VCS),也安装这些:

1sudo apt-get -y install subversion
2sudo apt-get -y install mercurial

还为以下命令设置 cron 任务(推荐间隔为 1 分钟,请参阅 此教程 来设置 cron 任务):

1/var/www/app/console packagist:update --no-debug --env=prod
2/var/www/app/console packagist:dump --no-debug --env=prod
3/var/www/app/console packagist:index --no-debug --env=prod

每当新包被添加时,它不会被Solr自动索引;因此,上述命令应该真正设置为Cron任务,或者每次发生变化时手动执行。

有些东西不像统计页面那样立即工作. Packagist 应该在大约 2 天前工作,所以它不再给出 500 错误。

使用您的存储库

现在可以使用您自己的 Composer。 要做到这一点,请在 composer.json 中添加以下存储库部分:

 1{
 2    "repositories": [
 3     {
 4     "type": "composer",
 5     "url": "http://YOUR_IP/"
 6     }
 7    ],
 8    // these are just examples of requirements, you don't actually need
 9them (delete this comment as comments are officially not supported in JSON)
10    "require": {
11        "symfony/yaml": "dev-master",
12        "symfony/http-foundation": "dev-master"
13    }
14}
Submitted by: Koen Vlaswinkel
Published At
Categories with 技术
Tagged with
comments powered by Disqus