Capistrano

Capistrano ເປັນເຄື່ອງມື open-source ສໍາລັບການຣັນສະຄຣິບໃນເຊີບເວີໄລຍະໄກ ໂດຍທົ່ວໄປຈະໃຊ້ສໍາລັບ deploy ແອັບຜ່ານການເຊື່ອມຕໍ່ SSH Capistrano ຂຽນດ້ວຍ Ruby ເປັນສ່ວນປະກອບຂອງ Ruby on Rails framework ດັ່ງນັ້ໜຈຶ່ງໃຊ້ກັນຢ່າງແພ່ຫຼາຍສໍາລັບການ deploy ແອັບ Ruby ຢ່າງໃດກໍຕາມ ມັນສາມາດເຮັດວຽກຮ່ວມກັນກັບພາສາໂປຣແກຣມອື່ນໆໄດ້ຢ່າງງ່າຍດາຍເຊັ່ນ php

ໃນບົດຄວາມນີ້ມາເບິ່ງວິທີການ deploy ແອັບພລິເຄຊັນ php ຈາກໄລຍະໄກຜ່ານເຄື່ອງມື Capistrano ໃນຂັ້ນຕອນທໍາອິດທ່ານຈະຕ້ອງ:

  • ສ້າງ PHP environment ດ້ວຍ Apache ແອັບພລິເຄຊັນເຊີບເວີ
  • ການສ້າງ SSH public key ແລະເພີ່ມໄປທີ່ Huk-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. ກວດສອບໃຫ້ແນ່ໃຈວ່າທ່ານມີໂຟລເດີ config ໃນໄດເຣັກທໍຣີທີ່ເຄື່ອງຂອງທ່ານພ້ອມກັບໂປຣເຈັກ(ເນື່ອງຈາກເປັນໂຟລເດີເລີ່ມຕົ້ນທີ່ມີການກໍານົດຄ່າສໍາລັບ Ruby on Rails) ຫາກທ່ານບໍ່ມີໃຫ້ສ້າງໂຟລເດີນີ້:

mkdir {path_to_your_project}/config

Capify ແອັບພຼິເຄຊັນຂອງທ່ານ

ຫຼັງການຕິດຕັ້ງທ່ານຕ້ອງ capify ແອັບພຼິເຄຊັນຂອງທ່ານ ເຊັ່ນກໍານົດຄ່າ Capistrano ສໍາລັບການ deploy ແອັບໂດຍໄປທີ່ໂຟລເດີ root ຂອງໂປຣເຈັກ php ແລະ ດໍາເນີນຕາມຄໍາສັ່ງດັ່ງນີ້:

cap install

ສິ່ງນີ້ຈະສ້າງໄຟລ ແລະ ໄດເຣັກທໍຣີໃໝ່ໃນໂຄງການຂອງທ່ານ:

  • Capfile ຄືໄຟລ Capistrano ຫຼັກທີ່ດູແລການກໍານົດຄ່າ ແລະ globs ທີ່ຈໍາເປັນສໍາລັບວຽກທີ່ກໍານົດເອງ
  • config/deploy/ ໂຟລເດີທີ່ມີສອງໄຟລ (staging.rb และ production.rb) ສໍາລັບການຕັ້ງຄ່າການ deployສະເພາະຂອງ environment
  • config/deploy.rb Ruby script ທີ່ມີການກໍານົດຄ່າແອັບພຼິເຄຊັນ ແລະ ຄໍາແນະນໍາ Capistrano
  • lib/capistrano/tasks/ ໂຟລເດີສໍາລັບວຽກທີ່ທ່ານກໍານົດເອງ

ເຄັດລັບ:ທ່ານສາມາດລອງໃຊ້ capistrano-jelastic gem ທີ່ດູແລໂດຍ gerado-navarro ເພື່ອ deploy ແອັບ Relis ໃຫ້ເປັນ PaaS & IaaS ໂດຍອັດຕະໂນມັດ

ຕັ້ງຄ່າການກໍານົດເອງ

1. ໄປທີ່ໄຟລ config/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: ປະເພດຕໍ່ໄປນີ້:
set :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) ວາງວັກຕໍ່ໄປນີ້ແທນ:
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 ຫຼືລິ້ງໄຟລ/ໂຟລເດີເພີ່ມເຕີມ)

ກົດປຸ່ມ Save ເພື່ອບັນທຶກການປ່ຽນແປງ

2. ຈາກນັ້ນໄປທີ່ໄຟລ config/deploy/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'
    #   }

