34 部署Rails应用之服务器配置与优化

在上一章中,我们学习了如何将Rails应用部署到Heroku上,这对于小型项目或原型开发非常方便。而对于生产环境中的应用,通常我们需要更加灵活和高效的配置方案。这一章将探讨如何在一个独立的服务器上配置和优化Rails应用,从而确保其可以高效地运行。

服务器选择与环境准备

在配置Rails应用之前,我们首先需要选择一个合适的服务器。常用的选择有:

  • 虚拟私人服务器(VPS):如DigitalOcean、Linode、AWS EC2等。
  • 云托管服务:如Google Cloud、AWS等提供的托管解决方案。

基础环境配置

一旦选择了服务器,您需要进行一些基本的环境配置。以下是一个使用Ubuntu的基本环境配置步骤:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
# 更新系统
sudo apt-get update
sudo apt-get upgrade

# 安装必要的依赖
sudo apt-get install -y curl gnupg build-essential

# 安装Ruby管理工具(如rbenv)
curl -fsSL https://github.com/rbenv/rbenv-installer/raw/main/bin/rbenv-installer | bash

# 更新.bashrc或.zshrc文件,添加rbenv到路径
echo 'export PATH="$HOME/.rbenv/bin:$PATH"' >> ~/.bashrc
echo 'eval "$(rbenv init -)"' >> ~/.bashrc
source ~/.bashrc

# 安装Ruby版本
rbenv install 3.1.0
rbenv global 3.1.0

# 安装Bundler
gem install bundler

安装Rails

在完成Ruby的安装后,我们可以安装Rails:

1
gem install rails

数据库配置

Rails默认使用SQLite,但在生产环境中,通常更倾向于使用PostgreSQL或MySQL。以PostgreSQL为例,我们安装并配置数据库:

1
2
3
4
5
6
7
8
# 安装PostgreSQL
sudo apt-get install -y postgresql postgresql-contrib libpq-dev

# 创建数据库用户
sudo -u postgres createuser -s yourusername

# 创建数据库
createdb yourapp_production

config/database.yml文件中配置数据库连接:

1
2
3
4
5
6
7
8
production:
adapter: postgresql
encoding: unicode
database: yourapp_production
pool: 5
username: yourusername
password: yourpassword
host: localhost

Rails应用的配置与启动

在应用根目录下,编写并修改配置文件以满足生产环境的需求。然后,我们可以启动应用。

Puma作为应用服务器

选择Puma作为应用服务器,它是Rails的推荐选择之一。在Gemfile中添加:

1
gem 'puma'

然后运行:

1
bundle install

启动Puma

使用以下命令启动Puma服务器:

1
bundle exec puma -C config/puma.rb

配置文件config/puma.rb的示例:

1
2
3
4
5
6
7
8
9
10
11
12
13
workers Integer(ENV['WEB_CONCURRENCY'] || 2)
threads_count = Integer(ENV['RAILS_MAX_THREADS'] || 5)
threads threads_count, threads_count

preload_app!

rackup DefaultRackApp
port ENV['PORT'] || 3000
environment ENV['RACK_ENV'] || 'development'

on_worker_boot do
ActiveRecord::Base.establish_connection if defined?(ActiveRecord)
end

Nginx作为反向代理

为了处理静态文件并作为反向代理,我们通常使用Nginx。安装Nginx:

1
sudo apt-get install -y nginx

配置Nginx

/etc/nginx/sites-available/yourapp中创建配置文件:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
server {
listen 80;
server_name your_domain.com;

root /path/to/your/app/public;

location / {
proxy_pass http://localhost:3000;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}

location ~ ^/(assets|packs)/(.*)$ {
expires max;
add_header Cache-Control 'public';
}
}

然后创建链接并重启Nginx:

1
2
sudo ln -s /etc/nginx/sites-available/yourapp /etc/nginx/sites-enabled/
sudo systemctl restart nginx

SSL配置与优化

为了确保数据安全,您应该在生产环境中使用SSL。一种简单的方法是使用Let’s Encrypt来申请免费证书。

安装Certbot并进行配置:

1
2
sudo apt-get install certbot python3-certbot-nginx
sudo certbot --nginx -d your_domain.com

跟随提示完成证书申请和Nginx自动配置。

性能优化

在确保Rails应用能在生产中运行后,我们可以进行一些优化:

  1. 缓存:使用RedisMemcached进行页面缓存和数据缓存。
  2. 静态资源预编译:在生产环境中,确保运行rails assets:precompile以生成静态资源。
  3. 数据库连接池:在database.yml中,调整pool大小,以适应并发请求。
  4. 异步任务:使用Sidekiq处理后台任务,提高响应速度。

示例关于使用Redis缓存的代码:

1
2
3
# Gemfile
gem 'redis'
gem 'sidekiq'
1
2
# config/initializers/redis.rb
$redis = Redis.new(url: ENV['REDIS_URL'])

总结

本章重点介绍了如何在独立服务器上配置和优化Rails应用。通过建立合适的服务器环境、配置数据库、使用合适的应用服务器、设置反向代理以及实现SSL加密,我们可以为生产环境中的Rails应用提供出色的服务。同时,不要忘记进行性能优化,以确保应用能高效响应用户请求。

在下一章中,我们将探讨如何通过使用Gem来扩展Rails应用的功能。我们将讨论一些流行的Gem以及如何集成它们到我们的Rails项目中。

34 部署Rails应用之服务器配置与优化

https://zglg.work/rails-zero/34/

作者

IT教程网(郭震)

发布于

2024-08-15

更新于

2024-08-16

许可协议

分享转发

交流

更多教程加公众号

更多教程加公众号

加入星球获取PDF

加入星球获取PDF

打卡评论