我正在使用puppet通过打包程序预置AWS AMI,然后启动AMI。Puppet在烘焙AMI时执行所有配置和软件包安装,包括安装和配置apache和wsgi。当我启动 AMI 时,我的应用程序(一个 Flask 应用程序)已经由 Puppet 下载和配置,以及我的 apache 配置文件/etc/apache2/sites-available/xxxx.conf 。我使用 Puppet 模板来配置 apache 配置文件,因此它是一个 Ruby 模板 (xxxx.conf.erb),apache 配置模板文件如下所示:
<VirtualHost *:<%= @port -%>>
ServerName <%= @servername %>
ServerAdmin admin@example.com WSGIScriptAlias / /var/www/Porfolio/xxxxx.wsgi
<Directory /var/www/Porfolio/> Order allow,deny Allow from all </Directory> Alias /static /var/www/Porfolio/static <Directory /var/www/Porfolio/static/> Order allow,deny Allow from all </Directory>
ErrorLog ${APACHE_LOG_DIR}/error.log
LogLevel warn
CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>
我已经设置了变量服务器名称 = $::主机名(使用 facter)和端口 = 80当我启动 AMI 并访问 ec2 实例服务器的公有 IP 地址时,它会将我带到默认的 ubuntu 网页,而不是我的 Web Flask 应用程序。我将不得不 ssh 进入我的服务器并在/etc/apache2/sites-available/xxxx.conf 成为:
<VirtualHost *:<%= @port -%>>
ServerName 52.91.143.90
ServerAdmin admin@example.com
WSGIScriptAlias / /var/www/Porfolio/culturely.wsgi
<Directory /var/www/Porfolio/>
Order allow,deny
Allow from all
</Directory>
Alias /static /var/www/Porfolio/static
<Directory /var/www/Porfolio/static/>
Order allow,deny
Allow from all
</Directory>
ErrorLog ${APACHE_LOG_DIR}/error.log
LogLevel warn
CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>
这意味着我必须手动输入 ec2instance 的公有 IP 地址,以便在浏览器上访问公有 IP 地址时显示我的 Flask 网页。这当然违背了我试图达到的自动化水平。公共 IP 地址仅在我启动 AMI 后才可用,有没有办法重新配置我的 apache 配置文件以使其自动转到我的 Web 应用程序而不是默认的 ubuntu 网页?无需我通过 SSH 连接到服务器并在启动后手动更改它
事实ec2_public_ipv4
,用这个来设置地址
我已经找到了解决问题的方法。我在打包程序时使用 puppet 创建了一个新的 apache 配置文件,此时将分配给 ec2 实例的公有 IP 地址不可用。因此,我没有创建新的 apache 配置文件,而是在/etc/apache2/sites-available/000-default.conf 修改了默认文件。我留下了变量服务器名称 = $::fqdn .现在,每当我启动 AMI 并访问 ec2 实例的分配公有 IP 地址时,它都会导航到我的 Flask 应用程序,而不是默认的 ubuntu 网页。