Resep Pengaturan - AWS OpsWorks

Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.

Resep Pengaturan

penting

AWS OpsWorks Stacks Layanan ini mencapai akhir masa pakai pada 26 Mei 2024 dan telah dinonaktifkan untuk pelanggan baru dan yang sudah ada. Kami sangat menyarankan pelanggan untuk memindahkan beban kerja mereka ke solusi lain sesegera mungkin. Jika Anda memiliki pertanyaan tentang migrasi, hubungi AWS Support Tim di AWS re:Post atau melalui AWS Dukungan Premium.

Resep penyiapan ditetapkan ke acara siklus hidup Pengaturan lapisan dan dijalankan setelah instance boot. Mereka melakukan tugas-tugas seperti menginstal paket, membuat file konfigurasi, dan memulai layanan. Setelah resep Pengaturan selesai berjalan, AWS OpsWorks Stacks menjalankan resep Deploy untuk menerapkan aplikasi apa pun ke instance baru.

tomcat: :pengaturan

tomcat::setupResep ini dimaksudkan untuk ditetapkan ke acara siklus hidup Pengaturan lapisan.

include_recipe 'tomcat::install' include_recipe 'tomcat::service' service 'tomcat' do action :enable end # for EBS-backed instances we rely on autofs bash '(re-)start autofs earlier' do user 'root' code <<-EOC service autofs restart EOC notifies :restart, resources(:service => 'tomcat') end include_recipe 'tomcat::container_config' include_recipe 'apache2' include_recipe 'tomcat::apache_tomcat_bind'

tomcat::setupresep sebagian besar merupakan metarecipe. Ini termasuk satu set resep dependen yang menangani sebagian besar rincian menginstal dan mengkonfigurasi Tomcat dan paket terkait. Bagian pertama tomcat::setup menjalankan resep berikut, yang dibahas nanti:

Bagian tengah tomcat::setup mengaktifkan dan memulai layanan Tomcat:

  • Sumber daya layanan Chef memungkinkan layanan Tomcat saat boot.

  • Sumber daya Chef bash menjalankan skrip Bash untuk memulai daemon otomatis, yang diperlukan untuk instance yang didukung Amazon EBS. Sumber daya kemudian memberi tahu service sumber daya untuk memulai ulang layanan Tomcat.

    Untuk informasi selengkapnya, lihat: autofs (untuk Amazon Linux) atau Autofs (untuk Ubuntu).

Bagian terakhir dari tomcat::setup membuat file konfigurasi dan menginstal dan mengkonfigurasi server Apache front-end:

  • kucing jantan: :container_configResep membuat file konfigurasi.

  • apache2Resep (yang merupakan singkatan dariapache2::default) adalah resep bawaan AWS OpsWorks Stacks yang menginstal dan mengonfigurasi server Apache.

  • kucing jantan: :apache_tomcat_bindResep mengkonfigurasi server Apache untuk berfungsi sebagai front-end untuk server Tomcat.

catatan

Anda sering dapat menghemat waktu dan tenaga dengan menggunakan resep bawaan untuk melakukan beberapa tugas yang diperlukan. Resep ini menggunakan apache2::default resep bawaan untuk menginstal Apache daripada menerapkannya dari awal. Untuk contoh lain tentang cara menggunakan resep bawaan, lihatMenyebarkan Resep.

Bagian berikut menjelaskan resep Pengaturan buku masak Tomcat secara lebih rinci. Untuk informasi lebih lanjut tentang apache2 resep, lihat opsworks-cookbooks/apache2.

tomcat: :instal

tomcat::install Resep menginstal server Tomcat, OpenJDK, dan pustaka konektor Java yang menangani koneksi ke server MySQL.

tomcat_pkgs = value_for_platform( ['debian', 'ubuntu'] => { 'default' => ["tomcat#{node['tomcat']['base_version']}", 'libtcnative-1', 'libmysql-java'] }, ['centos', 'redhat', 'fedora', 'amazon'] => { 'default' => ["tomcat#{node['tomcat']['base_version']}", 'tomcat-native', 'mysql-connector-java'] }, 'default' => ["tomcat#{node['tomcat']['base_version']}"] ) tomcat_pkgs.each do |pkg| package pkg do action :install end end link ::File.join(node['tomcat']['lib_dir'], node['tomcat']['mysql_connector_jar']) do to ::File.join(node['tomcat']['java_dir'], node['tomcat']['mysql_connector_jar']) action :create end # remove the ROOT webapp, if it got installed by default include_recipe 'tomcat::remove_root_webapp'

