2013-08-06 20 views
9

Próbuję użyć niestandardowej warstwy w AWS Opsworks, aby dodać serwer WWW nginx.AWS Opsworks Custom Layer Deployment

Udało mi się utworzyć warstwę, dodałem moją aplikację przez GIT (bez hasła na repozytorium), ale kiedy wdrażam polecenie jest "udane", ale nie widzę żadnego z mojego kodu na moim serwerze.

W warstwie niestandardowej jedynym wdrożeniem jest "wdrażanie :: domyślny".

Czy potrzebuję niestandardowego przepisu do obsługi wdrożenia?

Co więcej, jak skonfigurować "miejsce", w którym działa wdrożenie? Wolałbym wybrać mój katalog główny dokumentu zamiast używać tej lokalizacji, w której inaczej wydaje się zawsze Opsworks.

Dzięki za JAKĄ pomoc w tej sprawie.

Odpowiedz

1

Tak, musisz napisać własny, niestandardowy formularz wdrażania dla warstwy niestandardowej. Twój wdrożony przepis może skonfigurować miejsce wykonania wdrożenia i wszelkie kroki wymagane do wdrożenia oprogramowania. Alternatywnie można rozszerzyć warstwę statycznego serwera WWW OpsWorks, która wdraża Nginx, aby spełnić Twoje potrzeby.

13

Napisałem prosty przepis, który używa receptury Opsworks nginx, aby wdrożyć aplikację w pełni automatycznie. Sprawdza się od skonfigurowanego SCM, tworzy nowy serwer nginx i w razie potrzeby ponownie ładuje nginx.

Dodaj przepis config rozmieszczenia w warstwie:

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 

nadpisać szablon nginx vhost, wystarczy utworzyć nową książkę kucharską o nazwie nginx i dodać plik site.erb w templates/default. Opsworks automatycznie skorzysta z tego szablonu.

Moja site.erb wygląda to

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 %> 

My Berksfile (dla kompozytora)

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

cookbook 'composer', '~> 1.0.4' 

Moje metadata.rb w książce kucharskiej dla Rozmieszczanie appserver :: Deploy przepis

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

Naprawdę jest do bani, gdy bardzo szczegółowo odpowiadasz na pytanie, ale twoja odpowiedź nie jest akceptowana ani po prostu nie możesz powiedzieć "dziękuję". Cóż .. Dziękuję w imieniu innych użytkowników SOF. – scaryguy