【Ruby on Rails全栈课程】5.5 项目上线--nginx+unicorn部署项目、域名映射

本文涉及的产品
.cn 域名,1个 12个月
日志服务 SLS,月写入数据量 50GB 1个月
简介: 1、域名映射准备材料云服务器以及域名(参考5.1 购买服务器、域名)nginxunicorn2、安装以及设置nginx

1、域名映射准备材料


云服务器以及域名(参考5.1 购买服务器、域名)


nginx


unicorn


2、安装以及设置nginx


Nginx 是一个高性能的HTTP和反向代理服务


可以理解为连接我们项目以及域名的一个代理服务器,我们会在nginx配置文件中配置我们的项目目录以及需要映射的域名


(1)安装nginx


ubuntu@VM-16-15-ubuntu:~$ sudo apt-get install nginx

(2)设置nginx


//打开文件夹
ubuntu@VM-16-15-ubuntu:~$ cd /etc/nginx/conf.d/
//创建名为data.conf的文件
ubuntu@VM-16-15-ubuntu:/etc/nginx/conf.d$ touch data.conf
//输入nano data.conf 打开data.conf文件,粘贴下面的代码
ubuntu@VM-16-15-ubuntu:/etc/nginx/conf.d$ nano data.conf


在data.conf中需要粘贴的代码(注意如果下面出现版权信息的文字,记得删除)


upstream p_data {
  server unix:/mnt/project/private_data/unicorn.sock  fail_timeout=0;
}
server {
  listen 80;
  server_name datac.com;
  root /mnt/project/private_data/public;
  location / {
    proxy_redirect off;
    proxy_set_header Host $host;
    proxy_set_header X-Forwarded-Host $host;
    proxy_set_header X-Forwarded-Server $host;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_buffering on;
    proxy_pass http://p_data;
  }
}


将上面代码中的两处替换:


server unix:/mnt/project/private_data/unicorn.sock  fail_timeout=0;中的/mnt/project/private_data/换成你自己的项目路径


datac.com替换成你自己的域名,域名不需要加www.


3、安装并配置unicorn


Unicorn是为Ruby应用程序提供的一个HTTP服务器


在Ruby on Rails项目中常将nginx与unicorn搭配使用,unicorn会通过智能的负载均衡或者简单的轮训方式通过nginx发送请求


(1)打开本地电脑上的代码,创建config/unicorn.rb,并在里面粘贴下列代码。


module Rails
  class <<self
    def root
      File.expand_path("../..", __FILE__)
    end
  end
end
puts Rails.root
rails_env = ENV["RAILS_ENV"] || "production"
preload_app true
working_directory Rails.root
pid "#{Rails.root}/tmp/pids/unicorn.pid"
stderr_path "#{Rails.root}/log/unicorn.log"
stdout_path "#{Rails.root}/log/unicorn.log"
listen 6420, :tcp_nopush => false
listen "#{Rails.root}/unicorn.sock"
worker_processes 1
timeout 60
if GC.respond_to?(:copy_on_write_friendly=)
  GC.copy_on_write_friendly = true
end
before_exec do |server|
  ENV["BUNDLE_GEMFILE"] = "#{Rails.root}/Gemfile"
end
before_fork do |server, worker|
  old_pid = "#{Rails.root}/tmp/pids/unicorn.pid.oldbin"
  if File.exists?(old_pid) && server.pid != old_pid
    begin
      Process.kill("QUIT", File.read(old_pid).to_i)
    rescue Errno::ENOENT, Errno::ESRCH
          puts "Send 'QUIT' signal to unicorn error!"
    end
  end
end


(2)在本地电脑代码创建第2个文件,config/initializers/publish_name.rb,用来定义环境变量。


文件中添加下列代码,用来定义config/secrets.yml里面的secret_key_base: <%= ENV["SECRET_KEY_BASE"] %>这行代码。不然启动unicorn后会报错


ENV["SECRET_KEY_BASE"] = "se3e1ced11e139b8c0a10c0195e9a1e94c92e5f786872bfde1d38a64b38d72870112a17f79e0ec0d5720a7261b622adfde71a535415f750f4675fcb225b5a29a"


(3)在本地电脑上提交代码并且在服务器下拉更新代码

在本地电脑上提交代码


