チェッカー群積分



イントロ
#30DaysOfAppwrite 月の長いイベントは、開発者にAppWriteの機能のすべてをウォークスルーすることに集中しています.一緒に我々はまた、これらの概念は、実際の世界のアプリを構築するときに適用する方法を示すために完全に紹介された媒体のクローンを構築する予定です.また、私たちと一緒に従う開発者のためのいくつかのエキサイティングな賞を持っている!

Docker swarmでの配備
日28へようこそ👋 ! あなたのアプリは一晩の成功になっている.誰もがあなたのアプリケーションを使用して、有名人からお友達に.あなたはこれを予想して、あなたのアプリは要求の圧倒的な数に追いつくことができない状況で自分自身を見つける.フレット!AppWriteは正確にこれを念頭に置いて設計されました.既に知っているように、AppWriteは我々の最優先事項の一つとしてスケーラビリティを持つステートレスのマイクロサービスのセットとして設計されています!たくさんのオーケストレーションサービスでスケーラビリティを達成する多くの方法がある間、我々は最も直観的なものの1つを見ます.今日、私たちはDocker SwarmでAppwriteを水平に議論するつもりです.

何がDocker群れですか?
Docker SwarmはDocker CLIの右側に構築されたコンテナ・オーケストレーションツールで、ホストのクラスタへのDockerサービスを展開することができますDocker Compose . これはswarmモードとして知られていますno longer being developed スタンドアロンの製品として.それをビルドするとDockerの群れは素晴らしいと書くCompose specification , 私たちがappwriteのを使うことができるという意味docker-compose スワップ(ここではいくつかの変更を伴う)に展開する設定.そのシンプルさはすぐに開始することができます!

swarmでAppwriteを展開する

