CLOUD PAAS / DEVELOPMENT TOOLS

คาปิสตราโน

คู่มือนี้เรียบเรียงและปรับรูปแบบสำหรับ Ruk-Com Cloud PaaS ภาพหน้าจออาจแตกต่างเล็กน้อยตามเวอร์ชันของระบบ

คลิกหรือแตะภาพหน้าจอเพื่อดูรายละเอียดขนาดจริง

วัตถุประสงค์

บทความนี้อธิบายการใช้งาน คาปิสตราโน บน Ruk-Com Cloud PaaS โดยจัดลำดับขั้นตอนและจุดตรวจสอบสำหรับการนำไปใช้งานจริง

ก่อนเริ่มดำเนินการ

  • เข้าสู่ระบบด้วยบัญชีที่มีสิทธิ์จัดการ Environment ที่เกี่ยวข้อง
  • ตรวจสอบชื่อ Environment, Region และทรัพยากรเป้าหมายก่อนบันทึกการเปลี่ยนแปลง
  • สำรองข้อมูลหรือกำหนดแผนย้อนกลับก่อนแก้ไขระบบ Production

Capistrano เป็นเครื่องมือ open-source สำหรับการรันสคริปต์บนเซิร์ฟเวอร์ระยะไกลโดยทั่วไปจะใช้สำหรับการ deploy แอปผ่านการเชื่อมต่อ SSH Capistrano เขียนด้วย Ruby เป็นส่วนประกอบของ Ruby on Rails framework ดังนั้นจึงใช้กันอย่างแพร่หลายสำหรับการ deploy แอป Ruby อย่างไรก็ตาม มันสามารถทำงานร่วมกับภาษาโปรแกรมอื่นๆได้อย่างง่ายดายเช่น php

ในบทความนี้มาดูวิธีการ deploy แอปพลิเคชัน php จากระยะไกลผ่านเครื่องมือ Capistrano ในขั้นตอนแรกคุณจะต้อง:

  • สร้าง PHP environment ด้วย Apache แอปพลิเคชันเซิร์ฟเวอร์
  • การสร้าง SSH public keyและเพิ่มไปยัง Ruk-Com Cloudแดชบอร์ด
  • GIT repository เพื่อเก็บแอปพลิเคชัน php ที่คุณต้องการ deploy (สำหรับตอนนี้เครื่องมือ Capistrano 3 รองรับประเภท GIT VCS เท่านั้น)
  • คัดลอกโปรเจกต์นี้ไว้ที่เครื่องของคุณ

หมายเหตุ:คำสั่งด้านล่างควรดำเนินการกับเครื่องของคุณเช่นเดียวกับที่คุณใช้ในระหว่างการสร้างคู่คีย์ SSH เพื่อหลีกเลี่ยงข้อผิดพลาดในการอนุญาต/การเชื่อมต่อ

การติดตั้ง Capistrano

1. การใช้ Capistrano คุณต้องติดตั้ง Ruby ที่เครื่องคอมพิวเตอร์ของคุณโดยรันคำสั่งนี้:

apt-get install ruby rubygems

2. จากนั้นติดตั้งเครื่องมือ Capistrano โดยป้อนคำสั่งต่อไปนี้:

gem install capistrano

3. ตรวจสอบให้แน่ใจว่าคุณมีโฟลเดอร์ กำหนดค่า ในไดเร็กทอรีที่เครื่องของคุณพร้อมกับโปรเจ็กต์ (เนื่องจากเป็นโฟลเดอร์เริ่มต้นที่มีการกำหนดค่าสำหรับ Ruby on Rails) หากคุณไม่มี ให้สร้างโฟลเดอร์นี้:

mkdir {path_to_your_project}/config

Capify แอปพลิเคชันของคุณ

หลังการติดตั้ง คุณต้อง capify แอปพลิเคชันของคุณ เช่นกำหนดค่า Capistrano สำหรับการ deploy แอปโดยไปที่โฟลเดอร์ root ของโปรเจกต์ php และดำเนินการคำสั่งนี้:

cap install

สิ่งนี้จะสร้างไฟล์และไดเร็กทอรีใหม่ในโครงการของคุณ:

  • แคปไฟล์คือไฟล์ Capistrano หลักที่ดูแลการกำหนดค่าและ globs ที่จำเป็นสำหรับงานที่กำหนดเอง
  • กำหนดค่า/ปรับใช้/โฟลเดอร์ที่มีสองไฟล์ (การแสดงละคร.rbและการผลิต.rb) สำหรับการตั้งค่าการ deploy เฉพาะของ environment
  • กำหนดค่า/ปรับใช้.rbRuby script ที่มีการกำหนดค่าแอปพลิเคชันและคำแนะนำ Capistrano
  • lib/capistrano/งาน/โฟลเดอร์สำหรับงานที่คุณกำหนดเอง

เคล็ดลับ:คุณสามารถลองใช้ capistrano-jelastic gem ที่ดูแลโดย gerado-navarro เพื่อ deploy แอป Relis ให้เป็น PaaS & IaaS โดยอัตโนมัติ