/vagrant/data_system$ git add .
/vagrant/data_system$ git commit -m "unicorn"
/vagrant/data_system$ git push origin master


到服务器上下拉代码


ubuntu@VM-16-15-ubuntu:~/data_symtem$ git pull origin master


(4)启动unicorn


bundle exec unicorn_rails -c ./config/unicorn.rb  -D  -E production


检查unicorn是否启动成功


  • 看一下是否产生一个名为unicorn.sock的文件


ubuntu@VM-16-15-ubuntu:~/data_symtem$ ls
app  config     db       Gemfile.lock  log           public    README.md  tmp           vendor
bin  config.ru  Gemfile  lib           package.json  Rakefile  test       unicorn.sock


  • 查看unicorn进程,其中看到id为19488这种样式的进程,就说明启动成功了


ubuntu@VM-16-15-ubuntu:~/data_symtem$ ps -axu | grep unicorn
ubuntu   19488  0.0  8.7 214684 77284 ?        Sl   Mar16   0:02 unicorn_rails master -c ./config/unicorn.rb -D -E production
ubuntu   19506  0.0 11.4 239040 101388 ?       Sl   Mar16   0:05 unicorn_rails worker[0] -c ./config/unicorn.rb -D -E production
ubuntu   22758  0.0  0.1  13228   960 pts/1    S+   23:23   0:00 grep --color=auto unicorn


(5)启动nginx


ubuntu@VM-16-15-ubuntu:~$ sudo service nginx restart


这样项目就可以在配置中的域名中打开了。


4、可能出现的错误


(1)启动nginx时,报错


Job for nginx.service failed because the control process exited with error code. See "systemctl status nginx.service" and "journalctl -xe" for details.


问题解决:


系统建议在命令行输入systemctl status nginx.service或journalctl -xe查看错误,但是在这里看到的错误不是很明显,可以直接在nginx日志里面查看错误


ubuntu@VM-16-15-ubuntu:~$ cd /var/log/nginx
ubuntu@VM-16-15-ubuntu:/var/log/nginx$ cat error.log
2019/03/16 11:35:48 [crit] 3711#3711: *1 connect() to unix:/home/ubuntu/data_symtem/unicorn.sock failed (2: No such file or directory) while connecting to upstream, client: 111.201.226.2, server: xiolu.com, request: "GET /favicon.ico HTTP/1.1", upstream: "http://unix:/home/ubuntu/data_symtem/unicorn.sock:/favicon.ico", host: "xiolu.com", referrer: "http://xilu.com/"

根据日志中返回的错误可以看出,没有找到在nginx配置文件中


(/etc/nginx/conf.d/data.conf)配置的home/ubuntu/data_symtem/unicorn.sock文件。那应该是unicorn没有启动成功,没有成功产生unicorn.sock文件。那就需要再看一下unicorn的日志。


(2)unicorn启动失败


我们需要查看一下unicorn的日志,在项目log目录下


ubuntu@VM-16-15-ubuntu:~$ cd data_symtem/log/
ubuntu@VM-16-15-ubuntu:~/data_symtem/log$ cat unicorn.log


可以看到对应的错误。


(3)在nginx与unicorn启动成功的情况下,打开域名还是出现下面页面


image.png


需要检查nginx日志(/var/log/nginx/error.log)、unicorn日志(data_symtem/log/unicorn.log),查看里面是否报错,解决相应的错误之后,页面应该就会正常显示了。


5、结语


从项目的环境部署,到代码的设计开发,再到项目的上线。Ruby on Rails全栈课程已经基本完结了。近两个月(19年3月、4月)不会再更新本课程了,有疑问可以在底下留言,我们一起讨论~


