新しいアプリケーションをShinyProxyに追加する最速の方法


byPeter Solymos
一旦あなたのShinyProxyサーバーが稼働しているならば、あなたはそれを維持して、更新する必要があります.前回は、既存のアプリを更新する方法を見た.このセクションでは、新しいものを手間がかからないようにする方法を説明します.
ShinyProxyは、コンシャスユーザーまたはアプリケーションの時間の数を制限することなく、光沢のあるアプリのようなコンテナ化されたWebアプリケーションを提供します.それは無料、オープンソースであり、認証やアプリケーションレベルの認証などの無料のエンタープライズ機能が付属しています.
前の記事ではintroduced ShinyProxyconfiguration , 次にupdate existing apps ユーザーを混乱させることなく.しかし、たまに、ShinyProxyに新しいアプリケーションを追加します.これは、設定を更新し、いくつかの手順を実行する必要があります.これらのステップとどのようにプロセスをより効率的にするかを見てみましょう.

必要条件


設定ファイルを見つけることができますapplication.yml このチュートリアルではanalythium/shiny-correlation githubリポジトリ.
フォローするには、以下の仮想マシンを設定しますthis post Ubuntu 20.04を使用して任意のクラウドプロバイダ.または、ShinyProxy 1-click app from the Digitalocean Marketplace :
ShinyProxy Marketplaceイメージを使っている液滴(仮想マシン)をつくってください
ホストURLまたはIPv 4アドレスを知ったら、$HOST 環境変数とrootユーザとしてログインするssh :
export HOST="178.128.235.125"

ssh root@$HOST

新しいアプリを追加する手順


