第一次发帖,还不太会用 Markdown
为什么用 mina+puma?
最开始一直是手动 ssh 到服务器进行部署,我也觉得挺好的,然后吧时间长了,就觉得好烦,然后就开始尝试自动部署。之前有跟着论坛的帖子用 Capistrano 和 Passenger 进行部署,是用sudo apt-get install nginx-extras passenger
安装的 nginx,也是成功的,但是服务器加了 rtmp 服务,得用编译模式安装 nginx,然后 passenger 就不知道怎么搞到 nginx 里去了,还有一个原因是我看大家都说 mina 简单(作为新手我就需要简单的 ),而且我一直觉 puma 是默认自带的,肯定有自带的好处啊,为啥那么多帖子都让用 Passenger,整不明白。所以果断就换了。废话不多说,开始吧!
安装 mina 和 mina-puma
在本地rails项目Gemfile中添加
gem 'mina' #当前版本为1.2.3
gem 'mina-puma', require: false
然后 bundle install
创建 Mina 的配置文件 cd 进入自己的本地 Rails 项目目录
mina init
会生成 deploy.rb 文件 进行配置
require 'mina/rails'
require 'mina/git'
require 'mina/puma'
require 'mina/rbenv' # ruby版本控制用rbenv,rvm的话还要设置gemset
set :application_name, 'rails_app' #给项目起名字,随便起
set :domain, 'username@ip' #用户名@ip,用来ssh 登录服务器用的
set :deploy_to, '/home/ruihai/rails_app' #服务器里想把项目部署的位置,可以没有rails_app那个文件夹,会自动创建
set :repository, 'git@xxxxxxxxt' #项目git地址,也可以用https开头的
set :branch, 'master' #想部署的分支
set :forward_agent, true #使用本地的`SSH秘钥`去服务器执行`git pull`,这样`Git`上就不用设置`部署公钥`
#如果rails是5.2以上版本,就把下面的secrets.yml改成master.key
set :shared_files, fetch(:shared_files, []).push('config/database.yml', 'config/secrets.yml')
task :remote_environment do
invoke :'rbenv:load'
end
task :setup do
# command %{rbenv install 2.3.0 --skip-existing}
end
desc "Deploys the current version to the server."
task :deploy do
deploy do
invoke :'git:clone'
invoke :'deploy:link_shared_paths'
invoke :'bundle:install'
invoke :'rails:db_migrate'
invoke :'rails:assets_precompile'
invoke :'deploy:cleanup'
on :launch do
in_path(fetch(:current_path)) do
command %{mkdir -p tmp/}
command %{touch tmp/restart.txt}
end
end
end
end
在本地mina setup
-----> Loading rbenv
-----> Setting up /home/ruihai/rails_app
/home/ruihai
总用量 24
drwxrwxr-x 6 ruihai ruihai 4096 5月 5 18:23 .
drwxr-xr-x 15 ruihai ruihai 4096 5月 7 13:41 ..
lrwxrwxrwx 1 ruihai ruihai 34 5月 5 18:23 current -> /home/ruihai/rails_app/releases/3
drwxrwxr-x 8 ruihai ruihai 4096 5月 5 18:23 releases
drwxrwxr-x 7 ruihai ruihai 4096 5月 5 14:34 scm
drwxrwxr-x 7 ruihai ruihai 4096 5月 5 14:37 shared
drwxrwxr-x 2 ruihai ruihai 4096 5月 5 18:23 tmp
# gitee.com:22 SSH-2.0-Basalt-1.2
Connection to xxx.xxx.xxx.xxx closed.
Elapsed time: 1.48 seconds
这里的遇到个坑,运行完这个命令终端里会提示远程服务器关闭,还是红色字体提示,我以为是报错了,其实没有报错。
然后你需要 SSH 到服务器上,在生成的项目下 /shared/config目录中,新建以下两个文件
在/shared/tmp 目录下 mkdir 新建 sockets 和 pids 两个目录(gem 'mina-puma'需要)
本地运行mina deploy
-----> Creating a temporary build path
-----> Loading rbenv
-----> Fetching new git commits
-----> Using git branch 'master'
正克隆到 '.'...
完成。
-----> Using this git commit
rushboy (cf7907e):
> change Grindplayer.swf location
-----> Symlinking shared paths
-----> Installing gem dependencies using Bundler
Using rake 12.3.2
Using concurrent-ruby 1.1.3
Using i18n 1.2.0
Using minitest 5.11.3
Using thread_safe 0.3.6
Using tzinfo 1.2.5
Using activesupport 5.1.6.1
Using builder 3.2.3
Using erubi 1.7.1
Using mini_portile2 2.3.0
Using nokogiri 1.8.5
Using rails-dom-testing 2.0.3
Using crass 1.0.4
Using loofah 2.2.3
Using rails-html-sanitizer 1.0.4
Using actionview 5.1.6.1
Using rack 2.0.6
Using rack-test 1.1.0
Using actionpack 5.1.6.1
Using nio4r 2.3.1
Using websocket-extensions 0.1.3
Using websocket-driver 0.6.5
Using actioncable 5.1.6.1
Using globalid 0.4.1
Using activejob 5.1.6.1
Using mini_mime 1.0.1
Using mail 2.7.1
Using actionmailer 5.1.6.1
Using activemodel 5.1.6.1
Using arel 8.0.0
Using activerecord 5.1.6.1
Using bcrypt 3.1.12
Using bundler 2.0.1
Using cancancan 2.3.0
Using mime-types-data 3.2018.0812
Using mime-types 3.2.2
Using carrierwave 1.3.1
Using climate_control 0.2.0
Using terrapin 0.6.0
Using cocaine 0.6.0
Using orm_adapter 0.5.0
Using ckeditor 4.2.4
Using coffee-script-source 1.12.2
Using execjs 2.7.0
Using coffee-script 2.4.1
Using method_source 0.9.2
Using thor 0.20.3
Using railties 5.1.6.1
Using coffee-rails 4.2.2
Using ffi 1.9.25
Using multi_json 1.13.1
Using jbuilder 2.8.0
Using kaminari-core 1.1.1
Using kaminari-actionview 1.1.1
Using kaminari-activerecord 1.1.1
Using kaminari 1.1.1
Using mini_magick 4.9.2
Using mysql2 0.5.2
Using puma 3.12.0
Using sprockets 3.7.2
Using sprockets-rails 3.2.1
Using rails 5.1.6.1
Using rails-i18n 5.1.2
Using rb-fsevent 0.10.3
Using rb-inotify 0.9.10
Using sass-listen 4.0.0
Using sass 3.7.2
Using tilt 2.0.9
Using sass-rails 5.0.7
Using turbolinks-source 5.2.0
Using turbolinks 5.2.0
Using uglifier 4.1.20
Bundle complete! 23 Gemfile dependencies, 72 gems now installed.
Gems in the groups development and test were not installed.
Bundled gems are installed into `./vendor/bundle`
-----> DB migrations unchanged; skipping DB migration
-----> Precompiling asset files
yarn install v1.15.2
info No lockfile found.
[1/4] Resolving packages...
[2/4] Fetching packages...
[3/4] Linking dependencies...
[4/4] Building fresh packages...
success Saved lockfile.
Done in 0.16s.
-----> Cleaning up old releases (keeping 5)
/home/ruihai/rails_app/tmp/build-155731703215529
-----> Deploy finished
-----> Building
-----> Moving build to /home/ruihai/rails_app/releases/4
-----> Build finished
-----> Launching
-----> Updating the /home/ruihai/rails_app/current symlink
/home/ruihai/rails_app/current
-----> Done. Deployed version 4
Connection to xxx.xxx.xxx.xxx closed.
Elapsed time: 6.94 seconds
成功后会显示 Done. Deployed version x 然后连接你远程服务器关闭。也是红色显示(- - !)。 至此,自动部署完毕。
upstream rails_app {
server unix:///home/ruihai/rails_app/shared/tmp/sockets/puma.sock;
}
server {
listen 80;
server_name 你的域名或者ip;
root /home/ruihai/rails_app/current/public;
location / {
proxy_pass http://rails_app;
#下面这两个是为rtmp设置的,因为rtmp在同一台机器的nginx.conf里配置,不加下面的就播放不出来,我也不知道为什么
proxy_set_header Origin http://$Host;
proxy_set_header Host $Host:$server_port;
}
location ~ ^/assets/ {
expires 1y;
add_header Cache-Control public;
add_header ETag "";
break;
}
}
然后重启 nginx,不管你的服务器是 ubuntu 还是 centos,不管你是用 apt-get install nginx 还是 yum install nginx 或者是./configure 编译安装的 nginx,请都用这个命令/etc/nginx/sbin/nginx -s reload 重启 nginx,通用。
本人还是个新手小白,发帖是记录一下自己的部署过程,也给需要的朋友提供个参考,其实有很多不明白的地方,也可能有错误的地方,望大家批评指导