ตั้งค่าการกำหนดค่าเอง

1. ไปที่ไฟล์ กำหนดค่า/deploy.rb และกำหนดค่าให้สอดคล้องกับการตั้งค่าของคุณ ในขั้นต้นจะดูเหมือนรูปแบบนี้:

# config valid only for Capistrano 3.1
    lock '3.2.1'

    set :application, 'my_app_name'
    set :repo_url, '[email protected]:me/my_repo.git'

    # Default branch is :master
    # ask :branch, proc { `git rev-parse --abbrev-ref HEAD`.chomp }.call

    # Default deploy_to directory is /var/www/my_app
    # set :deploy_to, '/var/www/my_app'

    # Default value for :scm is :git
    # set :scm, :git

    # Default value for :format is :pretty
    # set :format, :pretty

    # Default value for :log_level is :debug
    # set :log_level, :debug

    # Default value for :pty is false
    # set :pty, true

    # Default value for :linked_files is []
    # set :linked_files, %w{config/database.yml}

    # Default value for linked_dirs is []
    # set :linked_dirs, %w{bin log tmp/pids tmp/cache tmp/sockets vendor/bundle public/system}

    # Default value for default_env is {}
    # set :default_env, { path: "/opt/ruby/bin:$PATH" }

    # Default value for keep_releases is 5
    # set :keep_releases, 5

    namespace :deploy do

      desc 'Restart application'
      task :restart do
        on roles(:app), in: :sequence, wait: 5 do
          # Your restart mechanism here, for example:
          # execute :touch, release_path.join('tmp/restart.txt')
        end
      end

      after :publishing, :restart

      after :restart, :clear_cache do
        on roles(:web), in: :groups, limit: 3, wait: 10 do
          # Here we can do anything such as:
          # within release_path do
          #   execute :rake, 'cache:clear'
          # end
        end
      end

    end

แก้ไขสตริงต่อไปนี้:

  • ใส่ชื่อแอปพลิเคชันของคุณ
set :application, "my_app_name"
  • ระบุ URL ไปยัง VSC repository ด้วยโค้ดแอปพลิเคชัน PHP
set :repo_url, "[email protected]:me/my_repo.git"

หมายเหตุ:คุณต้องแนบ SSH public key กับบัญชี GIT ของคุณ (อันเดียวกับที่คุณเพิ่มลงในแดชบอร์ด) มิฉะนั้นคุณจะได้รับ "การอนุญาตถูกปฏิเสธ"; เกิดข้อผิดพลาดขณะพยายาม deploy แอปพลิเคชันของคุณ

คุณสามารถใช้ลิงก์https:ประเภทต่อไปนี้:
ชุด :repo_URL, "https://example.net/GIT_user_name/repo_name.git"

ในกรณีนี้ไม่จำเป็นต้องมีการตรวจสอบสิทธิ์และคุณสามารถระบุ URL ไปยัง PHP open-source repository ที่คุณต้องการ deploy


  • ยกเลิกคอมเมนต์บรรทัดต่อไปนี้และระบุไดเร็กทอรีที่แอปพลิเคชันที่คุณจะ deploy (โดยค่านี้เป็นค่าเริ่มต้นสำหรับ PHP app servers):
# set :deploy_to, '/var/www/webroot'
  • ยกเลิกคอมเมนต์บรรทัดต่อไปนี้
set :scm, :git
set :format, :pretty
set :pty, true
  • ลบสตริงที่มีโค้ดต่อท้ายไฟล์ (เริ่มต้นจากคำสั่งเนมสเปซ : ปรับใช้ทำ) และวางบรรทัดต่อไปนี้แทน:
namespace :deploy do
        desc 'Restart Apache'
        task :apache do
            on roles(:app) do
                execute :sudo, "service httpd restart"
            end
        end

        desc 'Creating symlink'
        task :symlink do
            on roles(:app) do
                execute :rm, "-rf /var/www/webroot/ROOT"
                execute :ln, "-s /var/www/webroot/current /var/www/webroot/ROOT"
            end
        end

        desc 'Restart Apache and create symlink'
        task :restart
        before :restart, :symlink
        before :restart, :apache

    end

    after 'deploy:publishing', 'deploy:restart'

คุณสามารถกำหนดค่าเพิ่มเติมได้ในไฟล์นี้ (เช่น ระบุสาขาของ repository หรือลิงก์ไฟล์/โฟลเดอร์เพิ่มเติม)

กดปุ่มบันทึกเพื่อบันทึกการเปลี่ยนแปลง

2. จากนั้นไปที่ไฟล์กำหนดค่า/ปรับใช้/staging.rbเนื้อหาเริ่มต้นคือ:

