Trước khi bạn bắt đầu

Bạn sẽ cần ít nhất hai Linodes đã cài đặt Salt. Nếu bạn chưa cài đặt, hãy đọc Hướng dẫn Bắt đầu với Salt – Cài đặt và Thiết lập Cơ bản và làm theo hướng dẫn để thiết lập Salt master và minion.

Các bước sau đây sẽ được thực hiện trên Salt master của bạn.

Ghi chú: Các bước trong hướng dẫn này yêu cầu quyền root. Hãy đảm bảo chạy các bước bên dưới dưới dạng root hoặc với sudotiền tố. Để biết thêm thông tin về quyền, hãy xem hướng dẫn Người dùng và Nhóm của chúng tôi .

Thiết lập Salt Master và các tệp được quản lý của bạn

Tệp Salt Master SLS

1.Tạo /srv/saltthư mục nếu nó chưa tồn tại:

mkdir /srv/salt

2.Tạo một tệp Salt top trong /srv/saltđó sẽ là điểm vào của Salt cho cấu hình Apache:

base:
  'G@os_family:Debian':
    - match: compound
    - apache-debian

  'G@os:CentOS':
    - match: compound
    - apache-centos

Tệp trên cùng này sử dụng phép ghép hợp chất để nhắm mục tiêu đến các minion của bạn theo hệ điều hành bằng Salt Grains. Điều này sẽ cho phép Salt chọn cấu hình Apache phù hợp tùy thuộc vào bản phân phối Linux. Các trình ghép này có thể được mở rộng để cụ thể hơn nữa. Ví dụ, nếu bạn chỉ muốn nhắm mục tiêu đến các minion có ID web-serverđang chạy trên Ubuntu, bạn có thể nhập web* and G@os:Ubuntu.

Tệp Pillar 

1.Tạo /srv/pillarthư mục nếu nó chưa tồn tại:

mkdir /srv/pillar

2.Tạo một tệp Pillar top. Tệp top này tham chiếu đến apache.slstệp Pillar mà bạn sẽ tạo ở bước tiếp theo:

base:
  '*':
    - apache

3.Tạo apache.slstệp được tham chiếu ở bước trước. Tệp này định nghĩa dữ liệu Pillar sẽ được sử dụng bên trong tệp trạng thái Apache của chúng tôi ở phần tiếp theo, trong trường hợp này là tên miền của bạn. Thay thế example.combằng tên miền của bạn:

domain: example.com

Tập tin trang web

1.Tạo một thư mục cho các tập tin trang web của bạn trong thư /srv/saltmục. Thay thế example.combằng tên miền trang web của bạn:

mkdir /srv/salt/example.com

Bạn có thể truy cập thư mục này từ các tệp trạng thái Salt tại salt://example.com.

2.Tạo một index.htmltệp cho trang web của bạn trong /srv/salt/example.comthư mục, thay thế example.comcho tên thư mục bạn đã chọn ở bước trước. Bạn sẽ sử dụng tệp này như một bài kiểm tra để đảm bảo trang web của bạn hoạt động bình thường.

<html>
  <body>
    <h1>Server Up and Running!</h1>
  </body>
</html>

Tập tin cấu hình

1.Tạo một thư mục cho các tệp cấu hình bổ sung của bạn tại /srv/salt/files. Các tệp này sẽ có thể truy cập được tại salt://files.

mkdir /srv/salt/files

2.Tạo một tệp có tên là tune_apache.confin /srv/salt/filesvà dán khối sau vào:

<IfModule mpm_prefork_module>
StartServers 4
MinSpareServers 20
MaxSpareServers 40
MaxClients 200
MaxRequestsPerChild 4500
</IfModule>

Mô-đun prefork MPM này cung cấp khả năng điều chỉnh bổ sung cho cài đặt Apache của bạn . Tệp này sẽ được Salt quản lý và cài đặt vào thư mục cấu hình phù hợp ở bước sau.

3.Nếu bạn sẽ cài đặt Apache trên máy CentOS, hãy tạo một tệp có tên là include_sites_enabled.confvà /srv/salt/filesdán nội dung sau vào:

