6

現在、サーバーをプロビジョニングするために Ansible を調査しています。これは、かなりデフォルトのnginx、php-fpm、およびmysqlのセットアップです。ただし、これらのパッケージのインストールと、実行中のサービスでプレイブックをべき等にする方法について疑問に思っています。

nginx の場合、デフォルトnginx.confといくつかのファイルがconf.d/. php の場合php.iniphp-fpm.conf、 、 プールがpool.d/あり、いくつかの ini ファイルが にありconf.d/ます。すべての ansible playbook 呼び出しですべてのファイルを上書きするという考えはありますか?

すべての構成が上書きされた場合、サーバーに負荷がかかっている場合でも実行しservice nginx reloadても問題ありませんか? service php5-fpm reload初期インストールでは、サーバーが起動しないため、最初にステータスを確認し、それに基づいてと?reloadを切り替える必要があります。startreload

nginx がインストールされた Playbook を探すと、nginx を再起動するハンドラーを使用することがよくあります。ただし、これは優雅ではないため、そのアプローチはあまり好きではありません。

service: name=nginx state=restarted

一般に、再起動を強制せずに、nginx、php-fpm、mysql などのサービスで ansible を使用してサーバーをプロビジョニングする一般的なパターンは何ですか?

4

2 に答える 2

5

サービス モジュールはでリロードできますstate=reloaded

同じバージョンがサーバーに既に存在する場合、構成ファイルはアップロードされません。service: name=nginx state=restartedしたがって、ハンドラーで使用すると、リロードはトリガーされません。

service: name=nginx enable=yesまた、起動時にサービスが開始されるように使用することもできます (したがって、必要な場合startにのみ、nginxを明示的に指定する必要はありませんreload)。

于 2013-11-29T10:51:14.313 に答える
4

#ansible IRC チャンネルで、私はすでに機能する答えを得ました。apt システムの一般的なパターンは、インストール後にサービスが開始されることです。したがって、構成が変更された場合にstartのみ、完全に省略できます。reload

セットアップは次のようになります(例として、Nginxが使用されます)

  1. Nginxをインストールする
  2. すべての設定ファイルを上書きする
  3. #2で何かが変更された場合は、リロードを実行します

これで十分です。Nginx がインストールされていない場合は、手順 1、2、および 3 が実行されます。Nginx がインストールされ、構成に問題がない場合、リロードは発生しません。構成を更新すると、ステップ 2 によって変更が発生するため、リロードが発生します。

これは、すべてのケースをカバーするのに十分なはずです。

于 2013-11-29T10:47:12.107 に答える