# 搭建環境
>[danger]SD 已經停止維護,推薦使用ESD項目[ESD](http://www.hmoore.net/tmtbe/goswoole/1067764)
## 自動安裝
SD提供提供了運行環境的一鍵安裝部署,可用于全新系統的環境搭建。
環境包括PHP,各類擴展,SD框架。
執行下面命令將安裝SD3.X版本,包括所有環境
```
curl -sS sd.youwoxing.net/install_v3 | bash
```
運行后,喝杯茶靜等安裝完成。
如果你已經安裝了PHP,有可能會出現安裝錯誤,請移除你安裝的PHP版本再執行上面的命令。
該命令已在ubuntu,centos,deepin系統中驗證有效。
上面的命令會自動生成SD的項目文件夾,可以修改composer.json文件增加自己的依賴或者修改SD的版本。
composer.json:
```json
{
"require": {
"tmtbe/swooledistributed":">3.0.0"
},
"autoload": {
"psr-4": {
"app\\": "src/app",
"test\\": "src/test"
}
}
}
```
通過composer進行依賴代碼更新,運行:
```
composer update
```
## 手動安裝
1. 安裝PHP7.1.14版本,包含bcmath,mbstring,pdo_mysql,posix擴展。
2. 安裝swoole,inotify,ds,redis,hiredis
使用下面的安裝腳步安裝,可以通過修改版本號安裝不同版本。
```
#!/bin/sh
#sd安裝腳本
set -e
pwd=`pwd`
hiredis_version="0.13.3"
phpredis_version="3.1.6"
phpds_version="1.2.4"
phpinotify_version="2.0.0"
swoole_version="2.1.1"
sd_version="3.0.6"
swoole_configure="--enable-async-redis --enable-openssl --enable-coroutine"
do_install_ex() {
php_m=`php -m`
if ! [[ $php_m =~ "bcmath" ]] ; then
echo "缺少必要bcmath擴展,請安裝或者卸載php版本后重新運行本命令"
exit
fi
if ! [[ $php_m =~ "mbstring" ]] ; then
echo "缺少必要mbstring擴展,請安裝或者卸載php版本后重新運行本命令"
exit
fi
if ! [[ $php_m =~ "pdo_mysql" ]] ; then
echo "缺少必要pdo_mysql擴展,請安裝或者卸載php版本后重新運行本命令"
exit
fi
if ! [[ $php_m =~ "posix" ]] ; then
echo "缺少必要posix擴展,請安裝或者卸載php版本后重新運行本命令"
exit
fi
do_install_swoole
if ! [[ $php_m =~ "redis" ]] ; then
do_install_redis
fi
if ! [[ $php_m =~ "ds" ]] ; then
do_install_ds
fi
if ! [[ $php_m =~ "inotify" ]] ; then
do_install_inotify
fi
}
do_install_inotify() {
cd ${pwd};
echo "[inotify] 開始下載"
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] 開始編譯"
cd ${pwd}/php-inotify-${phpinotify_version}
phpize
./configure
make clean > /dev/null
make -j
make install
echo "extension=inotify.so" | tee ${init_file}/inotify.ini
rm -f ${pwd}/${phpinotify_version}.tar.gz
rm -rf ${pwd}/php-inotify-${phpinotify_version}
}
do_install_ds() {
cd ${pwd};
echo "[ds] 開始下載"
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] 開始編譯"
cd ${pwd}/extension-${phpds_version}
phpize
./configure
make clean > /dev/null
make -j
make install
echo "extension=ds.so" | tee ${init_file}/ds.ini
rm -f ${pwd}/v${phpds_version}.tar.gz
rm -rf ${pwd}/extension-${phpredis_version}
}
do_install_redis() {
cd ${pwd};
echo "[redis] 開始下載"
if [ -f "${phpredis_version}.tar.gz" ] ;then
rm -f ${phpredis_version}.tar.gz
fi
wget https://github.com/phpredis/phpredis/archive/${phpredis_version}.tar.gz
if [ -d "redis-${phpredis_version}" ] ;then
rm -rf redis-${phpredis_version}
fi
tar -xzvf ${phpredis_version}.tar.gz > /dev/null
echo "[redis] 開始編譯"
cd ${pwd}/phpredis-${phpredis_version}
phpize
./configure
make clean > /dev/null
make -j
make install
echo "extension=redis.so" | tee ${init_file}/redis.ini
rm -f ${pwd}/${phpredis_version}.tar.gz
rm -rf ${pwd}/redis-${phpredis_version}
}
do_install_swoole() {
cd ${pwd};
echo "[swoole] 開始下載"
if [ -f "v${swoole_version}.tar.gz" ] ;then
rm -f v${swoole_version}.tar.gz
fi
if [ -f "v${hiredis_version}.tar.gz" ] ;then
rm -f v${hiredis_version}.tar.gz
fi
wget https://github.com/swoole/swoole-src/archive/v${swoole_version}.tar.gz https://github.com/redis/hiredis/archive/v${hiredis_version}.tar.gz
if [ -d "swoole-src-${swoole_version}" ] ;then
rm -rf swoole-src-${swoole_version}
fi
if [ -d "hiredis-${hiredis_version}" ] ;then
rm -rf hiredis-${hiredis_version}
fi
tar -xzvf v${swoole_version}.tar.gz > /dev/null
tar -xzvf v${hiredis_version}.tar.gz > /dev/null
echo "[swoole] 開始編譯"
cd ${pwd}/hiredis-${hiredis_version}
make clean > /dev/null
make -j
make install
ldconfig
cd ${pwd}/swoole-src-${swoole_version}
phpize
./configure ${swoole_configure}
make clean > /dev/null
make -j
make install
echo "extension=swoole.so" | tee ${init_file}/swoole.ini
rm -f ${pwd}/v${swoole_version}.tar.gz
rm -f ${pwd}/v${hiredis_version}.tar.gz
rm -rf ${pwd}/swoole-src-${swoole_version}
rm -rf ${pwd}/hiredis-${hiredis_version}
}
do_install_sd(){
echo "[SD] 開始安裝"
cd ${pwd}
mkdir sd
cd sd
echo "{\"require\": {\"tmtbe/swooledistributed\":\"=${sd_version}\"},\"autoload\": {\"psr-4\": {\"app\\\\\": \"src/app\",\"test\\\\\": \"src/test\"}}}" > composer.json
composer update
php vendor/tmtbe/swooledistributed/src/Install.php -y
echo "框架安裝完畢,項目目錄:${pwd}/sd"
}
do_install_composer(){
if ! command_exists composer ; then
cd ${pwd}
echo "[composer] 開始下載"
curl -sS https://getcomposer.org/installer | php
mv composer.phar /usr/local/bin/composer
fi
composer config -g repo.packagist composer https://packagist.phpcomposer.com
}
set_php() {
init_file=`echo '<?php $command=$argv[1]??null;ob_start();phpinfo(INFO_GENERAL);$result=ob_get_contents();ob_clean();$ini_files="";$info=explode("\n\n",$result)[1];$info2=explode("\n",$info);foreach($info2 as $value){$info3=explode("=>",$value);if($info3[0]=="Scan this dir for additional .ini files "){$ini_files = trim($info3[1]);break;}}echo $ini_files;' | php`
}
set_ldconf() {
echo "include /etc/ld.so.conf.d/*.conf" | tee /etc/ld.so.conf
if ! [ -d "/etc/ld.so.conf.d" ] ;then
mkdir /etc/ld.so.conf.d
fi
cd /etc/ld.so.conf.d
echo "/usr/local/lib" | tee /etc/ld.so.conf.d/libc.conf
ldconfig -v
}
do_install(){
set_ldconf
php_version=`php -v`
if ! [[ $php_version =~ "PHP 7" ]] ; then
echo "PHP版本不對,請卸載php后重新運行此命令"
fi
set_php
do_install_ex
do_install_composer
do_install_sd
}
do_install
```
- SD3.X簡介
- 捐贈SD項目
- VIP服務
- 基礎篇
- 搭建環境
- 使用Composer安裝/更新SD框架
- 啟動命令
- 開發注意事項
- 框架配置
- 配置文件夾
- server.php
- ports.php
- business.php
- mysql.php
- redis.php
- timerTask.php
- log.php
- consul.php
- catCache.php
- client.php
- 自定義配置
- 框架入口
- MVC架構
- 加載器-Loader
- 控制器-Controller
- 模型-Model
- 視圖-View
- 同步任務-Task
- 封裝器
- Swoole編程指南-EOF協議
- Swoole編程指南-固定包頭協議
- 封裝器-Pack
- 路由器
- TCP相關
- 綁定UID
- Send系列
- Sub/Pub
- 獲取服務器信息
- Http相關
- HttpInput
- HttpOutput
- 默認路由規則
- WebSocket相關
- 使用SSL
- 公共函數
- 進階篇
- 內核優化
- 封裝器路由器原理剖析
- 對象池
- 上下文-Context
- 中間件
- 進程管理
- 創建自定義進程
- 進程間RPC
- 自定義進程如何使用連接池
- 異步連接池
- Redis
- Mysql
- Mqtt
- HttpClient
- Client
- AMQP
- RPC
- 日志工具-GrayLog
- 微服務-Consul
- Consul基礎
- 搭建Consul服務器
- SD中Consul配置
- 微服務
- 選舉-Leader
- Consul動態配置定時任務
- 熔斷與降級
- 集群-Cluster
- 高速緩存-CatCache
- 萬物-Actor
- Actor原型
- Actor的創建
- Actor間的通訊
- 消息派發-EventDispatcher
- 延遲隊列-TimerCallBack
- 協程
- 訂閱與發布
- MQTT簡易服務器
- AMQP異步任務調度
- 自定義命令-Console
- 調試工具Channel
- 特別注意事項
- 日常問題總結
- 實踐案例
- 物聯網自定義協議
- Actor在游戲的應用
- Mongodb以及一些同步擴展的使用
- 自定義進程使用MQTT客戶端
- 開發者工具
- SDHelper