什么是红色表示
用户需要输入或自定义线将成为红色在本教程!
介绍
Mina是一个部署工具,将允许您构建和运行脚本以通过SSH在服务器上管理部署。 与Capistrano或Vlad不同,mina仅在每次部署时创建一个SSH会话。 Mina是建立在Rake,这意味着没有YAML文件 - 一切都是用Ruby编写的,所以配置文件只是Rake文件。你可以使用mina与通过SSH部署的任何类型的项目。
第一步:安装Mina
安装Ruby后,您可以通过RubyGems在命令行中安装mina像任何其他gem:
gem install mina
或者,您可以在当前rails应用程序中的Gemfile底部添加mina。
nano Gemfile
gem 'mina'
注意:如果你没有在系统上安装红Gem,你可以检查此教程:
第二步:创建和编辑deploy.rb
文件deploy.rb是Rake调用的Rakefile。 在这个文件中,我们必须配置服务器并定义我们以后使用mina调用的任务。
在我们开始创建deploy.rb文件之前,让我们来了解我们文件中使用的一些命令。
队列是一个非常有用的命令,它允许我们对bash命令进行排队以在远程服务器上运行。
Invoke命令是一个帮助程序命令,用于从任务调用其他任务。 例如,让我们假设我们在deploy.rb中有这样的东西:
set :domain, 'myserver.com' set :user, 'myuser' task :down do invoke :restart invoke :logs end task :restart do queue 'sudo service nginx restart' end task :logs do queue 'tail -f /var/log/nginx/error.log' end
如果要在终端中运行mina restart,mina将搜索名为restart的任务,并通过SSH在set:domain上指定的远程服务器上运行排队的命令。 所以在这种情况下,mina restart将重新启动myserver.com上的nginx服务器
同样的事情发生在mina日志 - 它在服务器上使用ssh myuser@myserver.com远程调用队列命令(tail -f /var/log/nginx/error.log) 对于mina down,它调用子任务(重新启动和日志),它们排列其命令。
让我们生成deploy.rb文件。 为此,在rails应用程序文件夹中运行mina init:
mina init
让我们打开文件并配置服务器:
nano config/deploy.rb
正如你所看到的,示例文件是很好的注释,所以它很容易理解发生了什么。
在文件的开头,mina将需要bundler,rails和git。 如果使用rbenv或rvm,则必须取消注释第4行或第5行。
require 'mina/bundler' require 'mina/rails' require 'mina/git' require 'mina/rbenv' # require 'mina/rvm'
第13-16行是域的设置,部署文件夹,存储库和分支的路径。
# set :rails_env, 'production' set :domain, 'myserver.com' set :deploy_to, '/home/myuser/myserver.com' set :repository, 'https://github.com/my-git-user/my-repo.git' set :branch, 'master'
:rails_env指定用于部署的环境。 :domain是到SSH的主机名或IP地址:deploy_to是要部署到的路径,可以从服务器设置任何文件夹,但确保您有权限。
chown -R user-name /var/www/mydir
:repository是要克隆的Git存储库。 您可以使用HTTP克隆URL或SSH克隆URL,但对于SSH克隆URL,您需要在服务器上拥有您的私钥(我不建议这样做),或者使用一些mina魔法。 所有你需要做的是设置:ssh_options,'-A'并配置用户名和端口。
set :user, 'myuser' # set :port, '22' set :ssh_options, '-A'
在这之后,你必须把你的主机和启用forwardagent在〜/ .ssh / config。
nano ~/.ssh/config
把这条线放在那里。 将myserver.com替换为您的主机或IP地址。
Host myserver.com ForwardAgent yes
第一个命令将设置SSH的用户名。 如果您使用ssh的自定义端口,请取消注释第二行。 第三行将向ssh命令添加-A标志以启用身份验证代理连接的转发。 基本上,最后一个命令告诉ssh使用相同的私钥,用于登录服务器以克隆存储库。
在环境任务中,您必须取消注释要加载哪个环境。 如果您使用rbenv安装ruby,请取消注释第32行。对于rvm,请取消注释第35行。
task :environment do invoke :'rbenv:load' # invoke :'rvm:use[ruby-1.9.3-p125@default]' end
注:如果您使用的是RVM,把你的Ruby版本中的方括号。 你可以找到你所安装的版本红Gem使用ruby -v
在任务:setup中,mina将使用deploy_to的路径创建一些文件夹和文件,并更改该文件夹和文件的权限。
一开始,使用默认的文件夹结构非常方便。
在文件的结尾,我们有task:deploy。 当我们使用mina deploy时,所有调用写的都会执行。 默认情况下,mina将克隆存储库,部署shared_paths,运行bundle安装以获取所有需要的gem到服务器,迁移数据库和预编译资产。
task :deploy => :environment do deploy do invoke :'git:clone' invoke :'deploy:link_shared_paths' invoke :'bundle:install' #invoke :'rails:db_migrate' #invoke :'rails:assets_precompile' to :launch do queue "touch #{deploy_to}/tmp/restart.txt" end end end
如果你正在使用MySQL,你必须取消注释#invoke :'rails:db_migrate'
有关MySQL的详细信息,请参阅本教程或查找的东西更具体的在这里 。
第三步:安装和部署
要创建在deploy.rb文件运行中配置的文件夹结构:
mina setup --verbose
Verbose命令将让你看到在这个阶段发生了什么,如果出现错误在这里,你会看到确切的哪个命令失败。
此步骤不应超过3秒钟。
部署应用程序运行
mina deploy --trace
当错误发生时,跟踪命令将显示回溯。
可选第四步:示例
创建rails应用程序:
rails new mynewapp
更改目录并将mina添加到Gemfile:
cd mynewapp && nano Gemfile
在创建deploy.rb之前,将您的rails应用程序添加到Github:
git init git remote add origin git@github.com:username/mynewapp.git git add . git commit -a -m 'start a new rails application' git push origin master
创建具有所需内容的deploy.rb:
nano config/deploy.rb
这是我的deploy.rb查找这个项目:
require 'mina/bundler' require 'mina/rails' require 'mina/git' require 'mina/rbenv' set :rails_env, 'production' set :domain, 'ip_adress' set :deploy_to, "/home/username/app/#{rails_env}" set :app_path, "#{deploy_to}/#{current_path}" set :repository, 'https://github.com/username/mynewapp.git' set :branch, 'master' task :environment do invoke :'rbenv:load' end task deploy: :environment do deploy do invoke :'git:clone' invoke :'bundle:install' end end
注:我使用https而不是使用ssh。 另外,这是一个非常简单的deploy.rb文件 - 随时添加任务。
运行mina setup
创建的所有文件夹,然后运行mina deploy
部署Rails应用程序。
你可以看到登录到自己的VPS并检查该文件夹的结果: /home/username/app/production/current
。
为了测试Rails应用程序,运行bundle exec rails server
在此文件夹中,然后打开浏览器并转到ip_adress:3000
* WEBrick是一个用Ruby编写的简单HTTP服务器。 我不建议使用WEBrick生产。