ຂັ້ນຕອນທໍາອິດໃຫ້ທ່ານແກ້ໄຂ Role 3 ສ່ວນ: Simple Role Syntax ໂດຍວາງ {[email protected]}ແທນ {[email protected]} ໃຊ້ຄ່າຕໍ່ໄປນີ້:

  • nodeid – ຄ່າໂໜດໄອດີຂອງຄອນເທັນເນີ Apache ແອັບພຼິເຄຊັນເຊີບເວີໃນ environment ຂອງທ່ານ
  • uid – ຕົວເລກກ່ອນສັນຍາລັກ @ ໃນການເຊື່ອມຕໍ່ SSH ຈາກນັ້ນແກ້ໄຂວັກການຕັ້ງຄ່າເຊີບເວີ(ໃນສ່ວນຂອງ Extended Server Syntax):
  • ລະບຸໂຮສ SSH ຂອງທ່ານເຊັ່ນ ເຊີບເວີ ‘gate.manage.huk-com.cloud
  • ໃສ່ຄ່າ {nodeid}_{uid} ສໍາລັບພາຣາມິເຕີ user ເຊັ່ນ user: ‘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
}

ຢ່າລືມກົດປຸ່ມ Save ເພື່ອບັນທຶກການກໍານົດຄ່າດ້ວຍຕົນເອງ

3. ເປີດ Capfile (ຢູ່ໃນໂຟລເດີ root ໃນໂປຣເຈັກເຄື່ອງຂອງທ່ານ) ແລະ ເພີ່ມໜຶ່ງວັກນີ້ເຂົ້າໄປ:

Rake::Task[:staging].invoke

ກໍານົດຄ່າ SSH Agent

1. ກວດສອບໃຫ້ແນ່ໃຈວ່າທ່ານມີ ssh-agent ທີ່ເຮັດວຽກຢູ່ໃນລະບົບຂອງທ່ານ

2. ເພີ່ມ private SSH key ຂອງທ່ານໄປທີ່ agent ເຊິ່ງຄວນສອດຄ່ອງກັບ public SSH key ທີ່ທ່ານເພີ່ມໄປໃນແດຊບອດ

ssh-add {full_path_to_the_necessary_private_SSH_key}

3. ທ່ານສາມາດກວດສອບວ່າເພີ່ມຄີໄດ້ຖືກຕ້ອງ ຫຼື ບໍ່ ໂດຍປ້ອນຄໍາສັ່ງ ssh-add -lcommand

ກວດສອບການກໍານົດຄ່າ

ທ່ານສາມາດກວດສອບໃຫ້ແນ່ໃຈວ່າທຸກຢ່າງໄດ້ຮັບການກໍານົດຄ່າຢ່າງຖືກຕ້ອງໂດຍໄປທີ່ໂຟລເດີ root ທີ່ເຄື່ອງຂອງທ່ານແລ້ວພິມຄໍາສັ່ງດ້ານລຸ່ມ:

cap staging deploy:check

Capistrano ຈະເຊື່ອມຕໍ່ກັບຄອນເທັນເນີໄລຍະໄກ ສ້າງໂຟລເດີທີ່ຈໍາເປັນໃນໄດເຣັກທໍຣີທີ່ deploy (ລະບຸໄວ້ໃນພາຣາມິເຕີ set :deploy_to) ແລະ ກວດສອບເຊີບເວີທັງໄລຍະໄກ ແລະ ພາຍໃນເຄື່ອງເພື່ອເບິ່ງວ່າມີໄຟລທີ່ຈໍາເປັນທັງໝົດເຊັ່ນ ສິດທິທີ່ຈໍາເປັນ ເຄື່ອງມື ອື່ນໆ ຢູ່ຫຼືບໍ່

ຫາກມີສິ່ງໃດຜິດພາດໄປ ທ່ານຈະໄດ້ຮັບຂໍ້ຄວາມສະແດງຂໍ້ຜິດພາດທີ່ກ່ຽວຂ້ອງ

Deploy Application

ດໍາເນີນການ deploy ແອັບພຼິເຄຊັນຂອງທ່ານໂດຍຣັນຄໍາສັ່ງດ້ານລຸ່ມໃນໂຟລເດີ root ຂອງໂປຣເຈັກ

cap staging deploy

ເມື່ອການດໍາເນີນການນີ້ສໍາເລັດສົມບູນ ໃຫ້ໄປທີ່ URL ຂອງ environment ແລະ ກວດເບິ່ງໃຫ້ແນ່ໃຈວ່າໄດ້ deploy ແອັບຂອງທ່ານຮຽບຮ້ອຍແລ້ວ