2013-08-06 3 views
9

Ich versuche, einen benutzerdefinierten Layer in AWS Opsworks zu verwenden, um einen Nginx-Webserver hinzuzufügen.AWS Opsworks benutzerdefinierte Layerbereitstellung

Ich habe erfolgreich den Layer erstellt, ich habe meine App über GIT (kein Passwort auf Repo) hinzugefügt, aber wenn ich den Befehl bereitstellen ist "erfolgreich", aber ich sehe keinen Code auf meinem Server.

In der benutzerdefinierten Schicht ist das einzige Bereitstellungsrezept "deploy :: default".

Benötige ich ein benutzerdefiniertes Rezept für die Bereitstellung?

Auch, wie konfiguriere ich "wo" die Bereitstellung geht? Ich würde es vorziehen, mein Dokumentenstammverzeichnis zu wählen, anstatt den Speicherort zu verwenden, an dem Opsworks sonst immer zu implementieren scheint.

Danke für jede Hilfe zu diesem Thema.

Antwort

1

Ja, Sie müssen Ihr eigenes benutzerdefiniertes Bereitstellungsrezept für eine benutzerdefinierte Ebene schreiben. Ihr Bereitstellungsrezept kann konfigurieren, wo die Bereitstellung stattfindet und welche Schritte für die Bereitstellung Ihrer Software erforderlich sind. Alternativ können Sie die statische WebServer-Ebene von OpsWorks, auf der Nginx implementiert ist, auf Ihre Anforderungen erweitern.

13

Ich habe ein einfaches Rezept geschrieben, das das Opsworks nginx-Rezept verwendet, um die App vollautomatisch zu implementieren. Es checkt von Ihrem konfigurierten SCM aus, erstellt einen neuen nginx vhost und lädt nginx bei Bedarf neu.

Dieses Rezept an die deploy config in der Schicht:

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 

die nginx vHost Vorlage zu überschreiben, erstellen Sie einfach ein neues Kochbuch nginx genannt und eine Datei hinzufügen site.erb in templates/default. Opsworks wird diese Vorlage dann automatisch verwenden.

Meine site.erb sieht aus wie dieses

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

Mein Berksfile (Komponist)

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

cookbook 'composer', '~> 1.0.4' 

Mein metadata.rb im Kochbuch für die deploy appserver :: deploy Rezept

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

Es ist wirklich nervig, wenn Sie eine Frage sehr detailliert beantworten, aber Ihre Antwort wird weder akzeptiert noch Sie werden einfach nur "Danke" gesagt. Nun .. Danke im Namen anderer SOF-Nutzer. – scaryguy