window10下通過docker安裝swoole,運行laravel-swoole服務


最近公司壓測一個接口,用laravel框架,業務邏輯就是從緩存中取數據,tps總是上不去,於是決定換下swoole來替換php-fpm,來處理php請求,tps比原來高了好幾倍。

現在有個問題就是windows下對swoole支持不是很好,打算利用docker鏡像來解決環境問題,php代碼可以掛載到鏡像指定目錄下。下面簡單介紹下操作步驟

1 安裝docker19.03

      官方下載地址: https://download.docker.com/win/stable/Docker%20Desktop%20Installer.exe

      安裝完成后需要修改國內鏡像,不然下載docker鏡像龜速。修改操作

      1.1  右鍵小鯨魚圖標,選擇setting

             

 

 

        1.2  選擇 Docker Engine , 加入 163鏡像地址 ,"registry-mirrors": [ "http://hub-mirror.c.163.com"]

        

2 docker下 安裝 ubuntu鏡像  [ windows 下 swoole_set_process_name會報錯]

    打開powershell,下面命令在上面運行

    下載ubuntu鏡像   docker pull ubuntu

    簡單啟動    docker run -it -d  --name=ls-demo ubuntu /bin/bash

    進入容器   docker attach ls-demo

    docker 一些基本操作介紹(安裝中可能要用到的命令)

    復雜點的啟動( -i: 交互式操作 -t: 終端  -d 后台啟動 --name 命名啟動的容器的名稱 -p 映射容器端口到本機   -v 掛載本地目錄到容器)

    docker run -it -d -p 本機端口:容器端口  --name=容器的名稱 -v "本機路徑":容器路徑  鏡像名 鏡像中命令

    查看鏡像

    docker images

    

    啟動鏡像(啟動鏡像后會新建一個容器,可以使用鏡像的hash-id 的部分,或者鏡像名稱啟動)

    docker run 16a 或者 docker run   n_ubuntu

    docker run -it 16a /bin/bash 或者 docker run -it  n_ubuntu  /bin/bash   交互式終端啟動

    刪除鏡像(假如鏡像有對應的容器啟動中需要先關閉對應容器,再刪除鏡像)

    docker image rm 16a 或者  docker rmi n_ubuntu

    查看容器名稱(-a 顯示所有,包括停止的容器)

    docker ps -a

    

    查詢最新創建的容器

    docker ps -l

    啟動容器(唯一hash容器id和容器名稱等價,下面的所有操作用兩者皆可)

    docker start  d1b 或者  docker start  ls-demo

    關閉容器

    docker stop  d1b 或者  docker stop  ls-demo 

    刪除容器(start中的容器需要stop之后再刪除)

    docker rm  ls-demo 

    進入容器[上圖容器](容器名只要唯一就行, 可以打部分字符串)

    docker attach  ls-demo 

    提交容器為本地鏡像

    docker  commit  ls-demo  新鏡像名字

3  ubuntu鏡像中安裝php環境

    修改源

     cp /etc/apt/sources.list /etc/apt/sources.list.bak &&
     echo '' > /etc/apt/sources.list &&
     echo '
     deb http://mirrors.aliyun.com/ubuntu/ focal main restricted universe multiverse
     deb-src http://mirrors.aliyun.com/ubuntu/ focal main restricted universe multiverse

     deb http://mirrors.aliyun.com/ubuntu/ focal-security main restricted universe multiverse
     deb-src http://mirrors.aliyun.com/ubuntu/ focal-security main restricted universe multiverse

     deb http://mirrors.aliyun.com/ubuntu/ focal-updates main restricted universe multiverse
     deb-src http://mirrors.aliyun.com/ubuntu/ focal-updates main restricted universe multiverse

     deb http://mirrors.aliyun.com/ubuntu/ focal-proposed main restricted universe multiverse
     deb-src http://mirrors.aliyun.com/ubuntu/ focal-proposed main restricted universe multiverse

     deb http://mirrors.aliyun.com/ubuntu/ focal-backports main restricted universe multiverse
     deb-src http://mirrors.aliyun.com/ubuntu/ focal-backports main restricted universe multiverse
     ' > /etc/apt/sources.list

    修改完后更新源
    apt-get update
    安裝必要工具 net-tools 包含netstat iputils-ping 包含ping
    apt-get -y vim install net-tools  wget  curl iputils-ping

   添加php源

   apt-get -y install software-properties-common && add-apt-repository ppa:ondrej/php && apt-get update

   安裝過程中會選擇地區,城市  

    6  Asia        70 Shanghai

   安裝php以及一些常用擴展

   apt-get -y install php7.2-dev php7.2-cli php7.2-xml php7.2-mysql php7.2-mbstring php7.2-curl php7.2-bcmath php7.2-zip

4 swoole擴展簡單安裝

   mkdir -p /tmp/php-extension &&
   cd /tmp/php-extension &&
   wget https://pecl.php.net/get/swoole-4.5.1.tgz &&
   tar zxvf swoole-4.5.1.tgz &&
   cd swoole-4.5.1 &&
   phpize &&
   ./configure &&
   make && make install 

   擴展寫入php.ini

   sed -i "924 i extension=swoole.so" /etc/php/7.2/cli/php.ini

   查看php擴展

    php -m|grep swoole

