配置Apache服务器并使用Puppet部署WordPress

时间:2020-03-21 11:42:54  来源:igfitidea点击:

我们将使用Puppet来安装Apache和WordPress。

本文是KVM,Katelo和Puppet系列测试环境项目的一部分。

测试环境

我们安装了两个要配置的CentOS 7服务器,如下所示:

web1.hl.local(10.11.1.21)–具有WordPress和NFS挂载的Apache服务器
web2.hl.local(10.11.1.22)–带有WordPress和NFS挂载的Apache服务器

SELinux设置为强制模式。

来自自定义tar包的WordPress

我们不会从Internet下载WordPress,而是会使用我们自己的自定义版本(压缩包)。
每个版本均受源代码控制并在发布到环境之前进行本地测试。

压缩包的名称是'wordpress-latest.tar.gz',当前存储在Katello服务器上的'/var/www/html/pub /'下。
这使我们能够从https://katello.hl.local/pub/wordpress-latest.tar.gz中提取存档。

请注意,文件“ wp-config.php”从不存储在压缩包中,而是由Puppet生成。

冗余Apache/MySQL架构

为了增加冗余,将每个Apache服务器配置为使用不同的MySQL数据库服务器。

由于我们的MySQL节点配置为使用主/主复制,因此从理论上讲,每个VM上存储的数据应该没有差异。

我们将web1.hl.local插入db1.hl.local,并将web2.hl.local插入db2.hl.local。

NFS挂载上载

两台Apache服务器都将需要配置为安装共享存储的NFS客户端。

尽管用户可以使用任何一台Apache服务器上传文件,但我们需要确保无论最终使用的虚拟机是什么,整个WordPress实例中的文件都是相同的。
我们可以使用rsync解决问题,但是我不确定扩展的程度。
也许将来有事情要看。

用Puppet配置

Puppet Master 在Katello服务器上运行。

Puppet模块

我们使用以下Puppet模块:

  • derdanne-nfs-为WordPress'/uploads'文件夹挂载NFS共享
  • puppetlabs-apache-安装和配置Apache
  • puppet-selinux-配置SELinux布尔值(例如

httpd_use_nfs)

  • hunner-wordpress-安装WordPress

请参阅每个模块的文档以获取支持的功能和可用的配置选项。

防火墙配置

配置两个Apache服务器以允许HTTPS通信:

firewall { '007 allow HTTPS':
  dport  => '443',
  source => '10.11.1.0/24',
  proto  => tcp,
  action => accept,
}

与纯文本HTTP相比,在HAProxy和Apache之间使用加密时,可能会产生微不足道的性能损失,但是我们要确保流量得到保护。
如果出现问题,可以将HAProxy重新配置为卸载TLS。

SELinux布尔值

在两台Apache服务器上配置SELinux。
为了允许Apache使用NFS并连接到远程MySQL实例,必须使用这些文件。
我们还希望允许Apache(WordPress)发送电子邮件通知。

selinux::boolean { 'httpd_use_nfs': 
  persistent => true, ensure => 'on' 
}->
selinux::boolean { 'httpd_can_network_connect_db': 
  persistent => true, ensure => 'on' 
}->
selinux::boolean { 'httpd_can_sendmail':
  persistent => true, ensure => 'on' 
}

配置NFS客户端

这需要同时应用于两个Apache服务器。

class { '::nfs':
  server_enabled => false,
  client_enabled => true,
}->
nfs::client::mount { '/var/www/html/wp-content/uploads':
  server => 'nfsvip.hl.local',
  share => '/nfsshare/uploads',
}

虚拟IP(运行NFS群集的虚拟IP)为10.11.1.31,DNS名称为nfsvip.hl.local。
集群配置为导出'/nfsshare'。
有关更多信息,请参见此处。

安装Apache

这需要同时应用于两个Apache服务器。

