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 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:ファイルマウント
  • これらのラベルがどのような役割を果たしているかを知るとdocker-composeが理解され、使用されます.
    パッケージ管理に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を見て、私たちと同じように喜んでほしいです.