必要条件
この例では次のようになります.

  • Docker is installed それぞれのホストで.
  • 以下のポートはホストの間で開かなければなりません:
  • クラスタ管理通信のためのTCPポート2377
  • ノード間通信のためのTCPとUDPポート7946
  • オーバレイネットワークトラフィックのためのUDPポート
  • “リーダー”サーバーのappwriteのCompose files .

  • 群れの作成
    我々は、我々が「リーダー」でありたいどのホストにでも群れをつくります.スワームを初期化します.
    $ docker swarm init
    Swarm initialized: current node (7db8w7aurb7qrhvm0c0ttd4ky) is now a manager.
    
    To add a worker to this swarm, run the following command:
    
        docker swarm join --token SWMTKN-1-0wagrl3qt4loflf9jcadj8gx53fj2dzmbwaato7r50vghmgiwp-cvo3jflyfh2gnu46pzjtaexv2 your.ip.addr.ess:2377
    
    To add a manager to this swarm, run 'docker swarm join-token manager' and follow the instructions.
    
    さあ、他のシステム(s)で提供されたコマンドを実行しましょうThis node joined a swarm as a worker. 一旦完了すると、「リーダー」ホストに戻ることができます.
    $ docker node ls
    ID                            HOSTNAME          STATUS    AVAILABILITY   MANAGER STATUS   ENGINE VERSION
    yfl7xsy5birfbpiw040chef67     appwrite          Ready     Active                          20.10.6
    op3nf4ab6f5v1lulwkpyy2a83 *   appwrite_leader   Ready     Active         Leader           20.10.6
    

    更新docker-compose.yml今、群れは準備ができているので、我々はいくつかの変更をする必要がありますdocker-compose.yml それはスワップ互換性を確認します.
    Docker Swarmのボリュームはデフォルトでホストの間で共有されないので、ホストの間でディレクトリを共有するためにNFSを使用します.共有データは様々な方法で実現することができますが、これは始めるのが最も簡単です.そうするために、NFSマウントですべての名前付きボリュームを取り替えます.デジタルオーディオgreat guide NFSの設定については、詳細はそのガイドを参照してください.
    我々はこれらのNFSボリュームを我々の「リーダー」ホストに設定して、それらのフォルダを群れの他のホストと共有するつもりです.以下のディレクトリを使用して、NFS経由でDockerボリュームと共有を置換します.
    mkdir -p /nfs/{mariadb,redis,cache,uploads,certificates,functions,influxdb,config}
    
    次に、対応するを作成します/nfs 2番目のホスト上のディレクトリ(上記と同じコマンドを使用する)では、“リーダー”ホストからNFS共有をマウントします.
    では、docker-compose.yml 対応するNFSディレクトリを指定します.
    # - appwrite-uploads:/storage/uploads:rw
    - /nfs/uploads:/storage/uploads:rw
    
    # - appwrite-certificates:/storage/certificates:rw
    - /nfs/certificates:/storage/certificates:rw
    
    
    それから、私たちはdepends_on and container_name スタンザdocker-compose.yml , 彼らはDocker群れによってサポートされていません.

    オーバレイネットワーク
    ドッカー用途overlay networks 各ノードを一緒に群れに接続するために、コンテナはどこに配置されているかにかかわらず相互に通信できます.私たちは、Docker CLIとオーバーレイネットワークを作成することができますが、代わりに、この変更をキャプチャしましょうdocker-compose.yml :
    networks:
      gateway:
      appwrite:
        driver: overlay
    

    準備ができている
    一旦すべてが適当であるならば、我々は我々をセットしますAppwrite environment variables とスワームに展開します.
    docker stack deploy -c <(docker-compose config) appwrite
    

    If you see docker-compose config warnings, try upgrading the Compose version to version: '3.8' at the head of docker-compose.yml to utilize the latest Compose specification.


    私たちのマイクロサービスの労働者は、REDISを使用してパブ/サブを処理するので、スタックの自己治癒まで再起動することがあります.すべてが配備されると、サービスの状態を確認できます.
    $ docker service ls
    ID             NAME                                    MODE         REPLICAS   IMAGE                     PORTS
    ktfto6dap451   appwrite_appwrite                       replicated   1/1        appwrite/appwrite:0.8.0   
    hazw2csk4epd   appwrite_appwrite-maintenance           replicated   1/1        appwrite/appwrite:0.8.0   
    fshro0zn8iw6   appwrite_appwrite-schedule              replicated   1/1        appwrite/appwrite:0.8.0   
    jep5n0gnmvy6   appwrite_appwrite-worker-audits         replicated   1/1        appwrite/appwrite:0.8.0   
    oiftp636aq6v   appwrite_appwrite-worker-certificates   replicated   1/1        appwrite/appwrite:0.8.0   
    tlu7yxvtrr0r   appwrite_appwrite-worker-deletes        replicated   1/1        appwrite/appwrite:0.8.0   
    rda2kspenbzr   appwrite_appwrite-worker-functions      replicated   1/1        appwrite/appwrite:0.8.0   
    im800v9tct4n   appwrite_appwrite-worker-mails          replicated   1/1        appwrite/appwrite:0.8.0   
    ry0u3v726o8h   appwrite_appwrite-worker-tasks          replicated   1/1        appwrite/appwrite:0.8.0   
    734y2mr6gzkc   appwrite_appwrite-worker-usage          replicated   1/1        appwrite/appwrite:0.8.0   
    bkotuk5kwmxx   appwrite_appwrite-worker-webhooks       replicated   1/1        appwrite/appwrite:0.8.0   
    ff6iicbmf5my   appwrite_influxdb                       replicated   1/1        appwrite/influxdb:1.0.0   
    892923vq96on   appwrite_mariadb                        replicated   1/1        appwrite/mariadb:1.2.0    
    uw3l8bkoc3sl   appwrite_redis                          replicated   1/1        redis:6.0-alpine3.12      
    ulp1cy06plnv   appwrite_telegraf                       replicated   1/1        appwrite/telegraf:1.0.0   
    9aswnz3qq693   appwrite_traefik                        replicated   1/1        traefik:2.3               *:80->80/tcp, *:443->443/tcp
    

    I've included my completed Compose file in a GitHub gist for reference.



    構成
    Dockerの群れには多くの設定オプションがあります.代わりに、配置を構成するときに最も有用なスタンダのいくつかについて話しましょう.

    レプリカ
    AppWriteはほとんど状態がないので、あなたのアプリケーションのニーズに応じて、各サービスを上下にスケールすることができます.たとえば、2つの関数を実行したい場合には、2回の関数実行を扱うことができます.
    deploy:
      replicas: 1
    
    レプリカが特定のサービスのためのフィルタリングで展開されたことを確認できます.
    $ docker service ls --filter name=appwrite_appwrite-worker-functions 
    ID             NAME                                 MODE         REPLICAS   IMAGE                     PORTS 
    rda2kspenbzr   appwrite_appwrite-worker-functions   replicated   2/2        appwrite/appwrite:0.8.0
    

    ノード制約
    ドッカースウォームは、コンテナがどこに配置制約を使用して群れに展開制御することができます.例えば、我々はTraefikまたはMariADBを設定することができますだけでマネージャノードに次のように追加されますdocker-compose.yml :
    deploy:
      placement:
        constraints: [node.role == manager]
    

    次は何
    私たちは氷山の先端をおおっていた.Dockerの群れでappwriteを実行する際にさらに読みましょう.
  • ドッカーのadmin guide swarmでノードを管理する方法と生産のための若干の考慮に関する多くの余分の情報があります.

  • Docker secrets and Docker configs より簡単に制御し、群れを介して機密データを配布するために使用することができます.

  • クレジット
    閉じるこの動画はお気に入りから削除されています.あなたは社会的なメディアのすべての私たちのポストに追いつくために従うことができます.完全なイベントスケジュールを見つけることができますhere
  • Discord Server
  • Appwrite Homepage
  • Appwrite's Github
  • あなたがAppWrite、エイリアンやユニコーンについての詳細を学びたい場合は不調和で私たちに手を伸ばす🦄. 滞在は明日の記事のチューニング!その時まで👋