Resep melakukan tugas-tugas berikut:

  1. Membuat daftar paket yang akan diinstal, tergantung pada sistem operasi instans.

  2. Menginstal setiap paket dalam daftar.

    Sumber daya paket Chef menggunakan penyedia yang sesuai — yum untuk Amazon Linux dan apt-get untuk Ubuntu — untuk menangani instalasi. Penyedia paket menginstal OpenJDK sebagai ketergantungan Tomcat, tetapi pustaka konektor MySQL harus diinstal secara eksplisit.

  3. Menggunakan sumber daya tautan Chef untuk membuat symlink di direktori lib server Tomcat ke pustaka konektor MySQL di JDK.

    Menggunakan nilai atribut default, direktori lib Tomcat /usr/share/tomcat6/lib dan pustaka konektor MySQL () ada di. mysql-connector-java.jar /usr/share/java/

tomcat::remove_root_webappResep menghapus aplikasi web ROOT (secara /var/lib/tomcat6/webapps/ROOT default) untuk menghindari beberapa masalah keamanan.

ruby_block 'remove the ROOT webapp' do block do ::FileUtils.rm_rf(::File.join(node['tomcat']['webapps_base_dir'], 'ROOT'), :secure => true) end only_if { ::File.exists?(::File.join(node['tomcat']['webapps_base_dir'], 'ROOT')) && !::File.symlink?(::File.join(node['tomcat']['webapps_base_dir'], 'ROOT')) } end

only_ifPernyataan memastikan bahwa resep menghapus file hanya jika ada.

catatan

Versi Tomcat ditentukan oleh ['tomcat']['base_version'] atribut, yang diatur ke 6 dalam file atribut. Untuk menginstal Tomcat 7, Anda dapat menggunakan atribut JSON khusus untuk mengganti atribut. Cukup edit pengaturan tumpukan Anda dan masukkan JSON berikut di kotak Custom Chef JSON, atau tambahkan ke JSON kustom yang ada:

{ 'tomcat' : { 'base_version' : 7 } }

Atribut JSON kustom mengganti atribut default dan menetapkan versi Tomcat ke 7. Untuk informasi selengkapnya tentang atribut utama, lihatMengesampingkan Atribut.

kucing jantan: :layanan

tomcat::serviceResepnya menciptakan definisi layanan Tomcat.

service 'tomcat' do service_name "tomcat#{node['tomcat']['base_version']}" case node[:platform] when 'centos', 'redhat', 'fedora', 'amazon' supports :restart => true, :reload => true, :status => true when 'debian', 'ubuntu' supports :restart => true, :reload => false, :status => true end action :nothing end

Resep menggunakan sumber daya layanan Chef untuk menentukan nama layanan Tomcat (tomcat6, secara default) dan menetapkan supports atribut untuk menentukan bagaimana Chef mengelola perintah restart, reload, dan status layanan pada sistem operasi yang berbeda.

  • truemenunjukkan bahwa Chef dapat menggunakan skrip init atau penyedia layanan lain untuk menjalankan perintah

  • falsemenunjukkan bahwa Chef harus mencoba menjalankan perintah dengan cara lain.

Perhatikan bahwa action diatur ke:nothing. Untuk setiap peristiwa siklus hidup, AWS OpsWorks Stacks memulai proses Chef untuk mengeksekusi set resep yang sesuai. Buku masak Tomcat mengikuti pola umum memiliki resep yang membuat definisi layanan, tetapi tidak memulai ulang layanan. Resep lain di Chef run menangani restart, biasanya dengan memasukkan notifies perintah dalam template sumber daya yang digunakan untuk membuat file konfigurasi. Pemberitahuan adalah cara mudah untuk memulai ulang layanan karena mereka melakukannya hanya jika konfigurasi telah berubah. Selain itu, jika Chef run memiliki beberapa notifikasi restart untuk suatu layanan, Chef memulai ulang layanan paling banyak sekali. Praktik ini menghindari masalah yang dapat terjadi ketika mencoba memulai kembali layanan yang tidak sepenuhnya beroperasi, yang merupakan sumber umum kesalahan Tomcat.

