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 ແອັບຂອງທ່ານຮຽບຮ້ອຍແລ້ວ