$30 off During Our Annual Pro Sale. View Details »

appsody でnodejsのアプリを立ち上げよう!

appsody でnodejsのアプリを立ち上げよう!

Appsodyを使ってnodejsのアプリケーションを立ち上げます。
従来の環境にミドルウェアをインストールしてnodejsのアプリを立ち上げる場合とどんな違いがあるのでしょうか? @ Kabanero Meetup Tokyo

Daisuke Hiraoka

March 29, 2020
Tweet

More Decks by Daisuke Hiraoka

Other Decks in Technology

Transcript

  1. でnodejsのアプリ
    を立ち上げよう!

    View Slide

  2. Daisuke Hiraoka(平岡 大祐)
    • IBM Champion for Cloud 2019-2020
    • 2013年からオンプレミスシステムからIBM Cloudへの移行を支援
    • 2016年からIBM CloudでOpenShift/Kubernetes/Dockerの運用を開

    Twitter: @HiraokaDaisuke
    Linkedin: @Daisuke Hiraoka

    View Slide

  3. 今回の内容
    Node.jsのデモアプリを以下の2つのパターンで立ち上げて違いを確認してみよう
    1. Node.jsをローカル環境にインストールしてデモアプリを立ち上げる。
    2. appsodyでデモアプリを立ち上げる

    View Slide

  4. 今回使用するデモノードアプリ
    韓国で実際に使われているマスクの在庫アプリをデプロイします。

    View Slide

  5. 事前準備
    事前にデモアプリをgithubからCloneします。
    $ git clone https://github.com/daihiraoka/kf94maskmap
    $ cd kf94maskmap/
    $ ls
    LICENSE README.md api app.js images manifest.yml package-lock.json
    package.json static

    View Slide

  6. 1.Nodejsをローカル環境にインストール
    して立ち上げる。
    node.jsのインストール
    $ curl -sL https://rpm.nodesource.com/setup_13.x | sudo bash -
    $ sudo yum install nodejs
    $ npm install <- ノードの依存関係をインストールするために実行
    added 58 packages from 49 contributors and audited 166 packages in 1.785s
    found 0 vulnerabilities
    $ npm audit fix <-監査の問題を修正するために実行します
    up to date in 0.457s
    fixed 0 of 0 vulnerabilities in 166 scanned packages
    ローカル環境で実行する
    $ npm start
    > [email protected] start /home/dai/ws/kf94maskmap
    > node app.js
    To view your app, open this link in your browser: http://localhost:3000

    View Slide

  7. ブラウザでhttp://localhost:3000にアクセスしてアプリの起動を確認

    View Slide

  8. 2. Appsodyでデモアプリを立ち上げる
    今回の範囲

    View Slide

  9. 事前準備(Appsodyのインストール)
    Appsodyのドキュメントのインストール手順を利用してセットアップ
    Installing Appsody
    https://appsody.dev/docs/installing/installing-appsody

    View Slide

  10. Appsodyのインストール
    評価した環境 CentOS7
    前提: Dockerがインストールされていること
    1. dockerグループにAppsodyを実行するユーザーを追加
    sudo usermod -aG docker
    2. Appsodyのrpmをダウンロード
    curl –LO https://github.com/appsody/appsody/releases/download/0.5.9/appsody-0.5.9-1.x86_64.rpm
    3. Appsodyのrpmをインストール
    sudo yum install appsody-0.5.9-1.x86_64.rpm
    Installing on RHEL
    https://appsody.dev/docs/installing/rhel/

    View Slide

  11. Appsody はじめの1歩
    % appsody
    The Appsody command-line tool (CLI) enables the rapid development of cloud native applications.
    Complete documentation is available at https://appsody.dev
    Usage:
    appsody [command]
    Available Commands:
    build Build a local container image of your Appsody project.
    completion Generate tab completions
    debug Debug your Appsody project.
    deploy Build and deploy your Appsody project to Kubernetes.
    extract Extract your Appsody project to a local directory.
    help Help about any command
    init Initialize an Appsody project.
    list List the available Appsody stacks.
    operator Install or uninstall the Appsody operator from your Kubernetes cluster.
    ps List the Appsody containers running in the local Docker environment.
    repo Manage your Appsody repositories
    run Run your Appsody project in a containerized development environment.
    stack Tools to help create and test Appsody stacks
    stop Stop the local, running Appsody container.
    test Test your project in the local Appsody environment.
    version Show the version of the Appsody CLI.
    Flags:
    --config string The absolute path to the Appsody config file. Use this option when you want to specify your own, customized config file (default '$HOME/.appsody/.appsody.yaml')
    --dryrun Shows the commands that are called by this command, without running them.
    -h, --help help for appsody
    -v, --verbose Prints more detailed log output, to the console and to a file in $HOME/.appsody/logs
    appsodyコマンドを実行すると次のような出力が表示されます。

    View Slide

  12. Appsodyリポジトリー、スタック、テンプレート
    appsody list コマンドを実行すると次のような出力が表示されます。
    $ appsody list
    REPO ID VERSION TEMPLATES DESCRIPTION
    experimental go-modules 0.1.0 *default Runtime for Go using Go 1.11+ modules for dependencies
    experimental java-spring-boot2-liberty 0.1.11 *default Spring Boot on Open Liberty & OpenJ9 using
    Maven
    experimental nodejs-functions 0.2.0 *simple Serverless runtime for Node.js functions
    experimental quarkus 0.2.3 *default Quarkus runtime for running Java applications
    experimental rocket 0.1.0 *simple Rocket web framework for Rust
    experimental rust 0.1.6 *simple Runtime for Rust applications
    experimental vertx 0.1.4 *default Eclipse Vert.x runtime for running Java applications
    *incubator node-red 0.1.2 *simple Node-RED runtime for running flows
    *incubator nodejs 0.3.5 *simple Runtime for Node.js applications
    *incubator nodejs-express 0.4.6 scaffold, *simple Express web framework for Node.js
    *incubator nodejs-loopback 0.2.3 *scaffold LoopBack 4 API Framework for Node.js
    *incubator python-flask 0.2.2 *simple Flask web Framework for Python
    *incubator starter 0.1.2 *simple Runnable starter stack, copy to create a new stack
    *incubator swift 0.2.5 *simple Appsody runtime for Swift applications
    REPO列はリポジトリー、IDの列はスタック名、VERSIONの列はスタックのバージョン、
    TEMPLATEの列は使用可能なテンプレートのリストです。

    View Slide

  13. Appsodyリポジトリー、スタック、テンプレート
    appsody init incubator/nodejs simple
    appsody init Reposity名/Stack名 Template名を実行して
    アプリ作成用のスケルトンを作成
    *コードを生成するのでコマンドを実行するフォルダは空である必要がある
    *既存のソースコードを使用する場合は、Template名をnoneして実行する
    Appsody Repository
    incubator
    java-spring-boot2 stack
    simple
    template
    default
    template
    simple
    template
    nodejs stack
    AppsodyのRepository、Stack、 Templateの関係を図で表すと。。。

    View Slide

  14. Appsodyリポジトリー、スタック、テンプレート
    リポジトリ、スタック、テンプレートの構成を少し深掘りしてみます。
    まずはリポジトリーの一覧を出力します。
    $ appsody repo list
    NAME URL
    *incubator https://github.com/appsody/stacks/releases/latest/download/incubator-index.yaml
    appsodyhub030 https://github.com/appsody/stacks/releases/download/nodejs-express-v0.3.0/incubator-index.yaml
    experimental https://github.com/appsody/stacks/releases/latest/download/experimental-index.yaml

    View Slide

  15. incubatorリポジトリのincubator-index.yamlの構成
    apiVersion: v2
    stacks:
    - id: nodejs
    name: Node.js
    version: 0.3.5
    description: Runtime for Node.js applications
    license: Apache-2.0
    language: nodejs
    maintainers:
    - name: Sam Roberts
    email: [email protected]
    github-id: sam-github
    default-template: simple
    src: https://github.com/appsody/stacks/releases/download/nodejs-v0.3.5/incubator.nodejs.v0.3.5.source.tar.gz
    templates:
    - id: simple
    url: https://github.com/appsody/stacks/releases/download/nodejs-v0.3.5/incubator.nodejs.v0.3.5.templates.simple.tar.gz
    requirements:
    docker-version: '>= 17.09.0'
    appsody-version: '>= 0.2.7'
    image: docker.io/appsody/nodejs:0.3.5
    - id: kitura
    name: Kitura
    version: 0.2.6
    description: Runtime for Kitura applications
    license: Apache-2.0
    language: swift
    maintainers:
    - name: Ian Partridge
    email: [email protected]
    github-id: ianpartridge
    - name: David Jones
    email: [email protected]
    github-id: djones6
    default-template: default
    src: https://github.com/appsody/stacks/releases/download/kitura-v0.2.6/incubator.kitura.v0.2.6.source.tar.gz

    View Slide

  16. incubator.nodejs.v0.3.5.source.tar.gzの構成
    $ ls
    README.md stack.yaml templates
    $ ls -l ./templates/
    合計 0
    drwxrwxr-x. 4 dai dai 95 3月 13 01:15 image
    drwxrwxr-x. 3 dai dai 98 3月 13 01:15 simple
    $ ls -l ./templates/image/
    合計 16
    -rw-rw-r--. 1 dai dai 982 3月 13 01:15 Dockerfile-stack
    -rw-rw-r--. 1 dai dai 11356 3月 13 01:15 LICENSE
    drwxrwxr-x. 2 dai dai 29 3月 28 00:42 config
    drwxrwxr-x. 2 dai dai 65 3月 28 00:42 project
    $ ls -l ./templates/image/config/
    合計 4
    -rw-rw-r--. 1 dai dai 272 3月 13 01:15 app-deploy.yaml
    $ ls -l ./templates/image/project/
    合計 8
    -rw-rw-r--. 1 dai dai 879 3月 28 00:42 Dockerfile
    -rw-rw-r--. 1 dai dai 335 3月 13 01:15 package.json
    $ ls
    README.md stack.yaml templates
    $ cat stack.yaml
    name: Node.js
    version: 0.3.5
    description: Runtime for Node.js applications
    license: Apache-2.0
    language: nodejs
    maintainers:
    - name: Sam Roberts
    email: [email protected]
    github-id: sam-github
    default-template: simple
    requirements:
    docker-version: ">= 17.09.0"
    appsody-version: ">= 0.2.7"

    View Slide

  17. incubator.nodejs.v0.3.5.templates.simple.tar.gz
    の構成
    $ ls -la
    合計 20
    drwxrwxr-x. 3 dai dai 126 3月 28 00:41 .
    drwxrwxr-x. 4 dai dai 164 3月 28 02:16 ..
    -rw-rw-r--. 1 dai dai 35 3月 13 01:16 .appsody-config.yaml
    -rw-rw-r--. 1 dai dai 1316 3月 13 01:15 .gitignore
    drwxrwxr-x. 2 dai dai 43 3月 13 01:15 .vscode
    -rw-rw-r--. 1 dai dai 37 3月 13 01:15 app.js
    -rw-rw-r--. 1 dai dai 76 3月 13 01:15 package-lock.json
    -rw-rw-r--. 1 dai dai 358 3月 13 01:15 package.json

    View Slide

  18. Appsodyで新しいプロジェクトを作成する
    $ appsody init incubator/nodejs none
    No stack requirements set. Skipping...
    Running appsody init...
    Downloading nodejs-express template project from https://github.com/appsody/stacks/releases/download/nodejs-
    express-v0.3.0/incubator.nodejs-express.v0.3.0.templates.simple.tar.gz
    Download complete. Do not unzip the template project. Only extracting .appsody-config.yaml file from
    /home/dai/ws/kf94maskmap/nodejs-express.tar.gz
    Setting up the development environment
    Your Appsody project name has been set to kf94maskmap
    Pulling docker image docker.io/appsody/nodejs-express:0.3
    Running command: docker pull docker.io/appsody/nodejs-express:0.3
    0.3: Pulling from appsody/nodejs-express
    Digest: sha256:3558c07499dbb9df5bbccf417e57b82019eeb2d2995d7edea314903372f53568
    Status: Image is up to date for appsody/nodejs-express:0.3
    docker.io/appsody/nodejs-express:0.3
    Running command: docker run --rm --entrypoint /bin/bash docker.io/appsody/nodejs-express:0.3 -c "find /project -type f
    -name .appsody-init.sh"
    Successfully initialized Appsody project with the appsodyhub030/nodejs-express stack and no template.
    appsody initコマンドを使って新しいプロジェクトを作成します。
    例えば、incubatorリポジトリのnodejsスタックを使って、
    ソースコードは既にあるソースコード(kf94maskmap)を使うので templateは使わない
    noneを指定して実行します。

    View Slide

  19. Appsodyを使ってデモアプリを立ち上げる
    $ appsody run
    Running development environment...
    Pulling docker image docker.io/appsody/nodejs:0.3
    Running command: docker pull docker.io/appsody/nodejs:0.3
    0.3: Pulling from appsody/nodejs
    Digest: sha256:c0bc3aef3a2d5a631acfebc8fc33e2dfc230c37a0783d5ae2b6d61f93af1fe39
    Status: Image is up to date for appsody/nodejs:0.3
    docker.io/appsody/nodejs:0.3
    Running command: docker run --rm -p 3000:3000 -p 9229:9229 --name kf94maskmap-dev -v /home/dai/ws/kf94maskmap/:/pro
    [Container] Running APPSODY_PREP command: npm install
    audited 166 packages in 1.01s
    [Container] found 0 vulnerabilities
    [Container]
    Running command: npm start --node-options --require=appmetrics-dash/attach
    [Container]
    [Container] > [email protected] start /project/user-app
    [Container] > node app.js
    [Container]
    [Container] [Fri Mar 27 14:59:36 2020] com.ibm.diagnostics.healthcenter.loader INFO: Node Application Metrics 5.1.1.202003121
    [Container] [Fri Mar 27 14:59:37 2020] com.ibm.diagnostics.healthcenter.mqtt INFO: Connecting to broker localhost:1883
    [Container] To view your app, open this link in your browser: http://localhost:3000
    appsody run コマンドを実行してデモアプリを起動

    View Slide

  20. Appsodyを使ってデモアプリを立ち上げる
    ブラウザでhttp://localhost:3000にアクセスしてアプリの起動を確認

    View Slide

  21. Appsodyを使ってデモアプリを立ち上げる
    $ docker ps
    CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
    0baf731a99a2 appsody/nodejs:0.3 "/.appsody/appsody-c…" 3 minutes ago Up 3 minutes 0.0.0.0:3000->3000/tcp, 0.0.0.0:9229->9229/tcp
    docker psコマンドを実行するとDockerコンテナが起動していることが確認できる

    View Slide

  22. デモ

    View Slide

  23. まとめ
    ・ Appsodyを使うとゼロから始めるのではなく、nodejs、java、springなど特定のユースケースに
    合わせて最適化されたスタックとテンプレートをベースにアプリケーションを作ることができます。
    ・Appsodyはベースとなるスタックとテンプレートは分離されているため開発者はソースコードを書く、
    運用者・アーキテクトはスタックとテンプレートの管理を行うと、役割を分離されているので
    DevOpsが推進しやすい思想になってます。
    ・Appsodyはコンテナを使った開発に必要なスキル、例えばdocker コマンドなど抽象化しているので
    学習コストが低くなってます。今回説明していない appsody deployコマンドでローカル環境、
    Kubernetes、OpenShiftと複数の環境にデプロイすることができます。
    ・Appsodyで作られたアプリケーションはコンテナ化されるので、従来の各環境に
    ミドルウェアをインストールしていた時に比べると環境差異は少なくなるかほぼ無くなります。
    環境依存が大きいサービスのアプリケーションの利用に向いてます。
    ・Appsody(Kabanero)は IBM が今、重要視している製品 IBM Cloud Pak for Applicationsの
    コンポーメントの1つのOSSのプロジェクトです。
    そのため、開発に勢いがあり、Appsodyに限らずTektonなどKabaneroを構成するコンポーネントは
    どんどん機能追加されています。

    View Slide