2013-08-06 4 views
9

Я пытаюсь использовать пользовательский слой в AWS Opsworks, чтобы добавить веб-сервер nginx.AWS Opsworks Custom Layer Deployment

Я успешно создал слой, я добавил приложение через GIT (без пароля на репо), но когда я развертываю команду, это «успешно», но я не вижу никакого кода на своем сервере.

В пользовательском слое единственным разворачивающимся рецептом является «deploy :: default».

Нужен ли мне рецепт для обработки развертывания?

Также, как мне настроить «где» развертывание? Я предпочел бы выбрать свой корневой каталог, а не использовать то, в каком месте Opsworks, похоже, всегда развертывается.

Спасибо за ЛЮБОЮ помощь в этом.

ответ

1

Да, вам нужно будет написать собственный рецепт развертывания для настраиваемого слоя. В вашем рецепте развертывания можно настроить место развертывания и любые шаги, необходимые для развертывания вашего программного обеспечения. В качестве альтернативы вы можете расширить уровень статического веб-сервера OpsWorks, который развертывает Nginx для удовлетворения ваших потребностей.

13

Я написал простой рецепт, который использует рецепт Opsworks nginx для развертывания приложения полностью автоматически. Он проверяет ваш сконфигурированный SCM, создает новый nginx-vhost и перезагружает nginx, если это необходимо.

Добавить рецепт в конфигурацию развертывания в слое:

deploy.rb

include_recipe "deploy" 
include_recipe "php5" 

node[:deploy].each do |application, deploy| 

    Chef::Log.info("Deploying application #{application} on #{node[:opsworks][:instance][:hostname]}") 

    if deploy[:application_type] != 'php' 
    Chef::Log.warn("Skipping deploy::web application #{application} as it is not a PHP app") 
    next 
    end 

    opsworks_deploy_dir do 
    user deploy[:user] 
    group deploy[:group] 
    path deploy[:deploy_to] 
    end 

    opsworks_deploy do 
    app application 
    deploy_data deploy 
    end 

    nginx_web_app application do 
    application deploy 
    end 

    Chef::Log.info("Running composer update on #{deploy[:deploy_to]}") 
    composer_update do 
    path deploy[:deploy_to]} 
    end 
end 

Чтобы перезаписать шаблон Nginx виртуального хоста, просто создать новую поваренную книгу под названием nginx и добавить файл site.erb в templates/default. Затем Opsworks автоматически использует этот шаблон.

Мой site.erb выглядит следующим образом

server { 
    listen 80; 
    server_name <%= @application[:domains].join(" ") %> <%= node[:hostname] %>; 
    access_log <%= node[:nginx][:log_dir] %>/<%= @application[:domains].first %>.access.log; 

    root <%= @application[:absolute_document_root] %>; 

    location/{ 
    try_files $uri /index.php?url=$uri&$args; 
    } 

    location ~ \.php { 
     try_files $uri =404; 

     fastcgi_split_path_info ^(.+\.php)(/.+)$; 
     fastcgi_pass 127.0.0.1:9000; 
     fastcgi_index index.php; 
     fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; 

     include fastcgi_params; 
    } 

    # Block all svn access 
    if ($request_uri ~* ^.*\.svn.*$) { 
    return 404; 
    } 

    # Block all git access 
    if ($request_uri ~* ^.*\.git.*$) { 
    return 404; 
    } 

    location /nginx_status { 
    stub_status on; 
    access_log off; 
    allow 127.0.0.1; 
    deny all; 
    } 

} 

<% if @application[:ssl_support] %> 
server { 
    listen 443; 
    server_name <%= @application[:domains].join(" ") %> <%= node[:hostname] %>; 
    access_log <%= node[:nginx][:log_dir] %>/<%= @application[:domains].first %>-ssl.access.log; 

    ssl on; 
    ssl_certificate <%= node[:nginx][:dir] %>/ssl/<%= @application[:domains].first %>.crt; 
    ssl_certificate_key <%= node[:nginx][:dir] %>/ssl/<%= @application[:domains].first %>.key; 
    <% if @application[:ssl_certificate_ca] -%> 
    ssl_client_certificate <%= node[:nginx][:dir] %>/ssl/<%= @application[:domains].first %>.ca; 
    <% end -%> 

    location/{ 
    try_files $uri /index.php?url=$uri&$args; 
    } 

    location ~ \.php { 
     try_files $uri =404; 

     fastcgi_split_path_info ^(.+\.php)(/.+)$; 
     fastcgi_pass 127.0.0.1:9000; 
     fastcgi_index index.php; 
     fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; 

     include fastcgi_params; 
    } 

    # Block all svn access 
    if ($request_uri ~* ^.*\.svn.*$) { 
    return 404; 
    } 

    # Block all git access 
    if ($request_uri ~* ^.*\.git.*$) { 
    return 404; 
    } 
} 
<% end %> 

Мой Berksfile (для композитора)

source "https://supermarket.getchef.com" 

cookbook 'composer', '~> 1.0.4' 

Мой metadata.rb в поваренной книге для развертывания AppServer :: развернуть рецепт

name    'appserver' 
maintainer  'Michel Feldheim' 
description  'Setting up the appserver environment' 
long_description IO.read(File.join(File.dirname(__FILE__), 'README.md')) 
version   '0.1.0' 

depends   "nginx" 
depends   "php5" 
+6

Это действительно отстой, когда вы отвечаете на вопрос очень подробно, но ваш ответ не принят, и вы просто не сказали «спасибо». Ну .. Спасибо за других пользователей SOF. – scaryguy