目录
相关文章
|
1月前
|
安全 应用服务中间件 Shell
nginx配置https的ssl证书和域名
nginx配置https的ssl证书和域名
|
2月前
|
JavaScript 应用服务中间件 Linux
宝塔面板部署Vue项目、服务端Node___配置域名
本文介绍了如何使用宝塔面板在阿里云服务器上部署Vue项目和Node服务端项目,并配置域名。文章详细解释了安装宝塔面板、上传项目文件、使用pm2启动Node项目、Vue项目打包上传、以及通过Nginx配置域名和反向代理的步骤。
469 0
宝塔面板部署Vue项目、服务端Node___配置域名
|
3月前
|
应用服务中间件 nginx Docker
本地通过域名访问虚拟机上nginx的服务、搭建域名访问环境一(反向代理配置)
这篇文章介绍了如何通过域名在本地访问虚拟机上的nginx服务,包括创建nginx容器、修改配置文件、修改本地host文件以及进行访问测试的详细步骤。文章提供了具体的Docker命令来创建并配置nginx容器,展示了配置文件的修改示例,说明了如何在本地系统的hosts文件中添加虚拟机IP和自定义域名,以及如何通过浏览器进行测试访问。
本地通过域名访问虚拟机上nginx的服务、搭建域名访问环境一(反向代理配置)
|
3月前
|
前端开发 测试技术 数据库
使用Ruby on Rails进行快速Web开发的技术探索
【8月更文挑战第12天】Ruby on Rails以其高效、灵活和易于维护的特点,成为了快速Web开发领域的佼佼者。通过遵循Rails的约定和最佳实践,开发者可以更加专注于业务逻辑的实现,快速构建出高质量的Web应用。当然,正如任何技术框架一样,Rails也有其适用场景和局限性,开发者需要根据项目需求和个人偏好做出合适的选择。
|
3月前
|
前端开发 测试技术 API
揭秘Ruby on Rails的神秘力量:如何让你的Web应用飞起来?
【8月更文挑战第31天】Ruby on Rails(简称RoR)是一个基于Ruby语言的开源Web应用框架,自2005年发布以来,因简洁的语法、强大的功能和高效的开发效率而广受好评。RoR采用MVC架构,提高代码可读性和可维护性,拥有庞大的社区和丰富的库支持。本文通过示例代码展示其强大之处,并介绍RoR的核心概念与最佳实践,帮助开发者更高效地构建Web应用。
42 0
|
3月前
|
前端开发 API C++
在Ruby世界中寻找你的Web框架灵魂伴侣:Rails vs Sinatra
【8月更文挑战第31天】在Ruby的世界里,选择Web框架如同挑选衣物,需根据场合和需求。Rails与Sinatra是两大热门框架,前者以其“约定优于配置”理念和全面的功能成为企业级应用的首选;后者则以轻量级和灵活性著称,适用于快速原型开发和小规模应用。通过对比两者特性,如Rails的MVC架构与Sinatra的简洁API,我们可以看到它们各有所长。选择合适的框架,如同找到旅途中的最佳伙伴,让开发之路更加顺畅愉悦。这场探索之旅教会我们,没有绝对的好坏,只有最适合的选择。
34 0
|
3月前
|
安全 前端开发 数据安全/隐私保护
如何在Ruby on Rails中打造坚不可摧的OAuth认证机制
【8月更文挑战第31天】在构建现代Web应用时,认证与授权至关重要。本文介绍如何在Ruby on Rails中实现OAuth认证,通过使用`omniauth`和`devise` gems简化流程。首先安装并配置相关gem,接着在`User`模型中处理OAuth回调,最后设置路由及控制器完成登录流程。借助OAuth,用户可使用第三方服务安全地进行身份验证,提升应用安全性与用户体验。随着OAuth标准的演进,这一机制将在Rails项目中得到更广泛应用。
48 0
|
4月前
|
SQL 安全 数据库
Ruby on Rails 数据库迁移操作深度解析
【7月更文挑战第19天】Rails 的数据库迁移功能是一个强大的工具,它帮助开发者以版本控制的方式管理数据库结构的变更。通过遵循最佳实践,并合理利用 Rails 提供的迁移命令和方法,我们可以更加高效、安全地管理数据库结构,确保应用的稳定性和可扩展性。
|
4月前
|
JavaScript 前端开发 应用服务中间件
Nginx——一个域名下部署多个Vue项目
如何在同一域名下部署第二个Vue项目而不影响现有项目:更新`vue.config.js`,设置`publicPath`为`/screen/`。修改Vue Router的`base`为`screen`。在Nginx配置中添加新location `/screen`,指向第二项目`dist`目录。测试访问`http://&lt;域名&gt;/screen/`。别忘了检查并修复任何遗漏的配置,如数据看板默认设置。
288 2
|
28天前
|
域名解析 网络协议
非阿里云注册域名如何在云解析DNS设置解析?
非阿里云注册域名如何在云解析DNS设置解析?