Docker搭建Swoole環(huán)境
$ docker-machine ls
$ docker-machine start default
$ docker-machine ssh default
$ docker-machine ip
$ docker ps -a
拉取鏡像
docker@default:~$ docker pull twosee/swoole
docker@default:~$ docker pull twosee/swoole-coroutine
docker@default:~$ docker pull twosee/swoole-coroutine:mysql
docker@default:~$ docker pull twosee/swoole-coroutine:redis
查看鏡像
docker@default:~$ docker images|grep swoole
twosee/swoole-coroutine latest d71166ef543b 2 months ago 833MB
twosee/swoole latest 36b1fc8cfa4d 2 months ago 833MB
twosee/swoole-coroutine redis f07dcda98890 5 months ago 83.5MB
twosee/swoole-coroutine mysql 43aac2677dd2 5 months ago 486MB
啟動(dòng)鏡像
docker@default:~$ docker run -d --name=swoole \
-v /workdir:/workdir \
-p 9501:9501 \
twosee/swoole-coroutine \
php /app/server.php start
注意-v /workdir:/workdir
是需要掛載映射的工作目錄,workdir
為你自己掛載的文件路徑失暂。
$ docker run -it -d -p 9701:9701 --name=myswoole twosee/swoole-coroutine /bin/bash
掛載了還幾次都不成功顶捷,更換了端口再試試莹弊!
$ docker run -it -d -p 9701:9701 -v /share/swoole:/app --name=myswoole twosee/swoole-coroutine /bin/bash
$ docker ps -a | grep myswoole
539b086d15cc twosee/swoole-coroutine "docker-php-entrypoi…" 48 seconds ago Up 48 seconds 0.0.0.0:9701->9701/tcp myswoole
打開本地項(xiàng)目創(chuàng)建測試文件
$ vim /share/swoole/server.php
注意這里的端口使用的是9701與容器啟動(dòng)時(shí)保持一致
<?php
$ws = new swoole_websocket_server("0.0.0.0", 9701);
$ws->on("open", function($ws, $request){
$ws->push($request->fd, "connect success");
});
$ws->on("close", function($ws, $fd){
echo "fd: {$fd} close";
});
$ws->on("message", function($ws, $frame){
$ws->push($frame->fd, "server:".$frame->data);
});
$ws->start();
測試文件編寫完畢后會(huì)同步到myswoole容器中映射的app
目錄下
進(jìn)入容器啟動(dòng)服務(wù)器腳本
$ docker exec -it myswoole bash
root@539b086d15cc:/# cd app
root@539b086d15cc:/# ls
root@539b086d15cc:/# php server.php start
服務(wù)器腳本運(yùn)行成功后,可編寫客戶端腳本對其進(jìn)行訪問悲伶,首先需要確定容器的IP地址陶夜,之前是可以通過docker-machine ip
獲取的,這里使用的是192.168.99.100棒假。
$ vim client.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>Document</title>
</head>
<body>
<script>
var ws = new WebSocket("ws://192.168.99.100:9701");
ws.onmessage = function(evt){
console.log(evt.data);
};
</script>
</body>
</html>
客戶端腳本可在本地服務(wù)器上開發(fā),然后訪問客戶端腳本精盅,并查看控制臺(tái)輸出信息帽哑。
connect success
編譯安裝Swoole擴(kuò)展
- 操作系統(tǒng):Ubuntu
- PHP版本:PHP5
準(zhǔn)備工作
# 安裝PHP
$ sudo apt-get install php5 php5-dev
# 安裝編譯環(huán)境,常見三種編譯器gcc/g++/clang
$ sudo apt-get install gcc autoconf
# 修改編譯器
$ vi makefile
CC = clang
# 刪除已編譯好的文件重新編譯
$ make clean && make
編譯源碼
phpize
是Shell腳本叹俏,主要用于調(diào)用autoconf
提供的工具妻枕,生成configure
文件。 cmake
和autoconf
功能類似粘驰,出現(xiàn)要比autocof
晚一些屡谐。
# 使用cmake生成lib/libswoole.so的動(dòng)態(tài)鏈接庫
$ vim CMakeLists.txt
# 生成makefile
$ cmake
啟用多線程編譯,加快編譯速度蝌数。
# 啟用多線程編譯
$ make -j
低版本Linux內(nèi)核不支持-j
參數(shù)康嘉。注意的是-j
是危險(xiǎn)操作,若占用所有進(jìn)程會(huì)造成系統(tǒng)資源耗盡而死機(jī)籽前。
下載Swoole源代碼
# 下載代碼
$ git clone https://github.com/swoole/swoole-src/releases
$ cd swoole-src
編譯源碼
phpize
是PHP官方自帶的用于生成configure
編譯腳本的工具,它會(huì)根據(jù)php.m4
配置生成configure
腳本。
$ phpize
查看腳本參數(shù)
$ .configure --help
生成makefile
枝哄,makefile
是make
的配置文件肄梨,用來執(zhí)行編譯配置。configure
會(huì)檢測操作系統(tǒng)的差異挠锥,Linux2.6.27分界線众羡。
$ .configure
查看Linux系統(tǒng)內(nèi)核版本
$ uname -a
編譯,將.c
文件生成.o
文件蓖租,然后連接生成swoole.so
粱侣。
$ make
安裝
$ make install
查詢 php.ini
文件地址
$ php -i | grep php.ini
修改php.ini
配置文件并加入Swoole擴(kuò)展
$ vim php.ini
extension=swoole.so
查看PHP擴(kuò)展
$ php -m | grep swoole
測試
$ php examples/server.php
相關(guān)工具
-
ldconf
工具用于重新生成配置
$ ls /etc/ld.so.conf.d/
$ ldconfig
-
nm
工具可查看源碼中定義的函數(shù)
$ nm libswoole.so
Ubuntu安裝配置Swoole
操作系統(tǒng):Ubuntu
查看Linux操作系統(tǒng)內(nèi)核版本
$ uname --all
Linux junchow 4.15.0-46-generic #49-Ubuntu SMP Wed Feb 6 09:33:07 UTC 2019 x86_64 x86_64 x86_64 GNU/Linux
安裝GCC編譯器
$ apt install gcc
$ gcc --version
gcc (Ubuntu 7.3.0-27ubuntu1~18.04) 7.3.0
安裝Cmake工具
$ apt install cmake
$ cmake --version
cmake version 3.10.2
安裝PHP
$ apt install php
$ php -v
PHP 7.2.15-0ubuntu0.18.04.2 (cli) (built: Mar 22 2019 17:05:14) ( NTS )
安裝php-pear
$ apt install php-pear
使用pecl安裝swoole
$ pecl install swoole
No releases available for package "pecl.php.net/swoole"
$ pear clear-cache
$ pear update-channels
$ pear upgrade
如果使用pecl install swoole
無法成功,可進(jìn)入pecl官網(wǎng)搜索 swoole 包蓖宦,下載后本地安裝 齐婴。
- pecl官網(wǎng)地址 https://pecl.php.net/package/swoole
- swoole下載地址 https://pecl.php.net/get/swoole-4.3.1.tgz
通過swoole install
進(jìn)行在線安裝
# 安裝包,包括下載編譯安裝
$ pecl install https://pecl.php.net/get/swoole-4.3.1.tgz
# 下載源碼包
$ pecl download swoole
查看php是否已經(jīng)安裝 swoole 擴(kuò)展
$ php --ri swoole
查看php配置文件位置
$ php -i | grep php.ini
在php配置文件中添加swoole擴(kuò)展
$ vim php.ini
extension=swoole
檢查swoole擴(kuò)展是否已經(jīng)安裝成功
$ php -i | grep extension_dir
查看擴(kuò)展是否安裝
$ php -m | grep swoole
CentOS安裝配置Swoole
安裝PHP7.2+
# 卸載原先安裝的PHP
$ yum remove php
# 列出所有的php相關(guān)的rpm包
$ rpm -qa|grep php
# 強(qiáng)制刪除包
$ rpm -e xxx --nodeps
# 安裝擴(kuò)展包
$ yum install -y epel-release -y
# 更新系統(tǒng)內(nèi)核
$ yum update
# 更改yum源
$ rpm -Uvh https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm
$ rpm -Uvh https://mirror.webtatic.com/yum/el7/webtatic-release.rpm
# 安裝PHP7.2
$ yum -y install php72w php72w-cli php72w-common php72w-devel php72w-pear php72w-embedded php72w-fpm php72w-gd php72w-imap php72w-ldap php72w-mbstring php72w-opcache php72w-pdo php72w-xml php72w-xmlrpc php72w-mysql php72w-mysqlnd php72w-odbc
# 安裝php依賴組件
$ yum install -y gcc gcc-c++ autoconf libjpeg libjpeg-devel libpng libpng-devel freetype freetype-devel libxml2 libxml2-devel zlib zlib-devel glibc glibc-devel glib2 glib2-devel bzip2 bzip2-devel ncurses ncurses-devel curl curl-devel e2fsprogs e2fsprogs-devel krb5 krb5-devel libidn libidn-devel openssl openssl-devel openldap openldap-devel nss_ldap openldap-clients openldap-servers gd gd2 gd-devel gd2-devel perl-CPAN pcre-devel
# 安裝php依賴組件
$ yum install -y wget vim pcre pcre-devel openssl openssl-devel libicu-devel gcc gcc-c++ autoconf libjpeg libjpeg-devel libpng libpng-devel freetype freetype-devel libxml2 libxml2-devel zlib zlib-devel glibc glibc-devel glib2 glib2-devel ncurses ncurses-devel curl curl-devel krb5-devel libidn libidn-devel openldap openldap-devel nss_ldap jemalloc-devel cmake boost-devel bison automake libevent libevent-devel gd gd-devel libtool* libmcrypt libmcrypt-devel mcrypt mhash libxslt libxslt-devel readline readline-devel gmp gmp-devel libcurl libcurl-devel openjpeg-devel libicu-devel
# 創(chuàng)建用戶和組
$ groupadd www
$ useradd -g www www
# 下載php安裝包解壓
$ cd /tmp
$ wget http://am1.php.net/distributions/php-7.2.1.tar.gz
$ tar xvf php-7.2.1.tar.gz
$ cd php-7.2.1
PHP下載地址 https://www.php.net/downloads.php
$ cd tmp && mkdir download && cd download
$ yum install -y wget
$ wget https://www.php.net/distributions/php-7.3.3.tar.gz
$ tar -zxvf php-7.3.3.tar.gz
$ cp -frp /usr/lib64/libldap* /usr/lib/
$ ./configure --prefix=/usr/local/php \
--with-config-file-path=/usr/local/php/etc \
--enable-fpm \
--with-fpm-user=www \
--with-fpm-group=www \
--enable-mysqlnd \
--with-mysqli=mysqlnd \
--with-pdo-mysql=mysqlnd \
--enable-mysqlnd-compression-support \
--with-iconv-dir \
--with-freetype-dir \
--with-jpeg-dir \
--with-png-dir \
--with-zlib \
--with-libxml-dir \
--enable-xml \
--disable-rpath \
--enable-bcmath \
--enable-shmop \
--enable-sysvsem \
--enable-inline-optimization \
--with-curl \
--enable-mbregex \
--enable-mbstring \
--enable-intl \
--with-mcrypt \
--with-libmbfl \
--enable-ftp \
--with-gd \
--enable-gd-jis-conv \
--enable-gd-native-ttf \
--with-openssl \
--with-mhash \
--enable-pcntl \
--enable-sockets \
--with-xmlrpc \
--enable-zip \
--enable-soap \
--with-gettext \
--disable-fileinfo \
--enable-opcache \
--with-pear \
--enable-maintainer-zts \
--with-ldap=shared \
--without-gdbm
./configure \
--prefix=/usr/local/php \
--with-fpm-user=www \
--with-fpm-group=www \
--with-curl \
--with-freetype-dir \
--with-gd \
--with-gettext \
--with-iconv-dir \
--with-kerberos \
--with-libdir=lib64 \
--with-libxml-dir \
--with-mysqli \
--with-openssl \
--with-pcre-regex \
--with-pdo-mysql \
--with-pdo-sqlite \
--with-pear \
--with-png-dir \
--with-jpeg-dir \
--with-xmlrpc \
--with-xsl \
--with-zlib \
--with-bz2 \
--with-mhash \
--enable-fpm \
--enable-bcmath \
--enable-libxml \
--enable-inline-optimization \
--enable-mbregex \
--enable-mbstring \
--enable-opcache \
--enable-pcntl \
--enable-shmop \
--enable-soap \
--enable-sockets \
--enable-sysvsem \
--enable-sysvshm \
--enable-xml \
--enable-zip \
--enable-fpm
# 下載安裝icu 然后重新編譯時(shí)指定路徑 --with-icu-dir=/usr/local/icu
checking for location of ICU headers and libraries... checking for icu-config... no
not found
configure: error: Unable to detect ICU prefix or no failed. Please verify ICU install prefix and make sure icu-config works.
$ yum -y install libicu-devel
checking for libzip... not found
configure: error: Please reinstall the libzip distribution
$ yum install -y libzip-devel
checking for libzip... configure: error: system libzip must be upgraded to version >= 0.11
# https://nih.at/libzip/
$ 卸載libzip
$ yum remove -y libzip
$ wget https://libzip.org/download/libzip-1.5.2.tar.gz
$
下載安裝icu
重新編譯時(shí)指定路徑 --with-icu-dir=/usr/local/icu
http://download.icu-project.org/files
$ mkdir /usr/local/icu
$ wget http://download.icu-project.org/files/icu4c/64rc2/icu4c-64rc2-src.tgz
$ tar xf icu4c-64rc2-src.tgz
$ cd icu/source
$ ./configure --prefix=/usr/local/icu
$ make && make check
CentOS7安裝PHP7
安裝PHP7.3.4
$ cd /usr/local/src
$ wget https://www.php.net/distributions/php-7.3.4.tar.gz
$ yum install -y tar
$ tar -zxvf php-7.3.4.tar.gz
$ cd php-7.3.4
$ ./configure --prefix=/usr/local/php
$ make && make check
$ make test
$ make && make install
$ cp /usr/local/src/php-7.3.4/php.ini-development /usr/local/php/lib/php.ini
$ vim ~/.bash_profile
alias php=/usr/local/php/bin/php
$ source ~/.bash_profile
$ php -v
PHP 7.3.4 (cli) (built: Apr 9 2019 22:09:00) ( NTS )
$ yum install php-pear pcre-devel
$ pecl channel-update pecl.php.net
$ pecl upgrade-all
$ cd `pear config-get php_dir`
$ pwd
/usr/share/pear
卸載PHP7.3.4
$ whereis php
$ rm -rf /usr/local/php /usr/bin/php /usr/lib64/php/ /etc/php.d/ /etc/php.ini /usr/share/php /usr/share/man/man1/php
安裝PHP7.2.17
$ cd /usr/local/src
$ wget https://www.php.net/distributions/php-7.2.17.tar.gz
$ tar zxvf php-7.2.17.tar.gz
$ cd php-7.2.17
$ ./configure --prefix=/usr/local/php
$ make && make install
$ cd /usr/local/src/php-7.2.14/php.ini-development /usr/local/php/lib/php.ini
$ php -i | grep php.ini
Configuration File (php.ini) Path => /usr/local/php/lib
Loaded Configuration File => /usr/local/php/lib/php.ini
$ vim ~/.bash_profile
alias php=/usr/local/php/bin/php
$ source ~/.bash_profile
$ php -v
沒安裝 php-devel 這個(gè)擴(kuò)展包稠茂,phpize是用來擴(kuò)展php擴(kuò)展模塊的柠偶,通過phpize可以建立php的外掛模塊,phpize 是屬于php-devel的內(nèi)容睬关。
$ phpize
Can't find PHP headers in /usr/include/php
The php-devel package is required for use of this command.
$ which phpize
$ yum search php-devel
$ yum info php72-php-devel
$ yum install -y php72-php-devel
$ yum install -y php-devel
$ yum info php72-php-pear
$ yum install -y php72-php-pear
安裝GIT
$ yum install -y git
$ git --version
git version 1.8.3.1
GIT下載Swoole
$ cd /usr/local/src
$ git clone https://github.com/swoole/swoole-src.git
$ cd swoole-src
$ make clean
$ phpize
$ which php-config
/usr/bin/php-config
$ ./configure --with-php-config=php-config
$ make && make install
$ whereis php.ini
$ vim /usr/local/php/lib/php.ini
extension=swoole.so
$ php -m | grep swoole