Mina
的部署流程比Capistrano
要简单容易很多,碰到的问题也少很多。我两个对比后,给你的建议是:
如果你的项目比较大,需要多台服务器,推荐
Capistrano
。项目比较小,那么推荐Mina
。
我现在开发的项目,还是一个非常小的项目。只需要一台配置很一般的服务器就足够运行了。本打算选 Mina 的,但听了管理员的建议,正式项目,还是打算用 Cap 部署了。就算为将来增加服务器考虑,Cap 是个不错的选择。
这里就不重复说明,Rails建项目
、rbenv
、Git
、SSH秘钥
、Nginx
、Passenger
、MySQL
等相关的配置了。如果你完全是新手,可以看我上一篇 「Capistrano + Rails 5.2 自动化部署」,里面有详细的基础部署流程。这些流程在Mina
部署中,几乎完全一模一样。不一样的地方,下面流程中会单独指出。
# 本地命令行
gem install mina
先cd
进入自己的Rails
项目目录
mina init
会生成config/deploy.rb
这个配置文件。要做的就是对这个文件做一些配置。具体配置如下
# 需要引入的插件
require 'mina/rails'
require 'mina/git'
require 'mina/rbenv'
set :application_name, 'itfun.tv' # 项目名称
set :domain, '114.67.72.94' # 服务器域名或ip
set :deploy_to, '/home/deploy/deployment' # 项目部署在服务器的什么地方
#Git仓库地址
set :repository, '[email protected]:aaronryuu/deployment.git'
set :branch, 'master' # Git的分支
set :user, 'deploy' # SSH连接服务器的用户名
# 使用本地的`SSH秘钥`去服务器执行`git pull`,这样`Git`上就不用设置`部署公钥`。
set :forward_agent, true
# 一些公共的文件
# 如果你使用的Rails 5.2以下版本,将`config/master.key`,改为`config/secrets.yml`
set :shared_files, fetch(:shared_files, []).push('config/database.yml', 'config/master.key')
# 对rbenv的支持
task :remote_environment do
invoke :'rbenv:load'
end
# 本地
mina setup
然后你需要SSH
到服务器上,在~/deployment/shared/config
目录中,新建以下两个文件
cd ~/deployment/shared/config
vim database.yml
根据自己实际项目,填上数据库配置的相关内容。
production:
adapter: mysql2
pool: 25
encoding: utf8mb4
database: deployment_production
host: localhost
username: root
password: itfun
vim master.key
将自己本地Rails
项目config/master.key
中的内容,复制进去。
Tips: 如果是
Rails 5.2
以下版本,这里改成config/secrets.yml
# 本地
mina deploy
成了,没有更多了~
# 本地
gem install mina-sidekiq
# 服务器上
sudo apt-get install redis-server
# 引入插件
require 'mina_sidekiq/tasks'
task :setup do
# sidekiq 存放 pid文件 和 log文件 的路径
# 跑 mina setup 时,服务器会自动生成这些目录
command %(mkdir -p "#{fetch(:deploy_to)}/shared/pids/")
command %(mkdir -p "#{fetch(:deploy_to)}/shared/log/")
end
# 跑 mina deploy 时,会先停止 sidekiq 再重新启动。
task :deploy do
deploy do
invoke :'git:clone'
# 停止 sidekiq
invoke :'sidekiq:quiet'
invoke :'deploy:link_shared_paths'
...
on :launch do
...
# 重启 sidekiq
invoke :'sidekiq:restart'
end
end
end
# 本地
mina setup
mina deploy
我在部署时,出现了一个错误,提示我
bundle: command not found
查了GitHub
的Issues
后发现是rbenv
配置的问题
# 服务器上
vim ~/.bashrc
# 将文件最底部的这两行代码,挪到文件最上面,一定要在 case 语句的上面就行。
export PATH="$HOME/.rbenv/bin:$PATH"
eval "$(rbenv init -)"
# If not running interactively, don't do anything
case $- in
*i*) ;;
*) return;;
esac
重新部署,一切正常了。
# 本地
mina setup
mina deploy