Layanan Tomcat harus ditentukan untuk setiap Chef run yang menggunakan notifikasi restart. tomcat::serviceOleh karena itu termasuk dalam beberapa resep, untuk memastikan bahwa layanan ditentukan untuk setiap Chef menjalankan. Tidak ada penalti jika Chef run menyertakan beberapa contoh tomcat::service karena Chef memastikan bahwa resep dijalankan hanya sekali per run, terlepas dari berapa kali itu disertakan.

kucing jantan: :container_config

tomcat::container_configResep membuat file konfigurasi dari file template buku masak.

include_recipe 'tomcat::service' template 'tomcat environment configuration' do path ::File.join(node['tomcat']['system_env_dir'], "tomcat#{node['tomcat']['base_version']}") source 'tomcat_env_config.erb' owner 'root' group 'root' mode 0644 backup false notifies :restart, resources(:service => 'tomcat') end template 'tomcat server configuration' do path ::File.join(node['tomcat']['catalina_base_dir'], 'server.xml') source 'server.xml.erb' owner 'root' group 'root' mode 0644 backup false notifies :restart, resources(:service => 'tomcat') end

Resep panggilan pertamatomcat::service, yang mendefinisikan layanan jika perlu. Sebagian besar resep terdiri dari dua sumber template, yang masing-masing membuat file konfigurasi dari salah satu file template buku masak, menetapkan properti file, dan memberi tahu Chef untuk memulai ulang layanan.

File Konfigurasi Lingkungan Tomcat

templateSumber daya pertama menggunakan file tomcat_env_config.erb template untuk membuat file konfigurasi lingkungan Tomcat, yang digunakan untuk mengatur variabel lingkungan sepertiJAVA_HOME. Nama file default adalah argumen template sumber daya. tomcat::container_configmenggunakan path atribut untuk mengganti nilai default dan memberi nama file konfigurasi /etc/sysconfig/tomcat6 (Amazon Linux) atau /etc/default/tomcat6 (Ubuntu). templateSumber daya juga menentukan pemilik file, grup, dan pengaturan mode dan mengarahkan Chef untuk tidak membuat file cadangan.

Jika Anda melihat kode sumber, sebenarnya ada tiga versitomcat_env_config.erb, masing-masing dalam subdirektori yang berbeda dari templates direktori. amazonDirektori ubuntu dan berisi template untuk sistem operasi masing-masing. defaultFolder berisi template dummy dengan satu baris komentar, yang hanya digunakan jika Anda mencoba menjalankan resep ini pada instance dengan sistem operasi yang tidak didukung. tomcat::container_configResepnya tidak perlu menentukan mana yang tomcat_env_config.erb akan digunakan. Chef secara otomatis memilih direktori yang sesuai untuk sistem operasi instans berdasarkan aturan yang dijelaskan dalam Kekhususan File.

tomcat_env_config.erbFile untuk contoh ini sebagian besar terdiri dari komentar. Untuk mengatur variabel lingkungan tambahan, hapus komentar pada baris yang sesuai dan berikan nilai pilihan Anda.

catatan

Pengaturan konfigurasi apa pun yang mungkin berubah harus didefinisikan sebagai atribut daripada di-hardcode dalam template. Dengan begitu, Anda tidak perlu menulis ulang template untuk mengubah pengaturan, Anda bisa mengganti atributnya.

Template Amazon Linux hanya menetapkan satu variabel lingkungan, seperti yang ditunjukkan dalam kutipan berikut.

... # Use JAVA_OPTS to set java.library.path for libtcnative.so #JAVA_OPTS="-Djava.library.path=/usr/lib" JAVA_OPTS="${JAVA_OPTS} <%= node['tomcat']['java_opts'] %>" # What user should run tomcat #TOMCAT_USER="tomcat" ...

JAVA_OPTS dapat digunakan untuk menentukan opsi Java seperti jalur perpustakaan. Menggunakan nilai atribut default, template tidak menetapkan opsi Java untuk Amazon Linux. Anda dapat mengatur opsi Java Anda sendiri dengan mengganti ['tomcat']['java_opts'] atribut, misalnya, dengan menggunakan atribut JSON kustom. Sebagai contoh, lihat Buat Stack.

Template Ubuntu menetapkan beberapa variabel lingkungan, seperti yang ditunjukkan dalam kutipan template berikut.

