Rails 中自动布署工具 mina 的经验谈 Rails终极部署

软件安装

root用户 安装:
1. 安装nginx:yum install nginx -y
2. 安装 [postgresl](https://www.postgresql.org/download/linux/redhat/)
3. 安装postgresql-devel:yum install postgresql-devel -y
3. 安装redis:yum install redis -y
4. 安装git:yum install git -y
5. 安装ImageMagick:yum install ImageMagick -y
6. 添加用户: adduser www 设置密码:passwd www
7. 修改用户权限:vim /etc/sudoers   # www     ALL=(ALL)       ALL  修改/etc/sudoers 添加sudo权限

www用户安装:
1. 安装[rvm](http://rvm.io/)        # 提高安装速度(https://ruby-china.org/wiki/rvm-guide)
2. 安装ruby:rvm install 2.6        # 安装ruby时候权限问题可以通过把用户添加到组中(https://ubuntuqa.com/article/9944.html)
3. 设置免密码登录 $ ssh-keygen -t rsa

rvm问题:Sometimes it is required to use `/bin/bash --login` as the command.
处理:https://blog.csdn.net/yc1022/article/details/50985023


  为用户添加组:$ usermod -a -G groupA user  (为用户user添加组groupA)

2、添加用户
  $ adduser www # 添加用户
  $ passwd www # 设置密码
  $ vim /etc/sudoers   # www     ALL=(ALL)       ALL  修改/etc/sudoers 添加sudo权限
3、用www登录部署,可以发布在 /var/www 目录下,将这个目录的 chown chgrp 改成www用户
4、创建ssh key,将pub密钥发给我做为deploy key
  设置服务器中的.ssh文件权限为700,authorized_keys权限是600.保证正常登录

  $ yum install nginx -y  # 安装nginx
  $ systemctl start nginx  # 启动nginx
  [PostgreSQL源](https://www.postgresql.org/download/linux/ubuntu/)  # 安装postgresql
  $ su - postgres
  bash$ psql
  postgres=# create user “zhaofeng” with password ‘123456’ nocreatedb; #创建用户,注意用户名要用双引号,区分大小写,密码不用
  postgres=# create database “testdb” with owner=”zhaofeng”; #创建数据库并指定所有者
  查看版本
  $ psql --version
  $ psql -U postgres postgres #登录
  $ sudo -u postgres createdb weizhu_zhongfu -O root -E UTF8 -e   # 手动创建名为weizhu_zhongfu的数据库。
  $ sudo -u Wj createdb weizhu_zhongfu -O root -E UTF8 -e   # 手动创建名为weizhu_zhongfu的数据库。

部署工具介绍

Ruby on Rails 是一个用于开发数据库驱动的网络应用程序的完整框架。Rails基于MVC(模型- 视图- 控制器)设计模式。从视图中的Ajax应用,到控制器中的访问请求和反馈,到封装数据库的模型,Rails 为你提供一个纯Ruby的开发环境。发布网站时,你只需要一个数据库和一个网络服务器即可.

在敏捷开发中,如果说自动化测试时它的一条腿,那自动化部署就是它的另一条腿。

自动部署工具

mina

gem 'mina'
$ bundle install
$ mina init   # 创建配置文件config/deploy.rb
config下新建deploy文件夹,如config/deploy/test写入:
set :domain, 'wangjing@192.168.97.134'  #服务器连接地址
set :deploy_to, '/var/www/selforum'  # 代码存储目录
set repository, 'https://github.com/easyer/selforum.git' #git仓库地址
set :branch, 'master'  # 要部署的分支

编辑config/deploy.rb文件
配置文件中默认主要是三个任务task
task :environment do
  invoke :'rvm:use[2.2.1]' #rvm设置使用的ruby版本,需要引入require 'mina/rvm'
end
task :setup => :environment do #依赖environment
  # 这里面主要是做一些服务器上的初始化工作
end
task :deploy => environment do
  # 项目的部署工作,主要包括:代码pull、配置文件软连接、gem依赖下载、数据库初始化、rails环境初始化、web服务器重启等工作。
end
使用默认
$ mina test setup
$ mina test deploy
还可以通过mina执行一些命令
$ mina test -T (mina test tasks) #查询命令帮助psql

Capistrano

服务器

nginx高效的HTTP服务器,可以用作负载均衡和反向代理,通过它接受用户请求并分发到多个Mongrel进程可以极大提高Rails应用的并发能力。

Nginx服务器

$ sudo apt-get install nginx
$ sudo /etc/init.d/nginx start #启动
 访问对应的地址即可看到“Welcome to nginx!”的页面。
配置
/etc/nginx/nginx.conf
/etc/nginx/sites-enabled/*
查看log
/var/log/nginx/access.log
/var/log/nginx/error.log

Puma

puma是一款专门针对rails的并发服务器,相对于passenger,puma可配置面更广,而且性能比passenger更高,是rails web服务器的不二之选。

$ RAILS_ENV=production puma -C config/puma.rb  #服务器启动puma
$ ps -ef | grep puma #查看puma进程

工具

mina自动部署

puma并发服务器

puma重启前,必须先停掉nginx,否则puma.sock被占用。

一些命令

可以用这两个监控日志的异常

tail -f log/production.log | grep -C 10 ROLLBACK  # 监控日志中的ROLLBACK
tail -f log/production.log | grep -C 10 ERROR	# 监控日志中的ERROR

遇到问题

CDN不支持Put、Delete方法的解决方案

GitLab: The project you were looking for could not be found.
       fatal: The remote end hung up unexpectedly
 !     ERROR: Deploy failed.
 碰到这个问题的时候是因为当前项目没有加deploy key。
 解决:通过到服务器上$ git clone git@gitlab.wikiflyer.cn/.... pull一下项目看看是否可以,如果不可以就去项目设置deploy key地方设置一下。
An unhandled lowlevel error occurred. The application logs may have details.
是因为没有配置secret的key导致的。

异步

添加gem
rails g
写任务,配置application(config.active_job.queue_adapter = :sidekiq),配置config/sidekiq.rb