IncludeOptional sites-enabled/*.conf

Tệp này sẽ cho phép chúng ta sử dụng các thư mục tệp giống như những thư mục có trong cài đặt Debian để giúp sắp xếp cấu hình Apache.

Tạo tệp trạng thái Apache cho Debian và Ubuntu

Các bước riêng lẻ

Hướng dẫn này sẽ hướng dẫn từng bước quá trình tạo tệp trạng thái Apache cho Debian và Ubuntu. Nếu bạn muốn xem toàn bộ tệp trạng thái, bạn có thể xem ở cuối phần này .

1.Tạo một tệp trạng thái có tên apache-debian.slslà /srv/saltvà mở tệp đó trong trình soạn thảo văn bản mà bạn chọn.

2.Hướng dẫn Salt cài đặt apache2gói và khởi động apache2dịch vụ:

apache2:
  pkg.installed

apache2 Service:
  service.running:
    - name: apache2
    - enable: True
    - require:
      - pkg: apache2

...

Tại đây Salt đảm bảo apache2gói được cài đặt bằng pkg.installed. Tương tự như vậy, nó đảm bảo apache2dịch vụ đang chạy và được bật trong service.running. Cũng trong service.runningapache-debian.slssử dụng requiređể đảm bảo lệnh này không chạy trước khi apache2gói được cài đặt. requireBước này sẽ được lặp lại trong suốt apache-debian.sls.

Cuối cùng, một watchcâu lệnh được sử dụng để khởi động lại apache2dịch vụ nếu tệp cấu hình của trang web của bạn thay đổi. Bạn sẽ định nghĩa tệp cấu hình đó trong bước sau. Lưu ý rằng tệp cấu hình này được đặt tên bằng tên miền bạn đã cung cấp khi tạo tệp Salt Pillar trong phần đầu tiên. Dữ liệu Pillar này sẽ được sử dụng trong suốt apache-debian.sls.

3.Tắt KeepAlive:

...

Turn Off KeepAlive:
  file.replace:
    - name: /etc/apache2/apache2.conf
    - pattern: 'KeepAlive On'
    - repl: 'KeepAlive Off'
    - show_changes: True
    - require:
      - pkg: apache2
...

KeepAlive cho phép nhiều yêu cầu được gửi qua cùng một kết nối TCP. Đối với mục đích của hướng dẫn này, KeepAlive sẽ bị vô hiệu hóa. Để vô hiệu hóa, Salt được hướng dẫn tìm chỉ thị KeepAlive /etc/apache2/apache2.confbằng cách khớp một mẫu và thay thế bằng KeepAlive Offshow_changeshướng dẫn Salt hiển thị bất kỳ thay đổi nào đã thực hiện trong trạng thái cao.

4.Chuyển tune_apache.confđến minion của bạn và kích hoạt nó:

...

/etc/apache2/conf-available/tune_apache.conf:
  file.managed:
    - source: salt://files/tune_apache.conf
    - require:
      - pkg: apache2

Enable tune_apache:
  apache_conf.enabled:
    - name: tune_apache
    - require:
      - pkg: apache2

...

Bước này lấy tune_apache.conftệp bạn đã tạo trong bước Tệp cấu hình và chuyển nó đến minion Salt của bạn. Sau đó, Salt kích hoạt tệp cấu hình đó bằng mô-đun apache_conf .

5.Tạo các thư mục cần thiết:

...

/var/www/html/{{ pillar['domain'] }}:
  file.directory

/var/www/html/{{ pillar['domain'] }}/log:
  file.directory

/var/www/html/{{ pillar['domain'] }}/backups:
  file.directory

/var/www/html/{{ pillar['domain'] }}/public_html:
  file.directory

...

6.Vô hiệu hóa tệp cấu hình máy chủ ảo mặc định:

...

000-default:
  apache_site.disabled:
    - require:
      - pkg: apache2

...

Bước này sử dụng mô-đun apache_site của Salt để vô hiệu hóa tệp cấu hình máy chủ ảo Apache mặc định và giống như khi chạy a2dissitetrên máy chạy Debian.

7.Tạo tệp cấu hình máy chủ ảo cho trang web của bạn:

...

/etc/apache2/sites-available/{{ pillar['domain'] }}.conf:
  apache.configfile:
    - config:
      - VirtualHost:
          this: '*:80'
          ServerName:
            - {{ pillar['domain'] }}
          ServerAlias:
            - www.{{ pillar['domain'] }}
          DocumentRoot: /var/www/html/{{ pillar['domain'] }}/public_html
          ErrorLog: /var/www/html/{{ pillar['domain'] }}/log/error.log
          CustomLog: /var/www/html/{{ pillar['domain'] }}/log/access.log combined

...

Bước này sử dụng mô-đun apache của Salt (không nên nhầm lẫn với mô apache_site-đun được sử dụng trong bước trước) để tạo tệp cấu hình máy chủ ảo của trang web của bạn. thisBiến này biểu thị những gì theo truyền thống sẽ được bao gồm VirtualHosttrong dấu ngoặc nhọn trong tệp cấu hình Apache: <VirtualHost *:80>.

8.Kích hoạt tệp cấu hình máy chủ ảo mới của bạn:

...

{{ pillar['domain'] }}:
  apache_site.enabled:
    - require:
      - pkg: apache2

...

Bước này sử dụng cùng một apache_sitemô-đun mà bạn đã dùng để vô hiệu hóa tệp máy chủ ảo mặc định nhằm kích hoạt tệp máy chủ ảo mới tạo của bạn. apache_site.enabledtạo một liên kết tượng trưng từ /etc/apache2/sites-available/example.com.confđến /etc/apache2/sites-enabled/example.com.confvà giống như khi chạy a2ensitetrên máy chạy Debian.

9.Chuyển index.htmltập tin trang web của bạn tới minion của bạn:

...

/var/www/html/{{ pillar['domain'] }}/public_html/index.html:
  file.managed:
    - source: salt://{{ pillar['domain'] }}/index.html

Bất kỳ thay đổi nào được thực hiện với index.htmltệp trên Salt master của bạn sẽ được truyền đến minion của bạn.

Ghi chú: Vì Salt không theo dõi các tệp cấu hình để phát hiện thay đổi nhằm kích hoạt khởi động lại Apache, nên bạn có thể cần sử dụng lệnh bên dưới từ máy chủ Salt của mình.

salt '*' apache.signal restart

Hồ sơ hoàn chỉnh State File

Tệp tin đầy đủ apache-debian.slstrông như thế này:

apache2:
  pkg.installed

apache2 Service:
  service.running:
    - name: apache2
    - enable: True
    - require:
      - pkg: apache2

Turn Off KeepAlive:
  file.replace:
    - name: /etc/apache2/apache2.conf
    - pattern: 'KeepAlive On'
    - repl: 'KeepAlive Off'
    - show_changes: True
    - require:
      - pkg: apache2

/etc/apache2/conf-available/tune_apache.conf:
  file.managed:
    - source: salt://files/tune_apache.conf
    - require:
      - pkg: apache2

Enable tune_apache:
  apache_conf.enabled:
    - name: tune_apache
    - require:
      - pkg: apache2

/var/www/html/{{ pillar['domain'] }}:
  file.directory

/var/www/html/{{ pillar['domain'] }}/log:
  file.directory

/var/www/html/{{ pillar['domain'] }}/backups:
  file.directory

/var/www/html/{{ pillar['domain'] }}/public_html:
  file.directory

000-default:
  apache_site.disabled:
    - require:
      - pkg: apache2

/etc/apache2/sites-available/{{ pillar['domain'] }}.conf:
  apache.configfile:
    - config:
      - VirtualHost:
          this: '*:80'
          ServerName:
            - {{ pillar['domain'] }}
          ServerAlias:
            - www.{{ pillar['domain'] }}
          DocumentRoot: /var/www/html/{{ pillar['domain'] }}/public_html
          ErrorLog: /var/www/html/{{ pillar['domain'] }}/log/error.log
          CustomLog: /var/www/html/{{ pillar['domain'] }}/log/access.log combined

{{ pillar['domain'] }}:
  apache_site.enabled:
    - require:
      - pkg: apache2

/var/www/html/{{ pillar['domain'] }}/public_html/index.html:
  file.managed:
    - source: salt://{{ pillar['domain'] }}/index.html

Tạo một tệp trạng thái Apache cho CentOS

Các bước riêng lẻ

1.Tạo một tệp có tên là apache-centos.slsin /srv/saltvà mở tệp đó trong trình soạn thảo văn bản mà bạn chọn.

2.Trên CentOS Apache được đặt tên là httpd. Hướng dẫn Salt cài đặt httpdvà chạy httpddịch vụ:

httpd:
  pkg.installed

httpd Service:
  service.running:
    - name: httpd
    - enable: True
    - require:
      - pkg: httpd
    - watch:
      - file: /etc/httpd/sites-available/{{ pillar['domain'] }}.conf

...

Tại đây Salt đảm bảo httpdgói được cài đặt bằng pkg.installed. Tương tự như vậy, nó đảm bảo httpddịch vụ đang chạy và được bật trong service.running. Cũng trong service.runningapache-debian.slssử dụng requiređể đảm bảo lệnh này không chạy trước khi httpdgói được cài đặt. requireBước này sẽ được lặp lại trong suốt apache-centos.sls.Cuối cùng, một watchcâu lệnh được sử dụng để khởi động lại httpddịch vụ nếu tệp cấu hình của trang web của bạn thay đổi. Bạn sẽ định nghĩa tệp cấu hình đó trong bước sau. Lưu ý rằng tệp cấu hình này được đặt tên bằng tên miền bạn đã cung cấp khi tạo tệp Salt Pillar trong phần đầu tiên. Dữ liệu Pillar này sẽ được sử dụng trong suốt apache-centos.sls.

3.Tắt KeepAlive:

...

Turn Off KeepAlive:
  file.replace:
    - name: /etc/httpd/conf/httpd.conf
    - pattern: 'KeepAlive On'
    - repl: 'KeepAlive Off'
    - show_changes: True
    - require:
      - pkg: httpd
...

KeepAlive cho phép nhiều yêu cầu được gửi qua cùng một kết nối TCP. Đối với mục đích của hướng dẫn này, KeepAlive sẽ bị vô hiệu hóa. Để vô hiệu hóa, Salt được hướng dẫn tìm chỉ thị KeepAlive /etc/httpd/conf/httpd.confbằng cách khớp một mẫu và thay thế bằng KeepAlive Offshow_changeshướng dẫn Salt hiển thị bất kỳ thay đổi nào đã thực hiện trong trạng thái cao.

4.Thay đổi DocumentRoot:

...

Change DocumentRoot:
  file.replace:
    - name: /etc/httpd/conf/httpd.conf
    - pattern: 'DocumentRoot "/var/www/html"'
    - repl: 'DocumentRoot "/var/www/html/{{ pillar['domain'] }}/public_html"'
    - show_changes: True
    - require:
      - pkg: httpd

...

Tương tự như bước cuối cùng, trong bước này salt-centos.slshướng dẫn Salt tìm kiếm chỉ thị DocumentRoot trong tệp Apache httpd.confvà thay thế dòng đó bằng gốc tài liệu mới. Điều này cho phép sử dụng kiến ​​trúc thư mục trang web theo phong cách Debian.

5.Chuyển tune_apache.confvà include_sites_enabled.confcho lính của bạn.

...

/etc/httpd/conf.d/tune_apache.conf:
  file.managed:
    - source: salt://files/tune_apache.conf
    - require:
      - pkg: httpd

/etc/httpd/conf.d/include_sites_enabled.conf:
  file.managed:
    - source: salt://files/include_sites_enabled.conf
    - require:
      - pkg: httpd

...

6.Tạo các thư mục cần thiết:

...

/etc/httpd/sites-available:
  file.directory

/etc/httpd/sites-enabled:
  file.directory

/var/www/html/{{ pillar['domain'] }}:
  file.directory

/var/www/html/{{ pillar['domain'] }}/backups:
  file.directory

/var/www/html/{{ pillar['domain'] }}/public_html:
  file.directory

...

7.Tạo tệp cấu hình máy chủ ảo cho trang web của bạn:

...

/etc/httpd/sites-available/{{ pillar['domain'] }}.conf:
  apache.configfile:
    - config:
      - VirtualHost:
          this: '*:80'
          ServerName:
            - {{ pillar['domain'] }}
          ServerAlias:
            - www.{{ pillar['domain'] }}
          DocumentRoot: /var/www/html/{{ pillar['domain'] }}/public_html
  file.symlink:
    - target: /etc/httpd/sites-enabled/{{ pillar['domain'] }}.conf
    - force: True

...

Bước này sử dụng mô-đun apache của Salt để tạo tệp cấu hình máy chủ ảo của trang web của bạn. thisBiến này biểu thị những gì theo truyền thống sẽ được bao gồm VirtualHosttrong dấu ngoặc nhọn trong tệp cấu hình Apache: <VirtualHost *:80>.

8.Chuyển index.htmltập tin trang web của bạn tới minion của bạn:

...

/var/www/html/{{ pillar['domain'] }}/public_html/index.html:
  file.managed:
    - source: salt://{{ pillar['domain'] }}/index.html

...

Bất kỳ thay đổi nào được thực hiện với index.htmltệp trên máy chủ Salt của bạn sẽ được truyền đến máy chủ minion của bạn.

9.Cấu hình tường lửa của bạn để cho phép lưu lượng truy cập http và https:

...

Configure Firewall:
  firewalld.present:
    - name: public
    - ports:
      - 22/tcp
      - 80/tcp
      - 443/tcp

Ghi chú: Bạn phải liệt kê tất cả các cổng cần mở cho máy của mình trong phần này. Nếu không liệt kê các cổng này, Salt sẽ đóng chúng.

Hồ sơ hoàn chỉnh State File

Tệp tin đầy đủ apache-centos.slstrông như thế này:

httpd:
  pkg.installed

httpd Service:
  service.running:
    - name: httpd
    - enable: True
    - require:
      - pkg: httpd
    - watch:
      - file: /etc/httpd/sites-available/{{ pillar['domain'] }}.conf

Turn off KeepAlive:
  file.replace:
    - name: /etc/httpd/conf/httpd.conf
    - pattern: 'KeepAlive On'
    - repl: 'KeepAlive Off'
    - show_changes: True
    - require:
      - pkg: httpd

Change DocumentRoot:
  file.replace:
    - name: /etc/httpd/conf/httpd.conf
    - pattern: 'DocumentRoot "/var/www/html"'
    - repl: 'DocumentRoot "/var/www/html/{{ pillar['domain'] }}/public_html"'
    - show_changes: True
    - require:
      - pkg: httpd

/etc/httpd/conf.d/tune_apache.conf:
  file.managed:
    - source: salt://files/tune_apache.conf
    - require:
      - pkg: httpd

/etc/httpd/conf.d/include_sites_enabled.conf:
  file.managed:
    - source: salt://files/include_sites_enabled.conf
    - require:
      - pkg: httpd

/etc/httpd/sites-available:
  file.directory

/etc/httpd/sites-enabled:
  file.directory

/var/www/html/{{ pillar['domain'] }}:
  file.directory

/var/www/html/{{ pillar['domain'] }}/backups:
  file.directory

/var/www/html/{{ pillar['domain'] }}/public_html:
  file.directory

/etc/httpd/sites-available/{{ pillar['domain'] }}.conf:
  apache.configfile:
    - config:
      - VirtualHost:
          this: '*:80'
          ServerName:
            - {{ pillar['domain'] }}
          ServerAlias:
            - www.{{ pillar['domain'] }}
          DocumentRoot: /var/www/html/{{ pillar['domain'] }}/public_html
  file.symlink:
    - target: /etc/httpd/sites-enabled/{{ pillar['domain'] }}.conf
    - force: True

/var/www/html/{{ pillar['domain'] }}/public_html/index.html:
  file.managed:
    - source: salt://{{ pillar['domain'] }}/index.html

Configure Firewall:
  firewalld.present:
    - name: public
    - ports:
      - 22/tcp
      - 80/tcp
      - 443/tcp

Chạy Tệp Trạng thái Apache

Trên Salt master của bạn, hãy đưa ra lệnh highstate:

salt '*' state.apply

Sau một vài phút, bạn sẽ thấy danh sách các lệnh Salt và tóm tắt về thành công của chúng. Điều hướng đến tên miền của trang web nếu bạn đã thiết lập DNS hoặc địa chỉ IP công khai của trang web. Bạn sẽ thấy index.htmltệp của mình. Bây giờ bạn đã sử dụng Salt để cấu hình Apache. Truy cập các liên kết trong phần bên dưới để biết thêm thông tin.

Thông tin thêm

Bạn có thể muốn tham khảo các nguồn sau để biết thêm thông tin về chủ đề này. Mặc dù chúng tôi cung cấp với hy vọng rằng chúng sẽ hữu ích, nhưng xin lưu ý rằng chúng tôi không thể đảm bảo tính chính xác hoặc tính kịp thời của các tài liệu được lưu trữ bên ngoài.

Nguồn: https://www.linode.com/docs/guides/configure-apache-with-salt-stack/