ShinyProxyの設定はapplication.yml ファイル名/etc/shinyproxy フォルダ.このファイルはアプリをリストします、したがって、新しいアプリケーションを加えることは以下のステップを含みます
  • 更新application.yml 新しいアプリを含める
  • 新しいDockerイメージをホストに引き寄せてくださいdocker pull
  • ShinyProxyサービスを再起動しますservice shinyproxy restart
  • 手順2と3はサーバー上で起こります.しかし、ステップ1はいくつかの異なる方法で達成することができます.それらが何であるかについて見ましょう.

    サーバーで設定を編集


    最も簡単な方法は、サーバー上で直接YAMLファイルを編集することです.ファイルをオープンするnano or vim , 不要なアプリケーションを削除する/etc/shinyproxy/application.yml ), そして、新しいアプリを追加します.ファイナルショーapplication.yml 参照用のファイル
    proxy:
      title: Shiny Proxy
      logo-url: https://hub.analythium.io/assets/logo/logo.png
      landing-page: /
      favicon-path: favicon.ico
      heartbeat-rate: 10000
      heartbeat-timeout: 60000
      port: 8080
      authentication: simple
      admin-groups: admins
      users:
      - name: admin
        password: password
        groups: admins
      - name: user
        password: password
        groups: users
      docker:
        url: http://localhost:2375
        port-range-start: 20000
      specs:
      - id: cor2d
        display-name: Correlation in 2D
        description: App with 2D kernel density estimate
        container-cmd: ["R", "-e", "shiny::runApp('/home/app')"]
        container-image: analythium/correlation:v1
        logo-url: https://hub.analythium.io/assets/apps/cor2d.png
        access-groups: []
      - id: cor3d
        display-name: Correlation in 3D
        description: App with kernel density estimate with 3D RGL plot
        container-cmd: ["R", "-e", "shiny::runApp('/home/app')"]
        container-image: analythium/correlation:v2
        logo-url: https://hub.analythium.io/assets/apps/cor3d.png
        access-groups: [admins, users]
    
    logging:
      file:
        name: shinyproxy.log
    
    つの新しいアプリはどのように議論するときに見たものと同じですupdate existing apps . The access-groups: [] 値は、すべての認証ユーザーがアプリケーションの2 Dバージョンにアクセスできることを意味します.
    新しいDocker画像をプルします.
    docker pull analythium/correlation:v1
    docker pull analythium/correlation:v2
    
    あなたが個人のDockerレジストリを使用しているならば、あなたはログインしなければなりません.制限されたスコープを持つトークンを生成するのが最善です.あなたのパスワードの代わりにこのトークンを使用することができますし、それを使用しているすべての場所でパスワードを変更することなく、いつでもトークンを取り消すのは簡単です.これは、ワンタイムのことは、ユーザー名とトークンが保存され、後でログインが必要です使用されます.トークンをファイルに保存します(この行の先頭にあるダブルスペースは、Bash履歴でトークンが終了するのを防ぎます).
      echo your_token > ./token.txt
    
    今、あなたは標準入力を介してトークンを渡すことができますusername and registryname :
    cat ./token.txt | docker login --username username --password-stdin registryname
    
    最後に、ShinyProxyを再起動します.
    service shinyproxy restart
    
    あなたがShinyProxyサーバーにログインしたならば、現在、あなたはShinyProxyが再開するまで、502の悪いゲートウェイを見なければなりません.
    これは、サーバー上のログインしているユーザのいずれかに起こるでしょう.そのような混乱を避けるために、ユーザーがログインしていないとき、または、中断が最小で、事前にユーザーに広告されるとき、あなたは時間へのアップデートを予定することができます.また、使用することができますRedis in-memory database for session persistence .
    ここで説明するアプローチは、ShinyProxyの設定を完全に機能させる方法です.しかし、一旦ファイルが変わるならば、あなたがどこかでバックアップコピーを保存しない限り、それは難しくなります.これは、バージョン管理を使用するのが役に立つかもしれない理由です.

    Gitを編集して設定を更新します


    エディットapplication.yml ローカルマシンとGitでリモートリポジトリに変更をプッシュします.最初にサーバー上の設定を更新すると、Gitはバージョン管理下にあるプロジェクトをクローンします.
    git clone https://github.com/analythium/shiny-correlation.git
    
    次は、あなただけのcd ディレクトリとgit pull 変更点:
    cd shiny-correlation
    git pull
    
    YAML設定ファイルを/etc/shinyproxy フォルダ
    cp application.yml /etc/shinyproxy
    
    新しいイメージをプルし、前の節のようにShinyProxyを再起動します.
    docker pull analythium/correlation:v1
    docker pull analythium/correlation:v2
    
    service shinyproxy restart
    
    このアプローチは以前のバージョン管理の問題を取り囲んでいます.しかし、1つずつ新しいイメージ名を入力すると退屈です.いくつかの効率を見つけることができるかどうか見てみましょう.

    SSHの設定変更をプッシュする


    私は前のものと同様にワークフローを説明するつもりです、しかし、変化を引く代わりに、私は使用するつもりですssh and scp ファイルをサーバーに転送し、Docker引きとShinyProxy再起動コマンドを実行します.
    エディットapplication.yml そして、完全な履歴があるように変更をコミットします.一度あなたのapplication.yml 準備完了.cd 設定ファイルがあるローカルディレクトリに次のようにダウンロードしますscript file :
    curl -s https://raw.githubusercontent.com/analythium/shinyproxy-1-click/master/digitalocean/setup.sh -o setup.sh
    
    新しくダウンロードされた一般的な使用法setup.sh
    bash setup.sh -i ~/.ssh/id_rsa -s root@ip_address -f application.yml
    
    以下のコマンドライン引数をsetup.sh スクリプト
  • -i : あなたのパスssh キー
  • -s : ユーザ名root\ ) IPアドレスなど.[email protected]
  • -f : ShinyProxy設定のパスとファイル名./path/to/application-new.yml .
  • スクリプトは、次の順序で処理を行います.
  • 更新されたYAMLをサーバにコピーします/etc/shinyproxy フォルダ
  • YAMLファイルに記載されているDocker画像をプルします
  • ShinyProxyサービスを再開する
  • これは、Gitリポジトリ内の実際のYAMLファイルのコマンドです.
    bash setup.sh -i ~/.ssh/id_rsa -s root@${HOST} -f application.yml
    
    出力は次のようになります.
    [INFO] Copying application.yml to host
    [INFO] Updating docker images according to application.yaml
    v1: Pulling from analythium/correlation
    420047682034: Pulling fs layer
    
    ...
    
    7bdb658c82cf: Pull complete
    Digest: sha256:175663b0be8c97743f7a5bd1960c59d3f09536cd762a0f6f0a5744ee55ddb7ce
    Status: Downloaded newer image for analythium/correlation:v1
    docker.io/analythium/correlation:v1
    v2: Pulling from analythium/correlation
    420047682034: Already exists
    
    ...
    
    b65c57a60c68: Pull complete
    Digest: sha256:4eaa98afe32b88d4cce7ce5436956ecb38e94c776bee97244a8fc28cde8e415f
    Status: Downloaded newer image for analythium/correlation:v2
    docker.io/analythium/correlation:v2
    [INFO] Restarting ShinyProxy
    [INFO] Done
    
    スクリプトはYAML設定を解析し、container-image エントリー.これはバックグラウンドで以下のスクリプトで行います.
    #!/bin/bash
    db=$(grep 'container-image:' $1 | sed 's/[^:]*://' | sed 's/^[[:space:]]*//g')
    while IFS= read -r line; do docker pull $line; done <<< "$db"
    
    あなたのShinyProxyサーバーをチェックすると、2つの新しいアプリケーションが表示されます:
    更新後に2つの新しい画像をリスティング
    あなたがもうそれを必要としない場合、サーバーをシャットダウンすることを忘れないでください.

    結論


    ShinyProxyを更新する3つの方法をレビューしました.第3のスクリプトベースの更新application.yml すべてのコマンドラインツールが便利であれば、ファイルは非常に効率的です.変更はバージョン管理されることができます、そして、あなたはホストマシンの上でファイルとディレクトリをナビゲートすることなく更新されたShinyProxyサーバーから1行離れています.スクリプトは、引っ張られる必要があるすべてのDockerイメージのためにYAMLファイルさえスキャンします.覚えている唯一のことは、ユーザーに最小限の混乱を引き起こすときに、これらの更新を実行することです.

    更なる読書

  • ShinyProxy documentation: configuration
  • Managing access tokens on Docker Hub
  • ShinyProxy 1-click app
  • Session persistence with Redis