AWS Chef ตอน 3 : สร้าง User และ apache site link

หลังจากที่่ติดตั้ง apache กันเสร็จแล้ว ก็ดูกันดีกว่าครับ ว่าเราจะสร้างพื้นที่ของ user และ site link ของ apache สำหรับ user นั้น เพื่อโปะเวบไซด์ของเราเองกันได้อย่างไร

Apache Virtual Hosts Setting

Virtual Hosts เป็นการติดตั้งให้ apache สามารถรัน web site มากกว่าหนึ่งเว็บบน instance ของเรา อย่างเช่นมี url แตกต่างกัน (company1.example.com และ company1.example.com) และที่ผมจะทำ คือ แยก user นึงให้สำหรับใช้งานสำหรับ web site นึงของผมไปเลยครับ (บางคนอาจจะใช้ ubuntu user ไปเลยง่ายดี แต่ผมอยากแยกให้เป็นระเบียบตามความวิตกจริตของผมเองครับ) โดยขั้นตอนตามปกติจะเป็นแบบนี้ –> here แต่พอมาใช้ chef แล้วทุกอย่างจะง่ายไปเลยฮะ ถ้าหากอยากสร้างเพิ่มอีก site ก็แค่ใช้ cookbook เดิม เปลี่ยน parameter นิดหน่อย แล้วก็รัน ง่ายมากๆเลยใช่มั้ยครับ มาดูกันเลยว่าทำอย่างไร

