日期:2018-8-0114:22:17标题:swoft|源码解读系列一:好难!连swoftdemo都跑不起来怎么破?docker了解一下~说明:阅读sowft框架源码,swoft的第一步,搞定环境的朋友在刚接触swoft的时候会觉得有点压力。更直观的说法是困难的。开发组不认同难的说法。swoft的代码都是用php实现的,php是世界上最好的语言,swoft的代码非常易读。开发团队将通过源码解读系列博客,深入解读swoft。我们相信这将是一段轻松的旅程。swoft源码解读系列一:好难!swoftdemo连运行都跑不了怎么破?docker一起来看看吧~快速阅读本文内容:环境我不担当:学习和使用swoft需要准备这些基础知识。开发团队的日常环境是开发团队的错。我不想背诵这个。真的不是swoft的错,而是环境的错。swoft官方文档已经对环境搭建做了很详细的说明。如果还是不行:swoole推荐的运行环境是linux,你掌握了linux的一些基本概念和操作吗?swoole的一些基本概念和操作你掌握了吗?PHP扩展的一些基本概念和安装你掌握了吗?你掌握swoft吗?使用composer进行包管理。你掌握了作曲家的一些基本概念和操作吗?使用swoft开发后端应用,是否掌握了服务器的一些基础知识(tcp/ip四层网络协议,ip端口域名等)要学习和使用swoft,需要准备这些基础知识.docker那么,如何快速配置开发环境呢?答是docker!docker上手比想象中容易。开发组提供官方镜像swoft/swoft。镜像的详细信息在swoft项目的dockerfile中,摘录配置swoole的部分:#swooleextensionRUNwgethttps://github.com/swoole/swoole-src/archive/v${SWOOLE_VERSION}.tar。Gz-Oswoole.tar.gz\&&mkdir-pswoole\&&tar-xfswoole.tar.gz-Cswoole--strip-components=1\&&rmswoole.tar.gz\&&(\cdswoole\&&phpize\&&./configure--enable-async-redis--enable-mysqlnd--enable-openssl--enable-http2\&&make-j$(nproc)\&&makeinstall\)\&&rm-rswoole\&&docker-php-ext-enableswoole如果你还没有掌握swoole运行所需环境的配置,可以参考这个dockerfile的源码。当然,为了开发方便,我们可能需要搭建不同的环境,比如指定不同的php版本,使用不同的swoole版本,设置中文图片加速等,也可以参考gitee.com/daydaygo下的dockerfile/dockerFROMphp:7.2.5-cli-alpine3.7#FROMphp:7.1.13-cli-alpine3.4LABELmaintainer="1252409767@qq.com"RUNecho-e"http://mirrors.ustc.edu.cn/alpine/v3.7/main\nhttp://mirrors.ustc.edu.cn/alpine/v3.7/community">/etc/apk/repositories&&\apkupdateRUNapkaddtzdata&&\cp/usr/share/zoneinfo/Asia/上海ai/etc/localtime&&\echo"Asia/Shanghai">/etc/timezoneRUNapkadd$PHPIZE_DEPS#docker-php-extRUNdocker-php-ext-installbcmathmysqlipcntlpdo_mysql#pecl#http://pecl.php.net/package/mongodbRUNcurl-Ohttp://pecl.php.net/get/redis-4.0.2.tgz&&\peclinstallredis-4.0.2.tgz&&\docker-php-ext-enableredisRUNcurl-Ohttp://pecl.php.net/get/mongodb-1.4.3.tgz&&\apkaddopenssl-dev&&\peclinstallmongodb-1.4.3.tgz&&\docker-php-ext-enablemongodb#swooleRUNcurl-Ohttps://gitee.com/swoole/swoole/repository/archive/v4.0.3.zip&&unzipv4.0.3.zip&&\apk添加linux-headersopenssl-devnghttp2-devhiredis-dev&&\cdswoole&&\phpize&&\./configure--enable-coroutine--enable-openssl--enable-async-redis--enable-http2&&make&&makeinstall&&\docker-php-ext-enableswoole&&a议员;\rm-rfv4.0.3.zipswooleps:这里的dockerfile使用alpinelinux作为基础镜像,大小不到10m,非常简单纯的linux发行版,推荐尝试。使用国内源码和gitee加速。docker-compose这里我们已经有了swoft的运行环境。按照document-service启动章节的说明,执行phpbin/swoftstart运行swoftdemo。如果我们需要更多的服务,mysql,redis,甚至pre-nginx,docker-compose都可以帮助我们,docker-compose是用来安排(管理)我们每一个docker服务的,例如gitee.com/daydaygo/docker:nginx:构建:上下文:nginxdockerfile:Dockerfile卷:-../:/var/www-./logs/nginx/:/var/log/nginx链接:-swoft端口:-“80:80”-“443:443”"swoft:#container_name:swoftimage:swoft/swoftvolumes:-../:/var/wwwlinks:-mysql-redisports:-"8001:8001"-"9501:9501"working_dir:/var/www/swoole/swoftstdin_open:true命令:php-atty:true-redismysql:build:context:mysqldockerfile:Dockerfilevolumes:-./data/mysql:/var/lib/mysqlports:-"3306:3306"环境:MYSQL_ROOT_PASSWORD:rootredis:build:context:redisdockerfile:Dockerfilevolumes:-./data/redis:/data-./logs/redis:/var/log/redisports:-"6379:6379"这里我们启动了nginx/swoft/mysql/redis4个服务:links:service例如,swoft会使用mysql和redis,那么swoft可以使用mysql作为宿主机访问myql服务端口:端口映射卷:文件挂载如果理解了这些标签的作用,就可以理解使用docker-compose后使用composer进行打包管理和使用gitclone下载swoft的源代码,还需要使用composerinstall安装swoft框架。在此之前,swoft已经拆分成组件,进一步解耦框架,方便使用。普通用户很少修改composerinstall安装的swoft框架,但是开发团队会经常更新swoft框架,然后在swoftdemo工程中验证。这是如何实现的?答案是使用composer提供的repositories功能,直接导入原生代码Library:{"name":"swoft/swoft","type":"project","keywords":["php","swoole","swoft"],"description":"现代高性能AOP和CoroutinePHP框架,基于Swoole2","license":"Apache-2.0","require":{"php":">=7.0","ext-swoole":">=2.1","swoft/framework":"^1.0","swoft/rpc":"^1.0","swoft/rpc-server":"^1.0","swoft/rpc-client":"^1.0","swoft/http-server":"^1.0","swoft/http-client":"^1.0","swoft/websocket-server":"^1.0","swoft/task":"^1.0","swoft/http-message":"^1.0","swoft/view":"^1.0",“swoft/db”:“^1.1”,“swoft/cache”:“^1.0”,“swoft/redis”:“^1.0”,“swoft/console”:“^1.0”,“swoft/devtool”:"^1.0","swoft/session":"^1.0","swoft/i18n":"^1.0","swoft/process":"^1.0","swoft/memory":"^1.0","swoft/服务治理":"^1.0"},"自动加载":{"psr-4":{"App\\":"app/"},"files":["app/Swoft.php"]},"autoload-dev":{"psr-4":{"Swoft\\Test\\":"test/"}},"scripts":{"post-root-package-install":["@php-r\"file_exists('.env')||copy('.env.example','.env');\""],"test":"./vendor/bin/phpunit-cphpunit.xml","cs-fix":"./vendor/bin/php-cs-fixerfix$1"},"repositories":[{"type":"path",//修改这里"url":"../swoft-component"}]}我习惯删除require-dev配置包,但是选择本地全局安装,这个全凭个人喜好。最后希望大家在swoftdemo首页看到swoft的时候,和我们一样开心