5 laravel項目啟動laravel-swoole

    假如本地有laravel項目,可以把本地目錄掛載到docker容器下,代碼可以git倉庫拉推都不影響

    ps:假如原來項目中訪問的mysql,redis等在本地話,那么掛載后需要把對應的ip,localhost|127.0.0.1 替換成 容器內部訪問宿主機的ip

    容器中連接宿主機(本地),下面是兩種查看宿主ip 的方法
    ping host.docker.internal 查看對應ip,C類內網地址
   本地windows安裝目錄查看,比如 C:\ProgramData\DockerDesktop\tmp-d4w\host.docker.internal B類內網地址

    退出當前容器
    shell命令中 exit
    把當前安裝了php-swoole擴展的容器提交一個鏡像
    docker commit ls-demo swoole-php-ubuntu
    啟動剛生成的帶有自己安裝php-swoole環境的鏡像,掛載本地的laravel項目
    docker run -it -d -p 本機端口:容器端口 -v "本機路徑":容器路徑 swoole-php-ubuntu

    下面介紹容器中安裝laravel並運行laravel-swoole

    下載安裝composer並且更換阿里鏡像

     php -r "copy('https://getcomposer.org/installer', 'composer-setup.php');" &&
     php composer-setup.php &&
     php -r "unlink('composer-setup.php');" &&  mv composer.phar /usr/local/bin/composer &&

     composer config -g repo.packagist composer https://mirrors.aliyun.com/composer/

     composer下載laravel5.8

     mkdir -p /data/www &&  cd /data/www &&

     composer create-project --prefer-dist laravel/laravel ls-demo 5.8.* 

     安裝laravel-swoole v2.6.67 

     cd  ls-demo &&  composer require swooletw/laravel-swoole v2.6.67

     添加配置文件config目錄下生成3個,swoole開頭的,這里只用到了swoole_http.php

     php artisan vendor:publish --tag=laravel-swoole

      修改對應配置

     sed -i "177 i SwooleTW\\\\Http\\\LaravelServiceProvider::class," config/app.php &&

     sed -i "44 a SWOOLE_HTTP_DAEMONIZE=true" .env 

     啟動查看端口

     php artisan swoole:http start && curl 127.0.0.1:1215

     laravel-swoole wiki 地址[關於配置啟動可以查看]

     https://github.com/swooletw/laravel-swoole/wiki

    

總結:

上面命令批量匯總

1 下載ubuntu鏡像並啟動

docker pull ubuntu
docker run -it --name=ls-demo ubuntu /bin/bash
2 批量執行
cp /etc/apt/sources.list /etc/apt/sources.list.bak &&
echo '' > /etc/apt/sources.list &&
echo '
deb http://mirrors.aliyun.com/ubuntu/ focal main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ focal main restricted universe multiverse

deb http://mirrors.aliyun.com/ubuntu/ focal-security main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ focal-security main restricted universe multiverse

deb http://mirrors.aliyun.com/ubuntu/ focal-updates main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ focal-updates main restricted universe multiverse

deb http://mirrors.aliyun.com/ubuntu/ focal-proposed main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ focal-proposed main restricted universe multiverse

deb http://mirrors.aliyun.com/ubuntu/ focal-backports main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ focal-backports main restricted universe multiverse
' > /etc/apt/sources.list &&
apt-get update &&
apt-get -y install vim net-tools wget curl iputils-ping &&
apt-get -y install software-properties-common && add-apt-repository ppa:ondrej/php && apt-get update &&
apt-get -y install php7.2-dev php7.2-cli php7.2-xml php7.2-mysql php7.2-mbstring php7.2-curl php7.2-bcmath php7.2-zip &&
mkdir -p /tmp/php-extension &&
cd /tmp/php-extension &&
wget https://pecl.php.net/get/swoole-4.5.1.tgz &&
tar zxvf swoole-4.5.1.tgz &&
cd swoole-4.5.1 &&
phpize &&
./configure &&
make && make install &&
sed -i "924 i extension=swoole.so" /etc/php/7.2/cli/php.ini &&
php -r "copy('https://getcomposer.org/installer', 'composer-setup.php');" &&
php composer-setup.php &&
php -r "unlink('composer-setup.php');" &&
mv composer.phar /usr/local/bin/composer &&
composer config -g repo.packagist composer https://mirrors.aliyun.com/composer/ &&
mkdir -p /data/www &&
cd /data/www &&
composer create-project --prefer-dist laravel/laravel ls-demo 5.8.* &&
cd ls-demo && composer require swooletw/laravel-swoole v2.6.67 &&
php artisan vendor:publish --tag=laravel-swoole &&
sed -i "177 i SwooleTW\\\\Http\\\LaravelServiceProvider::class," config/app.php &&
sed -i "44 a SWOOLE_HTTP_DAEMONIZE=true" .env &&
php artisan swoole:http start &&
curl 127.0.0.1:1215 &&
ps aux|grep swoole

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM