在本教程中,我们将安装一个自定义的 Composer 存储库,这意味着您可以托管自己的私人包,并在 composer.json 文件中使用它们。
Composer 是一个 PHP 依赖管理工具,允许您指定您的项目需要哪些库,并将自动为您安装它们。
有两种类型的自定义存储库:Satis
和Packagist
。Satis是一个静态的,这意味着它生成了JSON和HTML文件,它是一个静态的网页。Packagist是packagist.org的代码,因此是一个非常先进的工具,还包括统计和搜索。
在这里,我们假设您知道什么是 Composer 以及如何使用它,Satis 或 Packagist 都应该安装(不是两者)。
要求
- 一个 Ubuntu 服务器
- 这个 LAMP 堆栈(https://www.digitalocean.com/community/articles/how-to-install-linux-apache-mysql-php-lamp-stack-on-ubuntu)
- Git follow this tutorial
满足
如前所述,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凭证,您可以使用以下程序手动创建一个代币:
- 创建在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
可以留给默认 localhost
。 database_name
和 database_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_id
和github.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}