Mina是一个用于自动化部署的Ruby库,它通过编译部署任务为bash脚本,并通过SSH上传到服务器执行,从而实现快速部署。与传统的部署方式相比,Mina每次部署只使用一个SSH会话,大大减少了部署时间。本文将介绍如何使用Mina来部署一个简单的Rails应用。
Ruby on Rails框架以其简洁和高效著称,但在部署到生产服务器时,可能会遇到一些挑战。Mina的出现,为Rails应用的部署带来了便利。它简化了数据库连接、编写SQL查询、管理会话cookie等繁琐的任务。
首先,在项目Gemfile中添加Mina:
gem 'mina'
保存文件后,在命令行中运行:
$ bundle install
然后,使用以下命令初始化Mina:
$ mina init
这将在项目中创建一个config/deploy.rb文件。打开该文件,设置以下参数:
set :domain, 'mysite.com'
set :deploy_to, '/home/deployer/mysite/'
set :repository, 'git@github.com:/.git'
set :branch, ENV['BRANCH'] || 'master'
这些参数分别指定了部署的域名、部署路径、版本库地址和分支。
在config/deploy.rb文件中,设置共享路径:
set :shared_paths, [
'config/database.yml',
'config/secrets.yml',
'log'
]
共享路径用于指定需要在部署后创建软链接的文件或目录。
接下来,设置SSH登录用户和启用SSH代理:
set :user, 'deployer'
set :forward_agent, true
这将允许Mina使用指定的用户登录服务器,并在需要时通过SSH代理传递SSH密钥。
在config/deploy.rb文件的setup任务中,Mina会创建必要的文件和目录,并设置软链接。例如:
task :setup => :environment do
queue! %[mkdir -p "#{deploy_to}/#{shared_path}/log"]
queue! %[chmod g+rx,u+rwx "#{deploy_to}/#{shared_path}/log"]
queue! %[touch "#{deploy_to}/#{shared_path}/config/database.yml"]
queue! %[touch "#{deploy_to}/#{shared_path}/config/secrets.yml"]
queue %[echo "-----> Be sure to edit '#{deploy_to}/#{shared_path}/config/database.yml' and 'secrets.yml'."]
if repository
repo_host = repository.split(%r{@|://
}).last.split(%r{:|\/}).first
repo_port = /:([0-9]+)/.match(repository) && /:([0-9]+)/.match(repository)[1] || '22'
queue %[
if ! ssh-keygen -H -F #{repo_host} &>/dev/null; then
ssh-keyscan -t rsa -p #{repo_port} -H #{repo_host} >> ~/.ssh/known_hosts
fi
]
end
end
保存config/deploy.rb文件后,在命令行中运行:
$ mina setup -v
这将设置服务器上必要的目录和软链接。
部署应用非常简单,只需运行:
$ mina deploy
如果需要部署特定分支,可以使用:
$ BRANCH=my-branch mina deploy