我们部署一台Apache虚拟主机,并将日志转发配置为Graylog(请参见custom_fragment部分)。
我撰写了另一篇文章,介绍如何将Apache日志发送到Graylog,如果需要更多信息,请在此处查看。

TLS证书由环境的主要Puppet列表处理。
有关更多信息,请参见此处。

package { 'php-mysql': 
  ensure => 'installed' 
}->
class { 'apache':
  default_vhost     => false,
  default_ssl_vhost => false,
  default_mods

=> false,
  mpm_module

=> 'prefork',
  server_signature  => 'Off',
  server_tokens     => 'Prod',
  trace_enable

=> 'Off',
  log_formats

=> { graylog_access => '{ \"version\": \"1.1\", \"host\": \"%V\", \"short_message\": \"%r\", \"timestamp\": %{%s}t, \"level\": 6, \"_user_agent\": \"%{User-Agent}i\", \"_source_ip\": \"%h\", \"_duration_usec\": %D, \"_duration_sec\": %T, \"_request_size_byte\": %O, \"_http_status_orig\": %s, \"_http_status\": %>s, \"_http_request_path\": \"%U\", \"_http_request\": \"%U%q\", \"_http_method\": \"%m\", \"_http_referer\": \"%{Referer}i\", \"_from_apache\": \"true\" }' },
}
include apache::mod::alias
include apache::mod::headers
include apache::mod::php
include apache::mod::rewrite
include apache::mod::ssl
::apache::mod { 'logio': }
## Configure VirtualHosts
apache::vhost { 'blog_https':
  port

=> 443,
  servername   => 'blog.hl.local',
  docroot

=> '/var/www/html',
  manage_docroot => false,
  options

=> ['FollowSymLinks','MultiViews'],
  override     => 'All',
  suphp_engine => 'off',
  ssl

=> true,
  ssl_cert     => '/etc/pki/tls/certs/hl.crt',
  ssl_key

=> '/etc/pki/tls/private/hl.key',
  ssl_protocol => ['all', '-SSLv2', '-SSLv3'],
  ssl_cipher   => 'HIGH:!aNULL!MD5:!RC4',
  ssl_honorcipherorder => 'On',
  redirectmatch_status => ['301'],
  redirectmatch_regexp => ['(.*)\.gz'],
  redirectmatch_dest   => ['/'],
  custom_fragment

=> 'CustomLog "|/usr/bin/nc -u syslog.hl.local 12201" graylog_access',
}

从我们的自定义tar包安装WordPress

我们要使用现有的MySQL配置,这意味着我们不希望WordPress创建任何数据库或者用户。

下面的细节是我们在设置MySQL服务器时使用的细节。

唯一不同的是db_host参数,一台Apache服务器使用db1.hl.local,另一台使用db2.hl.local。

class { 'wordpress':
  db_user

=> 'dbuser1',
  db_password    => 'PleaseChangeMe',
  db_name

=> 'blog',
  db_host

=> 'db1.hl.local',
  create_db

=> false,
  create_db_user => false,
  install_dir    => '/var/www/html',
  install_url    => 'http://katello.hl.local/pub',
  version

=> 'latest',
  wp_owner

=> 'apache',
  wp_group

=> 'root',
}

请注意我们如何将所有者设置为apache。
根据安全要求,我们可能希望进一步强化这一点。

如果一切顺利,我们最终应该使用NFS共享使用两台服务器:

[Hyman@theitroad ~]# df -h|egrep "File|uploads"
Filesystem

Size  Used Avail Use% Mounted on
nfsvip.hl.local:/nfsshare/uploads  2.0G   53M  1.9G   3% /var/www/html/wp-content/uploads
[Hyman@theitroad ~]# df -h|egrep "File|uploads"
Filesystem

Size  Used Avail Use% Mounted on
nfsvip.hl.local:/nfsshare/uploads  2.0G   53M  1.9G   3% /var/www/html/wp-content/uploads

我们还应该能够通过使用Apache数据来创建Graylog仪表板小部件。