Ruby Rails上线部署mina
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
遇到问题
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