# Simple Role Syntax
    # ==================
    # Supports bulk-adding hosts to roles, the primary server in each group
    # is considered to be the first unless any hosts have the primary
    # property set.  Don't declare `role :all`, it's a meta role.

    role :app, %w{[email protected]}
    role :web, %w{[email protected]}
    role :db,  %w{[email protected]}

    # Extended Server Syntax
    # ======================
    # This can be used to drop a more detailed server definition into the
    # server list. The second argument is a, or duck-types, Hash and is
    # used to set extended properties on the server.

    server 'example.com', user: 'deploy', roles: %w{web app}, my_property: :my_value

    # Custom SSH Options
    # ==================
    # You may pass any option but keep in mind that net/ssh understands a
    # limited set of options, consult[net/ssh documentation](http://net-ssh.github.io/net-ssh/classes/Net/SSH.html#method-c-start).
    #
    # Global options
    # --------------
    #  set :ssh_options, {
    #    keys: %w(/home/rlisowski/.ssh/id_rsa),
    #    forward_agent: false,
    #    auth_methods: %w(password)
    #  }
    #
    # And/or per server (overrides global)
    # ------------------------------------
    # server 'example.com',
    #   user: 'user_name',
    #   roles: %w{web app},
    #   ssh_options: {
    #     user: 'user_name', # overrides user setting above
    #     keys: %w(/home/user_name/.ssh/id_rsa),
    #     forward_agent: false,
    #     auth_methods: %w(publickey password)
    #     # password: 'please use keys'
    #   }

ขั้นตอนแรกให้คุณแก้ไขบทบาท3 ส่วน:ไวยากรณ์บทบาทอย่างง่ายโดยวาง{[email protected]} แทน{[email protected]}ใช้ค่าต่อไปนี้:

  • โหนด- ค่าโหนดไอดีของคอนเทนเนอร์ Apache แอปพลิเคชันเซิร์ฟเวอร์ใน environment ของคุณ
  • uid- ตัวเลขก่อนสัญลักษณ์ @ ในการเชื่อมต่อ SSH หลังจากนั้นแก้ไขบรรทัดการตั้งค่าเซิร์ฟเวอร์ (ในส่วนของไวยากรณ์เซิร์ฟเวอร์ขยาย):
  • ระบุโฮสต์ SSH ของคุณ เช่นเซิร์ฟเวอร์ 'gate.manage.ruk-com.cloud'
  • ใส่ค่า {nodeid}_{uid} สำหรับพารามิเตอร์ผู้ใช้เช่นผู้ใช้: '190403-136'ดังนั้นการตั้งค่าเซิร์ฟเวอร์ของคุณจะมีลักษณะดังนี้
server 'gate.manage.ruk-com.cloud', user: '190403-136', roles: %w{web app}, my_property: :my_value

ขั้นตอนสุดท้ายระบุพอร์ตเซิร์ฟเวอร์ที่จะใช้สำหรับการเชื่อมต่อ SSH:

set :ssh_options, {
    port: 3022
}

อย่าลืมกดปุ่มบันทึกเพื่อบันทึกการกำหนดค่าด้วยตนเอง

3. เปิดแคปไฟล์(อยู่ในโฟลเดอร์ root ในโปรเจกต์เครื่องของคุณ) และเพิ่มหนึ่งบรรทัดนี้เข้าไป:

Rake::Task[:staging].invoke

กำหนดค่า SSH Agent

1. ตรวจสอบให้แน่ใจว่าคุณมีssh-ตัวแทนที่ทำงานอยู่ในระบบของคุณ

2. เพิ่ม private SSH key ของคุณไปยัง agent ซึ่งควรสอดคล้องกับ public SSH key ที่คุณเพิ่มไปในแดชบอร์ด

ssh-add {full_path_to_the_necessary_private_SSH_key}

3. คุณสามารถตรวจสอบว่าเพิ่มคีย์ได้ถูกต้องหรือไม่โดยป้อนคำสั่งssh-เพิ่ม -lcommand

ตรวจสอบการกำหนดค่า

คุณสามารถตรวจสอบให้แน่ใจว่าทุกอย่างได้รับการกำหนดค่าอย่างถูกต้องโดยไปที่โฟลเดอร์ root ที่เครื่องของคุณแล้วพิมพ์คำสั่งด้านล่าง:

cap staging deploy:check

Capistrano จะเชื่อมต่อกับคอนเทนเนอร์ระยะไกล สร้างโฟลเดอร์ที่จำเป็นในไดเร็กทอรีที่ deploy (ระบุไว้ในพารามิเตอร์ set :deploy_to) และตรวจสอบเซิร์ฟเวอร์ทั้งระยะไกลและภายในเครื่องเพื่อดูว่ามีไฟล์ที่จำเป็นทั้งหมด เช่น สิทธิ์ที่จำเป็น เครื่องมือ ฯลฯ อยู่หรือไม่

หากมีสิ่งใดผิดพลาดไป คุณจะได้รับข้อความแสดงข้อผิดพลาดที่เกี่ยวข้อง

ปรับใช้แอปพลิเคชัน

ดำเนินการ deploy แอปพลิเคชันของคุณโดยรันคำสั่งด้านล่างในโฟลเดอร์ root ของโปรเจ็กต์:

cap staging deploy

เมื่อการดำเนินการนี้เสร็จสมบูรณ์ ให้ไปที่ URL ของ environment และตรวจดูให้แน่ใจว่าได้ deploy แอปของคุณแล้ว