Step

  1. เริ่มด้วย สร้าง cookbook ของตัวเองชื่อ “mysite”
    cd ~/Workspace/chef-repo
    knife cookbook create mysite
    
  2. เราก็จะได้ mysite cookbook มาอยู่ใน ~/Workspace/chef-repo/cookbooks เมื่อลองเข้าไปดูจะมีโครงสร้างดังนี้
    Screen Shot 2013-08-19 at 11.06.21 PM
  3. ส่วนที่เป็นโค้ดของเรา จะอยู่ใน recipes สูตรอาหารนั้นเอง (ชื่อเท่ห์ใช่มั้ยฮะ แล้วก็มาเริ่มปรุงอาหารกันเลยครับ) ทุกอย่างในโค้ด คือ ruby ถ้าใครชินกับภาษานี้ ก็จะได้เปรียบ แต่ถ้าใครยังไม่รู้ไม่่ตรงกลัวครับ เพราะ ruby เข้าใจง่ายมากๆ
    cd ~/Workspace/chef-repo/cookbooks/mysite
    vim recipes/default.rb
    
  4. เมื่อเข้ามาใน file แล้ว มาเริ่มด้วยการกำหนด ชื่อ account, group และตำแหน่งหลักของ site บน apache directory กันก่อนครับ
    # user and group name
    mysite_user = "mysite"
    mysite_group = "mysite"
    # user directory
    mysite_root = "/home/#{mysite_user}"
    # site sourcecode directory under usual apache site directory
    mysite_source = "/var/www/parnurzeal.com/public_html"
    
  5. หลังจากนั้นก็เริ่มสร้าง user และ group กัน
    # create mysite group
    group mysite_group do
      action :create
    end
    
    # create mysite user
    user "mysite" do
      group mysite_group
      home mysite_root
      shell "/bin/bash" # set wanted shell
      supports :manage_home => true # tell it to create home directory
      action :create
    end
    
  6. หลังจากได้ group, user และ user directory มาแล้ว ก็มาต่อด้วย สร้าง folder และ symbolic ลิงค์ สำหรับ site กันเลยครับ
    # create folder for site sourcecode
    directory mysite_source do
      owner mysite_user
      group mysite_group
      recursive true
      mode "755"
      action :create
    end
    
    #create symbolic link to sourcecode from user directory
    link "#{mysite_root}/web_src" do
      to mysite_source
    end
    
  7. สุดท้ายเป็นการ setting virtual host บน apache ครับ ถ้าแบบ manual ก็ต้องไปดูตามเว็บที่ให้ไปข้างต้นครับ เราต้องไปสร้าง ไฟล์ และ ภายใต้ site_available และก็​config นู่นนี่นั่นนะครับ แต่ด้วย chef เราจะใช้ cookbook สำเร็จรูปของ apache2 ที่ download ไปเมื่อตอนก่อน และ template ของ config มาเซต virtual host กันครับ
    1. เริ่มด้วย copy template ของ virtual hosts จาก apache2 cookbook
      cp ~/Workspace/chef-repo/cookbooks/apache2/templates/default/web_app.conf.erb ~/Workspace/chef-repo/cookbooks/mysite/templates/default/
      
    2. ลบส่วนข้างล่างใน web_app.conf.erb ที่ copy มาด้วยครับ (เพราะผมใช้สว่วนนี้ ของ apache ไม่เป็น ;P และไม่จำเป็นสำหรับตอนนี้ครับ)
      # Canonical host, <%= @params[:server_name] %>
      RewriteCond %{HTTP_HOST} !^<%= @params[:server_name] %> [NC]
      RewriteCond %{HTTP_HOST} !^$
      RewriteRule ^/(.*)$ http://<%= @params[:server_name] %>/$1 [L,R=301]
      
    3. บอก cookbook ของเราว่าเราต้องการใช้สูตรอาหารจาก apache2 ด้วย

      # add
      depends ‘apache2’

    4. หลักจากนั้น ใส่สูตร ลงไปบน cookbook ของเรา
      # set virtual hosts in apache
      web_app "mysite_vhost" do
        server_name "<your site name>.com"
        server_aliases ["<your site alias>"]
        docroot mysite_source
        allow_override all # to let .htaccess configurable
      end
      
  8. เป็นอันเสร็จครับ code ทั้งหมดใน recipes/default.rb ก็จะเป็นดังข้างล่างนี้
    #
    # Cookbook Name:: mysite
    # Recipe:: default
    #
    # Copyright 2013, YOUR_COMPANY_NAME
    #
    # All rights reserved - Do Not Redistribute
    #
    mysite_user = "mysite"
    mysite_group = "mysite"
    mysite_root = "/home/#{mysite_user}"
    mysite_source = "/var/www/parnurzeal.com/public_html"
    
    # create mysite group
    group mysite_group do
      action :create
    end
    
    # create mysite user
    user "mysite" do
      group mysite_group
      home mysite_root
      shell "/bin/bash"
      supports :manage_home => true
      comment "mysite user"
      action :create
    end
    
    # create folder for source
    directory mysite_source do
      owner mysite_user
      group mysite_group
      recursive true
      mode "755"
      action :create
    end
    
    # create symbolic link to source from user home
    link "#{mysite_root}/web_src" do
      to mysite_source
    end
    
    # set virtual hosts in apache
    # to understand url and source
    web_app "mysite_vhost" do
      server_name "<your site name>"
      server_aliases ["<your site alias>"]
      docroot mysite_source
    end
    

อย่าลืมลิงค์ url ที่สมัครมายิงไปที่ ip address ของ ec2 อันนี้นะครับ จากนั้นก็ลองใส่ index.html โง่ๆ ลงไปบน /home/mysite/web_src/ ได้เลยครับ เป็นอันเสร็จ!!! จะใส่อะไรยังไงก็แล้วแต่คุณ 😉

แต่ทว่า ถ้าไ่ม่อยากจะต้อง upload ไฟล์เองทุกครั้ง หรือ ไฟล์ไม่ sync ดูแลยาก ต้องดูการ deploy ไซด์กันง่ายๆ จาก repository ในตอนต่อไปครับ

Note: สำหรับคนที่ไม่มี url ของตัวเองให้เข้าไปเซต /etc/hosts บนเครื่อง local ของคุณ โดย add ip และ site name ลองไปครับ  เพื่อบอกให้ browser วิ่งไปที่ ip นี้ เมื่อ access <your site name> ครับ

127.0.0.1 localhost
#Virtual Hosts
12.34.56.789 <your site name>
Advertisements

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s