swoft|ソースコード解読シリーズ一:難しい!swoft demoも走れないのにどうして破れたの?dockerちょっと知っておきましょう~
date:2018-8-01 14:22:17 title:swoft|ソースコード解読シリーズ一:難しい!swoft demoも走れないのにどうして破れたの?docker了解一下吧~description:sowftフレームワークのソースコードを読んで、swoftの第一歩、環境を解決します
友达がswoftに触れたばかりの时、プレッシャーが少し大きく感じて、もっと直観的な言い方は难しいです.開発チームは難という説に賛成しないで、swoftのコードはすべてphpが実現したので、phpはまた世界で最も良い言語で、swoftのコードは読むのがとても楽です.
開発チームはソースコードでシリーズブログを解読し、swoft.を深く解読する.私たちはこれが楽な旅になると信じています.
swoftソースコード解読シリーズ1:難しい!swoft demoも走れないのにどうして破れたの?dockerちょっと知っておきましょう~
本編内容速読:環境の鍋は私は背負いません:swoftを勉強して使用するにはこれらの基礎知識を準備する必要があります. docker:swoft環境 を完了 docker-compose:より多くのサービスを提供 composerによるパッケージ管理:開発グループの日常 環境の鍋は私が背負わない
これは本当にswoftの鍋ではありません.これは環境の鍋です.swoftの公式ドキュメントには、非常に詳細な環境構築の説明が提供されています.推奨swooleの実行環境はlinuxであり、linuxの基本的な概念と操作が を把握しているかどうか swooleはphp拡張の形式として働いて、php拡張のいくつかの基本的な概念とインストールは を掌握するかどうか swoftはcomposerを使用してパッケージ管理を行い、composerのいくつかの基本的な概念と操作が を掌握しているかどうか. swoftを使用してバックエンドアプリケーションを開発し、サーバのいくつかの基礎知識(tcp/ip 4層ネットワークプロトコル、ipポートドメイン名など)が を把握しているかどうか.
swoftの学習と使用にはこれらの基礎知識を準備する必要がある.
docker
では、どのようにして開発環境を迅速に組み合わせるのでしょうか.答えはdocker!
dockerは想像以上に簡単で、開発グループは公式ミラーswoft/swoftを提供し、ミラーの詳細はswoftプロジェクトdockerfileで、swoleを構成する部分を抜粋します.
swooleの実行に必要な環境の構成を把握していない場合は、このdockerfileファイルのソースコードを参照してください.
もちろん、開発を容易にするためには、異なるphpバージョンを指定したり、異なるswooleバージョンを使用したり、中国語のミラー加速を設定したりするなど、異なる環境を構築する必要があるかもしれません.giteeも参照してください.com/daydaygo/docker下のdockerfile
ps:ここのdockerfileはalpine linuxをベースミラーにしています.サイズは10 m未満で、非常に簡単で純粋なlinuxリリース版です.お勧めします.国内ソースとgiteeを用いて加速する.
docker-compose
ここまでswoftの実行環境があり、ドキュメント-サービス起動章の説明に従って
もし私たちがもっと多くのサービスを必要とするならば、mysql、redis、甚だしきに至っては前置nginx、docker-composeは私たちを助けることができて、docker-composeは私たちのすべてのdockerサービスを編成(管理)するために使って、例giteeを挙げます.com/daydaygo/docker:
ここではnginx/swoft/mysql/redisの4つのサービスを開始しました. にアクセスすることができる. これらのラベルがどのような役割を果たしているかを知るとdocker-composeが理解され、使用されます.
パッケージ管理にcomposerを使用する
答えはcomposerが提供する
私は
最後に書く
swoft demoトップページの
友达がswoftに触れたばかりの时、プレッシャーが少し大きく感じて、もっと直観的な言い方は难しいです.開発チームは難という説に賛成しないで、swoftのコードはすべてphpが実現したので、phpはまた世界で最も良い言語で、swoftのコードは読むのがとても楽です.
開発チームはソースコードでシリーズブログを解読し、swoft.を深く解読する.私たちはこれが楽な旅になると信じています.
swoftソースコード解読シリーズ1:難しい!swoft demoも走れないのにどうして破れたの?dockerちょっと知っておきましょう~
本編内容速読:
これは本当にswoftの鍋ではありません.これは環境の鍋です.swoftの公式ドキュメントには、非常に詳細な環境構築の説明が提供されています.
swoftの学習と使用にはこれらの基礎知識を準備する必要がある.
docker
では、どのようにして開発環境を迅速に組み合わせるのでしょうか.答えはdocker!
dockerは想像以上に簡単で、開発グループは公式ミラーswoft/swoftを提供し、ミラーの詳細はswoftプロジェクトdockerfileで、swoleを構成する部分を抜粋します.
# Swoole extension
RUN wget https://github.com/swoole/swoole-src/archive/v${SWOOLE_VERSION}.tar.gz -O swoole.tar.gz \
&& mkdir -p swoole \
&& tar -xf swoole.tar.gz -C swoole --strip-components=1 \
&& rm swoole.tar.gz \
&& ( \
cd swoole \
&& phpize \
&& ./configure --enable-async-redis --enable-mysqlnd --enable-openssl --enable-http2 \
&& make -j$(nproc) \
&& make install \
) \
&& rm -r swoole \
&& docker-php-ext-enable swoole
swooleの実行に必要な環境の構成を把握していない場合は、このdockerfileファイルのソースコードを参照してください.
もちろん、開発を容易にするためには、異なるphpバージョンを指定したり、異なるswooleバージョンを使用したり、中国語のミラー加速を設定したりするなど、異なる環境を構築する必要があるかもしれません.giteeも参照してください.com/daydaygo/docker下のdockerfile
FROM php:7.2.5-cli-alpine3.7
# FROM php:7.1.13-cli-alpine3.4
LABEL maintainer="[email protected]"
RUN echo -e "http://mirrors.ustc.edu.cn/alpine/v3.7/main
http://mirrors.ustc.edu.cn/alpine/v3.7/community" > /etc/apk/repositories && \
apk update
RUN apk add tzdata && \
cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime && \
echo "Asia/Shanghai" > /etc/timezone
RUN apk add $PHPIZE_DEPS
# docker-php-ext
RUN docker-php-ext-install bcmath mysqli pcntl pdo_mysql
# pecl
# http://pecl.php.net/package/mongodb
RUN curl -O http://pecl.php.net/get/redis-4.0.2.tgz && \
pecl install redis-4.0.2.tgz && \
docker-php-ext-enable redis
RUN curl -O http://pecl.php.net/get/mongodb-1.4.3.tgz && \
apk add openssl-dev && \
pecl install mongodb-1.4.3.tgz && \
docker-php-ext-enable mongodb
# swoole
RUN curl -O https://gitee.com/swoole/swoole/repository/archive/v4.0.3.zip && unzip v4.0.3.zip && \
apk add linux-headers openssl-dev nghttp2-dev hiredis-dev && \
cd swoole && \
phpize && \
./configure --enable-coroutine --enable-openssl --enable-async-redis --enable-http2 && make && make install && \
docker-php-ext-enable swoole && \
rm -rf v4.0.3.zip swoole
ps:ここのdockerfileはalpine linuxをベースミラーにしています.サイズは10 m未満で、非常に簡単で純粋なlinuxリリース版です.お勧めします.国内ソースとgiteeを用いて加速する.
docker-compose
ここまでswoftの実行環境があり、ドキュメント-サービス起動章の説明に従って
php bin/swoft start
を実行するとswoft demoを実行することができる.もし私たちがもっと多くのサービスを必要とするならば、mysql、redis、甚だしきに至っては前置nginx、docker-composeは私たちを助けることができて、docker-composeは私たちのすべてのdockerサービスを編成(管理)するために使って、例giteeを挙げます.com/daydaygo/docker:
nginx:
build:
context: nginx
dockerfile: Dockerfile
volumes:
- ../:/var/www
- ./logs/nginx/:/var/log/nginx
links:
- swoft
ports:
- "80:80"
- "443:443"
swoft:
# container_name: swoft
image: swoft/swoft
volumes:
- ../:/var/www
links:
- mysql
- redis
ports:
- "8001:8001"
- "9501:9501"
working_dir: /var/www/swoole/swoft
stdin_open: true
command: php -a
tty: true
- redis
mysql:
build:
context: mysql
dockerfile: Dockerfile
volumes:
- ./data/mysql:/var/lib/mysql
ports:
- "3306:3306"
environment:
MYSQL_ROOT_PASSWORD: root
redis:
build:
context: redis
dockerfile: Dockerfile
volumes:
- ./data/redis:/data
- ./logs/redis:/var/log/redis
ports:
- "6379:6379"
ここではnginx/swoft/mysql/redisの4つのサービスを開始しました.
links
:swoftがmysqlおよびredisを使用するなどのサービス間の関係で、swoftではmysql
を使用してhost
としてmyqlサービスports
:ポートマッピングvolumes
:ファイルマウントパッケージ管理にcomposerを使用する
git clone
を使用するswoftのソースコードをダウンロードした後、composer install
を使用してswoftフレームワークをインストールする必要がある.これに先立ち、swoftは、フレームワークをさらにデカップリングし、使いやすいようにコンポーネント化する.一般ユーザーはcomposer install
にインストールされているswoftフレームワークを修正することはめったにありませんが、開発グループはswoftフレームワークを頻繁に更新し、swoft demoプロジェクトで検証します.それはどのように実現されていますか?答えはcomposerが提供する
repositories
機能を使用して、本バンドコードライブラリを直接導入することです.{
"name": "swoft/swoft",
"type": "project",
"keywords": [
"php",
"swoole",
"swoft"
],
"description": "Modern High performance AOP and Coroutine PHP Framework, base on Swoole 2",
"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/service-governance": "^1.0"
},
"autoload": {
"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 -c phpunit.xml",
"cs-fix": "./vendor/bin/php-cs-fixer fix $1"
},
"repositories": [
{
"type": "path", //
"url": "../swoft-component"
}
]
}
私は
require-dev
の下に配置されたパッケージを削除することに慣れていて、ローカルのグローバルインストールを選んだのは、個人の好み次第です.最後に書く
swoft demoトップページの
swoft
を見て、私たちと同じように喜んでほしいです.