博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Linode CentOS 7 使用 Mina 部署 Rails API 项目 Postgresql 9.6 + Nginx + Puma + Rbenv
阅读量:7072 次
发布时间:2019-06-28

本文共 3298 字,大约阅读时间需要 10 分钟。

起源

上次部署项目已经是2年前的事了。

现在项目需要部署,非专业运维,又踩了不少坑,所以记录下来,避免再踩同样的坑。

环境

项目部署在VPS是Linode日本节点,系统选的是CentOS 7。

部署工具使用的是mina

模板来自

但是针对部署的环境是Ubuntu,所以 fork 针对 CentOS7 做了调整

项目环境

  1. Ruby (2.4.4) -- 2.5 rails还遇到很多坑,所以还是先用2.4.4
  2. Postgresql (9.6)
  3. Nginx
  4. Gems
    1. Rails (5.2.0)
    2. pg (1.0.0)
    3. Puma (3.11.4)

开始部署

由于是时候做的记录,可能会有遗漏,欢迎各位提出,我想办法补充。

新增用户

新增一个用户,专门用于部署

# 登录VPSssh root@domain.comadduser deployergpasswd -a deployer wheel # 添加到sudo租passwd deployer # 设置密码echo "deployer ALL = (ALL) NOPASSWD: ALL" >> /etc/sudoers# 退出exit# 将public key 拷贝到VPS,不需要再手动输入密码登录ssh-copy-id deployer@domain.com复制代码

关闭SELinux

这是一个大坑,在VPS关掉之后可以减少很多麻烦,以后再单独研究。

可以先临时关闭,并修改配置,之后重启就完全关闭了

临时关闭:

setenforce 0复制代码

永久关闭:

vi /etc/selinux/config复制代码

将SELINUX=enforcing改为SELINUX=disabled,设置后需要重启才能生效

使用mina部署

1、将mina模板copy到项目

git clone https://github.com/destinyd/mina-recipes.gitcp -R mina-recipes/deploy* path/to/rails/config复制代码

2、调整项目配置

修改config/deploy.rb

  • domain
  • app_name
  • repository
  • branch 以适用于自己的项目

3、构建部署环境

mina setupmina provision:essentials       # 基础库安装# mina provision:imagemagick    # 本API服务不需要图片处理mina provision:nginx            # 安装、配置nginx。# mina provision:nodejs         # 本API服务不需要JS预编译 mina provision:postgresql       # 安装、配置 postgresqlmina provision:redis            # 本API服务暂不需要Redis做缓存mina provision:rbenv            # 安装rbenv用于安装、配置rubymina puma:config                # puma配置复制代码

注意:

  1. 注释掉的 # mina provision:imagemagick 等因为本项目不需要,所以代码未修改,如果有需要请自行调整。
  2. nginx:由于CentOS 版本并不支持/etc/nginx/site-enabled 目录引用,所以需要自行修改 /etc/nginx.conf 配置,再重新启动 nginx 服务sudo systemctl restart nginx,以后有时间再补上自动替换功能。
# /etc/nginx/nginx.confuser deployer;worker_processes auto;error_log /var/log/nginx/error.log;pid /run/nginx.pid;# Load dynamic modules. See /usr/share/nginx/README.dynamic.include /usr/share/nginx/modules/*.conf;events {    worker_connections 1024;}http {    log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '                      '$status $body_bytes_sent "$http_referer" '                      '"$http_user_agent" "$http_x_forwarded_for"';    access_log  /var/log/nginx/access.log  main;    sendfile            on;    tcp_nopush          on;    tcp_nodelay         on;    keepalive_timeout   65;    types_hash_max_size 2048;    include             /etc/nginx/mime.types;    default_type        application/octet-stream;    # Load modular configuration files from the /etc/nginx/conf.d directory.    # See http://nginx.org/en/docs/ngx_core_module.html#include    # for more information.    include /etc/nginx/conf.d/*.conf;    include /etc/nginx/sites-enabled/*;}复制代码
  1. nginx:由于之前踩坑,所以 nginx 用户改为 deployer 。如果跑着有什么不对劲,可以先尝试将用户修改为 deployer,看看能不能成功
  2. postgresql:密码验证需要手动修改postgresql配置 /var/lib/pgsql/9.6/data/pg_hba.confident 改为 md5
#host    all             all             127.0.0.1/32            identhost    all             all             127.0.0.1/32            md5#host    all             all             ::1/128                 identhost    all             all             ::1/128                 md5复制代码

4、微调

直接部署会报发布环境 secret_key_base 未设置错误,需要设置 ENV['SECRET_KEY_BASE'] 或者通过 rails credentials:edit 调整 secret_key_base

由于原理还部署很清楚,所以使用了一个笨办法:在 config/deploy.rb 中修改 set :bundle_bin, "SECRET_KEY_BASE=test ~/.rbenv/shims/bundle" 。至于这个值,可以在命令行,执行 rake secret 生成。

5、项目部署

执行

mina deploy复制代码

耐心等待完成后,尝试访问http://domain.com, 成功!!!

参考文章

转载地址:http://kmkml.baihongyu.com/

你可能感兴趣的文章
有序顺序表合并
查看>>
设计模式-观察者模式
查看>>
Spring4-自动装配Beans-按属性名称自动装配
查看>>
精通比特币系列---挖矿与共识
查看>>
to use extended Windows dialogs
查看>>
3A级VR游戏将至?汪丛青力挺G胖正在开发的三款VR游戏
查看>>
Mongodb 3.2 Manual阅读笔记:CH9 存储
查看>>
关于同一线程两次调用EnterCriticalSection的测试
查看>>
说说网络通信模型
查看>>
SQLite第二课 源码下载编译
查看>>
ibatis动态生成列时的列名无效
查看>>
通用汽车新增130辆测试无人车,配激光雷达
查看>>
python之通过“反射”实现不同的url指向不同函数进行处理(反射应用一)
查看>>
10.6 监控io性能;10.7 free;10.8 ps;10.9 查看网络状态;10.10 抓包
查看>>
delegate的用法
查看>>
Ubuntu <2TB sdb preseed示例
查看>>
Android开发之旅:组件生命周期(二)
查看>>
使用LVS+NAT搭建集群实现负载均衡
查看>>
LVM 磁盘分区扩容
查看>>
mysql5.6之key_buffer_size优化设置
查看>>