1

ソルトを使用して Web サーバーをブートストラップします。複数の異なるドメインをホストしています。/etc/apache2/sites-availableドメインごとにファイルを作成します。次に、にシンボリックリンクしsites-enabledます。

問題は、ドメインを別のサーバーに移動すると、リンクsites-enabledが削除されないことです。ドメイン名を変更してデータをそのままにしておくと、old.domain.com と new.domain.com の vhost ファイルが作成されます。最終的には new.domain.com のみになると予想してsites-enabledいますが、両方のファイルが存在し、作業ドメインはアルファベットに依存します (私は推測します) - どちらの仮想ホストが最初にロードされるか。

ドメインをピラーに保存し、次のような vhost を生成します。

{%- for site in pillar.sites %}
/etc/apache2/sites-available/{{ site.name }}:
  file:
  - managed
  - source: salt://apache/conf/sites/site
  - template: jinja
  - require: 
    - file: /etc/apache2/sites-available/default
    - cmd: apache_rewrite_enable
  - defaults:
    site_name: "{{ site.name }}"
/etc/apache2/sites-enabled/{{ site.name }}:
  file.symlink:
  - target: /etc/apache2/sites-available/{{ site.name }}
  - require:
    - file: /etc/apache2/sites-available/{{ site.name }}
{% endfor %}

柱にリストされている vhost のみが highstate の後に残るようにする必要があります。最初にフォルダーを空にすることを考えましたが、ハイステートが空中で失敗する可能性があり、追加しようとしたという理由だけで、vhosts なしで残り、他のすべてのドメインが機能しなくなる可能性があるため、危険に感じます。

「この高状態の実行に存在しなかったものをすべて削除する」のようなものを強制する方法はありますか?

4

1 に答える 1

1

はい、問題は、Salt が指定されていないことを何もしないことです。デフォルトでサーバー全体を自動的に管理しようとするのは難しすぎます (そして非常に危険です)。したがってfile.managedfile.symlinkターゲット ファイルとシンボリック リンクが存在し、正しい状態であることを確認してください。他のファイルについて心配する余裕はありません。

いくつかのオプションがあります。1 つ目は、各ハイステートの開始時にディレクトリをクリーンアップすることです。あなたが言ったように、これは少し危険なので理想的ではありません (そして、highstate が失敗した場合、サイトはどれも機能しません)。

より良いオプションは、すべてのサイトを各ミニオンの柱に配置することです。一部は柱の「サイト」キーの下に配置され、残りは柱の「無効」キーの下に配置される可能性があります。次に、file.absent状態を使用して、「無効な」サイトファイルがそれぞれ存在しないことを確認できます。(それらのファイルのシンボリックリンクも)

次に、ドメインをホストからホストに移動すると、そのドメインを前のミニオンの柱から削除するだけでなく、実際に「サイト」キーから「無効」キーに移動します。そうすれば、そのサイトがなくなることが保証されます。

それが役立つことを願っています!

于 2013-08-14T16:43:44.850 に答える