现有的安装环境是一键 lnmp安装的php,mysql,redis,nginx等环境,并不想重新安装,因此选择通过手动方式
手动方式
只需要安装 swoole,phpsd,phpinotify就够了,php所需要的 包含bcmath,mbstring,pdo_mysql,posix扩展,lnmp安装的php版本之中已经包含。可通过拆分官方安装脚本,添加需要的功能模块。
composer为常用工具,安装composer也比较容易。
#### 1、安装swoole
先检查是否在安装完成 redis之后安装 hiredis,hiredis是redis数据库的C接口。
文档中明确要求需要hiredis 和openssl
openssl 之前已经安装过了,安装 hiredis即可
如果原来安装redis时候的安装包还在,则进入redis的安装包,不然重新下载一个。
进入 deps/hiredis/ 目录下
```shell
make && make install
ldconfig
```
hiredis 即安装,或者按照文档下载hiredis安装。
下载最新版swoole,并安装
```shell
git clone https://gitee.com/swoole/swoole.git
cd swoole
/usr/local/php/bin/phpize
./configure --enable-coroutine --enable-openssl --enable-sockets \
--enable-mysqlnd --enable-async-redis \
--with-php-config=/usr/local/php/bin/php-config
make && make install
vi /usr/local/php/conf.d/extension.ini
输入
extension=swoole.so
:wq
service php-fpm restart
```
swoole 安装完毕
可以通过,查看phpinfo,查看swoole信息
```shell
php --ri swoole
```
#### 2、安装phpsd
编辑安装脚本
```shell
vi phpds.sh
#!/bin/bash
pwd=`pwd`
phpds_version="1.2.4"
do_install_ds() {
cd ${pwd};
echo "[ds] starting download"
if [ -f "v${phpds_version}.tar.gz" ] ;then
rm -f v${phpds_version}.tar.gz
fi
wget https://github.com/php-ds/extension/archive/v${phpds_version}.tar.gz
if [ -d "extension-${phpredis_version}" ] ;then
rm -rf extension-${phpredis_version}
fi
tar -xzvf v${phpds_version}.tar.gz > /dev/null
echo "[ds] starting compile"
cd ${pwd}/extension-${phpds_version}
phpize
./configure --with-php-config=/usr/local/php/bin/php-config
make clean > /dev/null
make -j
make install
echo "extension=ds.so" | tee -a /usr/local/php/conf.d/extension.ini
rm -f ${pwd}/v${phpds_version}.tar.gz
rm -rf ${pwd}/extension-${phpredis_version}
}
do_install_ds
```
需要注意的是修改安装的是php-config的路径,以及最后加的拓展位置
执行安装命令
```
chmod 766 phpds.sh
./phpds.sh
service php-fpm restart
```
#### 3、安装phpinotify
编辑安装脚本
```shell
vi phpinotify.sh
#!/bin/bash
pwd=`pwd`
phpinotify_version="2.0.0"
do_install_inotify() {
cd /root;
echo "[inotify] starting to download"
if [ -f "${phpinotify_version}.tar.gz" ] ;then
rm -f ${phpinotify_version}.tar.gz
fi
wget https://github.com/arnaud-lb/php-inotify/archive/${phpinotify_version}.tar.gz
if [ -d "php-inotify-${phpinotify_version}" ] ;then
rm -rf php-inotify-${phpinotify_version}
fi
tar -xzvf ${phpinotify_version}.tar.gz > /dev/null
echo "[inotify] start compiling ..."
cd /root/php-inotify-${phpinotify_version}
phpize
./configure --with-php-config=/usr/local/php/bin/php-config
make clean > /dev/null
make -j
make install
echo "extension=inotify.so" | tee -a /usr/local/php/conf.d/extension.ini
rm -f ${pwd}/${phpinotify_version}.tar.gz
rm -rf ${pwd}/php-inotify-${phpinotify_version}
}
do_install_inotify
```
安装步骤基本一致
```
chmod 766 phpinotify.sh
./phpinotify.sh
service php-fpm restart
```
#### 4. 安装 composer
安装composer并切换到国内镜像
```shell
curl -sS https://getcomposer.org/installer | php -- --install-dir=/usr/local/bin --filename=composer
composer config -g repo.packagist composer https://packagist.phpcomposer.com
composer -v
```
#### composer 安装框架 参考文档
加composer.json
```json
{
"require": {
"tmtbe/swooledistributed":">3.2.6"
},
"autoload": {
"psr-4": {
"app\\": "src/app",
"test\\": "src/test"
}
}
}
```
运行
```shell
composer install
```
#### 初始化
运行脚手架工具安装框架
```shell
php vendor/tmtbe/swooledistributed/src/Install.php
```
到这一步时候出错了,另外提示信息是乱码 ,主要是由于系统不支持中文
由于安全起见php会禁用exec()函数,怎么办
查看源码 vendor/tmtbe/swooledistributed/src/Install.php
```php
$path = getcwd();
print_r("将在当前位置创建项目,是否确定(y/n)?\n");
if (count($argv) < 2 || $argv[1] != '-y') {
$read = read();
if (strtolower($read) != 'y') {
exit();
}
}
copy_dir(__DIR__ . "/bin", $path . "/bin", true);
@mkdir('src');
copy_dir(__DIR__ . "/app", $path . "/src/app");
copy_dir(__DIR__ . "/config", $path . "/src/config");
copy_dir(__DIR__ . "/lua", $path . "/src/lua");
copy_dir(__DIR__ . "/www", $path . "/src/www");
copy_dir(__DIR__ . "/,", $path . "/src/test");
print_r("bin目录下start_swoole_serverphp是启动文件,define.php可以自定义目录配置,祝君使用愉快。\n");
print_r("即将安装consul(不使用微服务可以不安装),是否确定(y/n)?\n");
if (count($argv) < 2 || $argv[1] != '-y') {
$read = read();
if (strtolower($read) != 'y') {
print_r("安装结束\n");
exit();
}
}
chmod("$path/bin/exec/download.sh", 0777);
exec("$path/bin/exec/download.sh");
print_r("consul安装结束\n");
exit();
function read()
{
$fp = fopen('php://stdin', 'r');
$input = fgets($fp, 255);
fclose($fp);
$input = chop($input);
return $input;
}
function copy_dir($src, $dst, $force = false)
{
$dir = opendir($src);
if(!$dir) {
print_r("$src 权限问题或目录不合法,安装错误\n");
return;
}
if (file_exists($dst) && $force == false) {
print_r("$dst 目录已存在(跳过)\n");
return;
}
@mkdir($dst);
while (false !== ($file = readdir($dir))) {
if (($file != '.') && ($file != '..')) {
if (is_dir($src . '/' . $file)) {
copy_dir($src . '/' . $file, $dst . '/' . $file);
continue;
} else {
copy($src . '/' . $file, $dst . '/' . $file);
}
}
}
closedir($dir);
print_r("已创建$dst 目录\n");
}
```
简单来说就是分为两步,复制目录(bin,app,config,lua,www,test)到当前目录下的src目录,consul的安装
明白了这一个点,也可以手动进行项目初始化
当输入命令
```
php vendor/tmtbe/swooledistributed/src/Install.php
```
只按一次y,第二次按 n ,之后手动 输入命令 即可安装consul
```shell
sh bin/exec/download.sh
```
到这里环境就已经差不多了,后面再慢慢解读这个框架