# Run Tomcat as this user ID. Not setting this or leaving it blank will use the # default of tomcat<%= node['tomcat']['base_version'] %>. TOMCAT<%= node['tomcat']['base_version'] %>_USER=tomcat<%= node['tomcat']['base_version'] %> ... # Run Tomcat as this group ID. Not setting this or leaving it blank will use # the default of tomcat<%= node['tomcat']['base_version'] %>. TOMCAT<%= node['tomcat']['base_version'] %>_GROUP=tomcat<%= node['tomcat']['base_version'] %> ... JAVA_OPTS="<%= node['tomcat']['java_opts'] %>" <% if node['tomcat']['base_version'].to_i < 7 -%> # Unset LC_ALL to prevent user environment executing the init script from # influencing servlet behavior. See Debian bug #645221 unset LC_ALL <% end -%>

Menggunakan nilai atribut default, template menetapkan variabel lingkungan Ubuntu sebagai berikut:

  • TOMCAT6_USERdanTOMCAT6_GROUP, yang mewakili pengguna dan grup Tomcat, keduanya disetel ketomcat6.

    Jika Anda menyetel ['tomcat'] ['base_version'] ketomcat7, nama variabel diselesaikan ke TOMCAT7_USER danTOMCAT7_GROUP, dan keduanya disetel ke. tomcat7

  • JAVA_OPTSdiatur ke-Djava.awt.headless=true -Xmx128m -XX:+UseConcMarkSweepGC:

    • Pengaturan -Djava.awt.headless untuk true menginformasikan mesin grafis bahwa instance tanpa kepala dan tidak memiliki konsol, yang membahas perilaku yang salah dari aplikasi grafis tertentu.

    • -Xmx128mmemastikan bahwa JVM memiliki sumber daya memori yang memadai, 128MB untuk contoh ini.

    • -XX:+UseConcMarkSweepGCmenentukan pengumpulan sampah sapuan tanda bersamaan, yang membantu membatasi jeda yang disebabkan oleh pengumpulan sampah.

      Untuk informasi lebih lanjut, lihat: Penyempurnaan Kolektor Sapu Tanda Bersamaan.

  • Jika versi Tomcat kurang dari 7, template tidak disetelLC_ALL, yang membahas bug Ubuntu.

catatan

Dengan atribut default, beberapa variabel lingkungan ini hanya diatur ke nilai default mereka. Namun, secara eksplisit menyetel variabel lingkungan ke atribut berarti Anda dapat menentukan atribut JSON khusus untuk mengganti atribut default dan memberikan nilai khusus. Untuk informasi selengkapnya tentang atribut utama, lihatMengesampingkan Atribut.

Untuk file template lengkap, lihat kode sumber.

File Konfigurasi Server.xml

templateSumber daya kedua digunakan server.xml.erb untuk membuat file system.xml konfigurasi, yang mengkonfigurasi kontainer Servlet/JSP. server.xml.erbtidak berisi pengaturan khusus sistem operasi, sehingga ada di subdirektori template direktori. default

Template menggunakan pengaturan standar, tetapi dapat membuat system.xml file untuk Tomcat 6 atau Tomcat 7. Misalnya, kode berikut dari bagian server template mengonfigurasi pendengar dengan tepat untuk versi yang ditentukan.

<% if node['tomcat']['base_version'].to_i > 6 -%> <!-- Security listener. Documentation at /docs/config/listeners.html <Listener className="org.apache.catalina.security.SecurityListener" /> --> <% end -%> <!--APR library loader. Documentation at /docs/apr.html --> <Listener className="org.apache.catalina.core.AprLifecycleListener" SSLEngine="on" /> <!--Initialize Jasper prior to webapps are loaded. Documentation at /docs/jasper-howto.html --> <Listener className="org.apache.catalina.core.JasperListener" /> <!-- Prevent memory leaks due to use of particular java/javax APIs--> <Listener className="org.apache.catalina.core.JreMemoryLeakPreventionListener" /> <% if node['tomcat']['base_version'].to_i < 7 -%> <!-- JMX Support for the Tomcat server. Documentation at /docs/non-existent.html --> <Listener className="org.apache.catalina.mbeans.ServerLifecycleListener" /> <% end -%> <Listener className="org.apache.catalina.mbeans.GlobalResourcesLifecycleListener" /> <% if node['tomcat']['base_version'].to_i > 6 -%> <Listener className="org.apache.catalina.core.ThreadLocalLeakPreventionListener" /> <% end -%>

