29

Snap/Haskell を実稼働の Ubuntu サーバー (EC2 上) にインストールし、プロジェクトをチェックアウトしましたが、どうすれば実行できますか?

つまり、ローカルでは、コマンド ラインから実行します。

project-name -p 8000

スナップには独自の Web サーバーが付属していますか (そのように見えます)、そうであれば、何らかのデーモンとして実行するように構成するにはどうすればよいですか?

任意のヒント?

編集2:

ウィキで彼らは言う:

snap-server は、snap-core で定義されたインターフェイスをサポートする HTTP サーバー ライブラリです。

ここにいる間、「Haskell Webコードの展開/バックエンドオプション」に関するhaskell wikiは、Snapについて次のように述べています。

独自のサーバーが含まれています。Web/フレームワークを参照

しかし、どのように?独自のサーバーをどのように実行しますか? プログラミングに興味があるだけなのに、なぜいまいましいものの展開について知らなければならないのか...

編集:関連する質問: Snap Framework を使用する Haskell コードをデプロイする

4

3 に答える 3

25

さて、掘り下げ尋ねた後、ここに私が思いついたものがあります。

大きなアイデア

Snap アプリケーションをバイナリにコンパイルし、upstartを使用してサービスとして実行します。

ステップバイステップ

  1. Web アプリケーションをコンパイルします。この例では、webapp が次の場所にあると仮定します/home/john/webapps/mysite

    $ cd /home/john/webapps/mysite
    $ cabal install
    ...
    Preprocessing executable 'mysite` for 'mysite-0.1'...
    Installing executable(s) in /home/john/.cabal/bin
    

    ご覧のとおり、バイナリは に配置され/home/john/.cabal/binます。好きな場所に移動できますが、そのままにしておきます。

  2. アプリケーション フォルダーにログを作成します。そうしないと、snap からエラーが発生します。

    $ mkdir /home/john/webapps/mysite/log
    
  3. 次に、webapp を実行するサービスを作成します。そのために、upstartと呼ばれる Ubuntu のサービス機能を使用します。

    a) ディレクトリに目的の名前の conf ファイルを作成するだけで、サービスに名前を付けます/etc/init/。それを呼びましょうmysite

    $ sudo vi /etc/init/mysite.conf
    

    b) 次に、サービスの説明を追加しましょう。

    start on startup
    chdir /home/john/webapps/mysite
    exec /home/john/.cabal/bin/mysite -p 80
    

    まず、システムの起動時 (または起動時) にサービスを実行する必要があると言います。

    第 2 に、スナップにはそれsnapletsと他の静的リソース (前に作成したログ ディレクトリなど) が必要なので、プロジェクトのディレクトリ内でサービスを実行するように指示します。

    最後に、実際にサービスとして実行されるバイナリを指定します: /home/john/.cabal/bin/mysite. ポート 80 で実行されるように、パラメーターをスナップ Web サーバーに渡し-p 80ます。

  4. 終わり。実行中かどうかを確認し、必要に応じて手動で開始できます。

    initctl list | grep mysite
    initctl start mysite
    
于 2012-07-03T05:15:29.907 に答える
17

はい、snap-server は独自のサーバーです。つまり、Haskell/Snap アプリをコンパイルすると、文字通りコマンド ラインから実行してサイトをホストできる実行可能ファイルが残ります。それだけです。apache や nginx のような接続する外部サーバーはありません。必要に応じてリバース プロキシをセットアップできますが、それはあなた次第です。

本格的な展開のほとんどで私が行うことは次のとおりです。

  • 同じ Linux ボックスまたは互換性のあるマシンでコンパイルします。ほとんどの場合、サンドボックス化には cabal-dev を使用します。
  • コマンドライン引数: cabal-dev/bin/myapp -p 8010 -e prod +RTS -A4M -qg1
  • ロードバランサーを使用してリクエストを転送できるように、特権のないデフォルト以外のポート (上記の 8010) で実行しています。これにより、必要に応じて Linux ボックスごとに複数のスナップ アプリを実行することもできます。
  • 次に、単純なプロセス監視アプリケーションを使用して、それが稼働していることを確認します。以下を使用できます。
  • モニターがセットアップされたらHUP、再起動したいときにいつでもアプリケーションに信号を送信するだけで、監視アプリがそれを元に戻します。
  • 私は、デプロイメントの自動化のためにFabricの大ファンです。ファブリックを使用して、リモート同期、再起動などをすべて処理できます。

お役に立てれば。

于 2012-06-28T06:28:34.307 に答える
5

これは Ubuntu であるため、ほとんどの場合、upstart を使用して管理する方が適切です。

man 5 init

とりわけ、サービスの依存関係階層を設定できます。「snapapp は mongodb に依存しているため、mongodb が実行されるまで snapapp を開始しないでください」-そのようなこと。

はい、snap は Web サーバーですが、ほとんどの場合、スナップ アプリが localhost でのみリッスンしproxy_path、サーバーまたはそれらのグループを指すように nginx をそれらの前に配置します。

面白いことに、私たちは $work での新しい開発のためにほぼ完全に Common Lisp に切り替えましたが、セットアップはまったく同じです。

于 2012-06-27T16:57:59.783 に答える