在本教程中,我们将安装一个自定义Composer存储库。 这意味着您可以托管自己的私有包,并在composer.json文件中使用它们。
Composer是一个PHP依赖管理工具,它允许您指定您的项目需要哪些库,它将自动为您安装它们。 有关Composer和一般使用的详细信息,请参阅这篇文章 。
有两种类型的自定义存储库: Satis
和Packagist
。 Satis是一个静态的,这意味着它生成JSON和HTML文件,它是一个静态的网页。 Packagist是packagist.org的代码,因此是一个非常先进的工具,也包括统计和搜索。 在本教程中,您将看到如何安装两个。
在这里,我们假设你知道什么是Composer,以及如何使用它。 应该安装Satis或Packagist(而不是两者)。
要求
Satis
正如已经说过的,Satis是一个静态库。 GitHub存储库的README说明如下:
它使用任何composer.json文件作为输入,并将所有必需的(根据其版本约束)软件包转储到Composer Repository文件。
安装Satis非常容易:
cd /var/www/
curl -sS https://getcomposer.org/installer | php
php composer.phar create-project composer/satis --stability=dev --keep-vcs
现在所有需要做的是添加存储库并生成静态网页。 要做到这一点,创建一个文件satis.json
中包含以下内容的/ var / WWW(利用nano /var/www/satis.json
编辑文件):
{
"name": "My Repository",
"homepage": "http://YOUR_IP",
"repositories": [
{ "type": "vcs", "url": "https://github.com/symfony/yaml" },
{ "type": "vcs", "url": "https://github.com/symfony/HttpFoundation"
}
],
"require-all": true
}
在此文件中,我们为存储库设置一个名称,设置主页(必须设置为从托管Satis的Web根目录),并指定一些存储库。 对于这个例子,我使用了2个Symfony2组件。 现在我们可以生成静态网页:
php satis/bin/satis build satis.json .
使用这些示例,将需要相当长的时间,因为这些存储库有很多版本。 您可能需要根据GitHub进行身份验证,因为Composer使用的GitHub API在默认情况下对其使用有限制。 这种情况下,也就是在描述故障排除部分Composer网站:
由于GitHub对其API的速率限制,可能会发生Composer提示要求您的用户名和密码的身份验证,以便它可以继续其工作。
如果您不希望向Composer提供GitHub凭据,可以使用以下过程手动创建令牌:
当Composer完成后,您可以访问的http:// YOUR_IP 。 这将显示已添加的所有软件包和版本。
每当更新一个存储库时,应运行我们用于生成网页的命令。 您也可以使用此cron作业,但已涵盖在本教程中 。
Packagist
现在,我们将开始安装Packagist。 Packagist是一个Symfony2应用程序,这意味着它有很多依赖项。 本文假设您使用的是全新安装,因此不应安装Satis。 如前所述, 只在两个中的一个应安装。
首先,应该安装所有的要求。
一的要求是Redis的 ,一个数据库存储的服务器。 执行以下命令安装Redis:
sudo apt-get update
sudo apt-get -y install build-essential tcl8.5
cd /opt
wget http://download.redis.io/releases/redis-2.8.7.tar.gz
tar xzf redis-2.8.7.tar.gz
mv redis-2.8.7 redis
cd redis
这个下载的Redis。 我们现在应该编译和安装它:
make
sudo make install
cd utils
以下命令设置服务器:
sudo ./install_server.sh
您可以对每个问题按Enter键,这意味着将使用默认值,这对于此安装是好的。 最后,让它自动启动:
sudo update-rc.d redis_6379 defaults
通过执行测试它是否工作:
redis-cli ping
如果通过响应PONG
,安装工作正常。
另一个要求是Solr的 :一个搜索引擎。 要安装此软件,首先安装Java:
sudo apt-get -y install openjdk-7-jdk
mkdir /usr/java
如果你在64位Droplet(大多数人都会),你应该执行以下命令:
ln -s /usr/lib/jvm/java-7-openjdk-amd64 /usr/java/default
如果是在32位系统上,则应执行以下命令:
ln -s /usr/lib/jvm/java-7-openjdk-i386 /usr/java/default
然后,下载Solr:
cd /opt
wget http://archive.apache.org/dist/lucene/solr/3.6.2/apache-solr-3.6.2.tgz
tar -xvf apache-solr-3.6.2.tgz
cp -R apache-solr-3.6.2/example /opt/solr
cd /opt/solr
sudo wget -O /etc/default/jetty
https://gist.githubusercontent.com/koesie10/93cd2f2ab68471c34a25/raw/jetty
sudo wget -O /opt/solr/etc/jetty-logging.xml
https://gist.githubusercontent.com/koesie10/1070b285b45fb9de652c/raw/6adbb2d54455de4a0adce44015a294b77795d298/jetty-logging.xml
接下来,我们可以设置Solr用户和自动启动:
sudo useradd -d /opt/solr -s /sbin/false solr
sudo chown solr:solr -R /opt/solr
sudo wget -O /etc/init.d/jetty http://svn.codehaus.org/jetty/jetty/branches/jetty-6.1/bin/jetty.sh
sudo chmod a+x /etc/init.d/jetty
sudo update-rc.d jetty defaults
最后一步是重新启动Solr:
sudo /etc/init.d/jetty restart
为了测试是否Solr的作品,请访问http://YOUR_IP:8983/solr
在浏览器中。 如果这提供了管理界面,您的安装已成功。
我们还应该正确配置Apache和PHP:
sudo a2enmod rewrite
sudo apt-get -y install php5-intl php5-curl acl git
您现在可以开始真正安装Packagist。 要开始,请执行以下命令:
cd /var/www/
rm index.html info.php
git clone https://github.com/composer/packagist .
curl -sS https://getcomposer.org/installer | php
首先,通过打开mysql命令行创建数据库:
mysql
如果您已为root用户设置了密码,则可能会提示您进行身份验证,这是建议的。 创建一个用户调用packagist
并分配一个密码(更改密码your_password
的东西更安全):
CREATE USER 'packagist'@'localhost' IDENTIFIED BY 'your_password';
GRANT USAGE ON * . * TO 'packagist'@'localhost' IDENTIFIED BY
'your_password' WITH MAX_QUERIES_PER_HOUR 0 MAX_CONNECTIONS_PER_HOUR 0
MAX_UPDATES_PER_HOUR 0 MAX_USER_CONNECTIONS 0 ;
CREATE DATABASE IF NOT EXISTS `packagist`;
GRANT ALL PRIVILEGES ON `packagist` . * TO 'packagist'@'localhost';
exit;
这也将创建一个名为数据库packagist
。
现在复制文件parameters.yml
.dist到parameters.yml:
cp app/config/parameters.yml.dist app/config/parameters.yml
我们现在应该编辑文件以适应我们的需要:
nano app/config/parameters.yml
应根据服务器的需要更改文件。
第一个选项是数据库*参数。 他们是自我描述; 它们可以容易地填充。 如果你按照创建数据库上面的步骤,你可以离开'数据库驱动程序to
PDO MySQL的, just like
数据库主机which can be left at the default
本地主机. The
. The
数据库名称and
数据库用户should be set to
packagist and the
database_password`应设置为之前设置的密码。
下一节是关于邮寄。 你可能想使用SMTP或sendmail作为mailer_transport
,但是这取决于你的邮件服务器上。 使用SMTP时,还应填写有关SMTP的所有其他详细信息。
该packagist_host
参数是必需的,所以要么将它设置为你的Droplet连接的域名或使用您的Droplet的IP。 之后packagist_host
已经填写,取消以下两个参数。 如果你不使用HTTPS, router.request_context.scheme
应设置为http
。
如果上述步骤分别遵循正确的redis_dsn
参数应该不需要被改变。 该locale
也可以留为默认和ga_key
不是必需的。 该github.client_id
和github.client_secret
,然而,建议填写。对于这一点,先注册一个新的应用程序GitHub上 。 回调URL可以留空。 该应用程序已被注册后,复制客户端ID来github.client_id
。 对客户端密钥也应该这样做。
需要要填写的下一件事是secret
和remember_me.secret
。 那些可以随机地填充在或者它可以是在所产生的随机串thebitmill.com 。 标点应该在发生器中取消选中,因为它可能导致YAML的问题。
其余的参数可以保留其默认值。 现在执行以下命令:
php composer.phar install
app/console doctrine:schema:create
app/console cache:clear --env=prod
app/console assets:install web
mkdir home
sudo chown www-data:www-data -R /var/www/home
APACHEUSER=`ps aux | grep -E '[a]pache|[h]ttpd' | grep -v root | head -1 |
cut -d\ -f1`
sudo setfacl -R -m u:$APACHEUSER:rwX -m u:`whoami`:rwX app/cache app/logs
sudo setfacl -dR -m u:$APACHEUSER:rwX -m u:`whoami`:rwX app/cache app/logs
唯一剩下的是设置一个正确的VirtualHost。 编辑/etc/apache2/sites-available/default
:
nano /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>
。 接下来,在Indexes之前放一个减号,使得行变成这样:
Options -Indexes FollowSymLinks MultiViews
在那之后,从改线AllowOverride None
到AllowOverride All
。 最后,重新启动Apache:
sudo service apache2 restart
现在,我们需要正确设置Solr。 编辑/opt/solr/solr/solr.xml
:
nano /opt/solr/solr/solr.xml
在这个文件中,找到collection1
和替换它packagist
,让文件看起来像这样:
<?xml version="1.0" encoding="UTF-8" ?>
<!--
All (relative) paths are relative to the installation path
persistent: Save changes made via the API to this file
sharedLib: path to a lib directory that will be shared across all cores
-->
<solr persistent="false">
<!--
adminPath: RequestHandler path to manage cores.
If 'null' (or absent), cores will not be manageable via request handler
-->
<cores adminPath="/admin/cores" defaultCoreName="packagist">
<core name="packagist" instanceDir="." />
</cores>
</solr>
现在,Packagist的schema.xml
应Solr的使用。 执行以下命令:
rm /opt/solr/solr/conf/schema.xml
cp /var/www/doc/schema.xml /opt/solr/solr/conf/schema.xml
sudo /etc/init.d/jetty restart
您的安装现在可以在被访问http://YOUR_IP/
。 它应该像Packagist一样工作。 当您的安装需要支持更多版本控制系统(VCS)时,还要安装以下内容:
sudo apt-get -y install subversion
sudo apt-get -y install mercurial
还设置了cron作业以下命令(建议的时间间隔为1分钟,请参阅本教程的设置cron作业):
/var/www/app/console packagist:update --no-debug --env=prod
/var/www/app/console packagist:dump --no-debug --env=prod
/var/www/app/console packagist:index --no-debug --env=prod
每当添加新包时,它不会被Solr自动索引; 因为上述命令应该真正设置为cron作业,或者每当有变化时手动执行。 第一个选项可能是最简单的。
有些事情不像统计页面那样立即工作。 Packagist应该大约2天前,所以它不会给出500错误了。
使用您的存储库
现在可以使用您自己的Composer。 要做到这一点,添加以下repositories
部分composer.json:
{
"repositories": [
{
"type": "composer",
"url": "http://YOUR_IP/"
}
],
// these are just examples of requirements, you don't actually need
them (delete this comment as comments are officially not supported in JSON)
"require": {
"symfony/yaml": "dev-master",
"symfony/http-foundation": "dev-master"
}
}