Template menggunakan atribut sebagai pengganti pengaturan hardcode sehingga Anda dapat dengan mudah mengubah pengaturan dengan mendefinisikan atribut JSON kustom. Sebagai contoh:

<Connector port="<%= node['tomcat']['port'] %>" protocol="HTTP/1.1" connectionTimeout="20000" URIEncoding="<%= node['tomcat']['uri_encoding'] %>" redirectPort="<%= node['tomcat']['secure_port'] %>" />

Untuk informasi selengkapnya, lihat kode sumber.

kucing jantan: :apache_tomcat_bind

tomcat::apache_tomcat_bindResepnya memungkinkan server Apache untuk bertindak sebagai front end Tomcat, menerima permintaan masuk dan meneruskannya ke Tomcat dan mengembalikan tanggapan ke klien. Contoh ini menggunakan mod_proxy sebagai proxy/gateway Apache.

execute 'enable mod_proxy for apache-tomcat binding' do command '/usr/sbin/a2enmod proxy' not_if do ::File.symlink?(::File.join(node['apache']['dir'], 'mods-enabled', 'proxy.load')) || node['tomcat']['apache_tomcat_bind_mod'] !~ /\Aproxy/ end end execute 'enable module for apache-tomcat binding' do command "/usr/sbin/a2enmod #{node['tomcat']['apache_tomcat_bind_mod']}" not_if {::File.symlink?(::File.join(node['apache']['dir'], 'mods-enabled', "#{node['tomcat']['apache_tomcat_bind_mod']}.load"))} end include_recipe 'apache2::service' template 'tomcat thru apache binding' do path ::File.join(node['apache']['dir'], 'conf.d', node['tomcat']['apache_tomcat_bind_config']) source 'apache_tomcat_bind.conf.erb' owner 'root' group 'root' mode 0644 backup false notifies :restart, resources(:service => 'apache2') end

Untuk mengaktifkanmod_proxy, Anda harus mengaktifkan proxy modul dan modul berbasis protokol. Anda memiliki dua opsi untuk modul protokol:

Kedua sumber daya eksekusi resep menjalankan a2enmod perintah, yang memungkinkan modul yang ditentukan dengan membuat symlink yang diperlukan:

  • executeSumber daya pertama memungkinkan proxy modul.

  • executeSumber daya kedua memungkinkan modul protokol, yang diatur ke secara proxy_http default.

    Jika Anda lebih suka menggunakan AJP, Anda dapat menentukan JSON khusus untuk mengganti apache_tomcat_bind_mod atribut dan mengaturnya ke. proxy_ajp

apache2::serviceResepnya adalah resep bawaan AWS OpsWorks Stacks yang mendefinisikan layanan Apache. Untuk informasi lebih lanjut, lihat resep di GitHub repositori AWS OpsWorks Stacks.

Sumber template daya digunakan apache_tomcat_bind.conf.erb untuk membuat file konfigurasi, dinamai secara tomcat_bind.conf default. Ini menempatkan file di ['apache']['dir']/.conf.d direktori. ['apache']['dir']Atribut didefinisikan dalam file apache2 atribut bawaan, dan diatur secara default ke /etc/httpd (Amazon Linux), atau /etc/apache2 (Ubuntu). Jika template sumber daya membuat atau mengubah file konfigurasi, notifies perintah menjadwalkan restart layanan Apache.

<% if node['tomcat']['apache_tomcat_bind_mod'] == 'proxy_ajp' -%> ProxyPass <%= node['tomcat']['apache_tomcat_bind_path'] %> ajp://localhost:<%= node['tomcat']['ajp_port'] %>/ ProxyPassReverse <%= node['tomcat']['apache_tomcat_bind_path'] %> ajp://localhost:<%= node['tomcat']['ajp_port'] %>/ <% else %> ProxyPass <%= node['tomcat']['apache_tomcat_bind_path'] %> http://localhost:<%= node['tomcat']['port'] %>/ ProxyPassReverse <%= node['tomcat']['apache_tomcat_bind_path'] %> http://localhost:<%= node['tomcat']['port'] %>/ <% end -%>

Template menggunakan ProxyPassReversearahan ProxyPassdan untuk mengkonfigurasi port yang digunakan untuk melewati lalu lintas antara Apache dan Tomcat. Karena kedua server berada pada instance yang sama, mereka dapat menggunakan URL localhost dan keduanya disetel secara default ke. http://localhost:8080