7

如何将 Rails 应用程序部署到 VPS(虚拟专用服务器)或专用服务器?有一个易于遵循的指南会很好。

我知道自动化流程的脚本,但我认为最好控制一切,以便更好地理解流程。

4

2 回答 2

44

我已经使用以下技术成功地将重型 Rails 应用程序部署到 Linode 或 Digital Ocean:

  • 用于 Ruby 安装的rbenv
  • 应用服务器的nginx + 乘客
  • 用于数据库服务器的PostgreSQL
  • Capistrano自动部署(首先在您的开发机器上使用您的服务器 IP 和设置进行配置,我不会在这里介绍)

这些是对我有用的步骤:

设置虚拟机

创建一个新的虚拟机

按照您的主机(Linode 或 Digital Ocean)的设置说明创建节点并进行设置。

设置日期

  • dpkg-重新配置 tzdata

更新包

  • apt-get 更新
  • apt-get 升级

安全

创建用户

  • 添加用户部署
  • usermod -a -G sudo 部署
  • 登出

设置 SSH 密钥认证

在本地:

  • ssh-keygen
  • 复制公钥:
    • scp ~/.ssh/id_rsa.pub deploy@example.com:~

在服务器上:

  • ssh deploy@example.com
  • 启用别名以列出文件:
    • vim ~/.bashrc
    • 取消注释所有别名
  • mkdir .ssh
  • mv id_rsa.pub .ssh/authorized_keys
  • chown -R 部署:部署 .ssh
  • chmod 700 .ssh
  • chmod 600 .ssh/authorized_keys
  • 注销(测试新的身份验证)

设置 SSH

  • 须藤 vim /etc/ssh/sshd_config
  • 将 PermitRootLogin 切换为 no
  • sudo 服务 ssh 重启

设置防火墙

设置fail2ban

如果您有足够的可用内存,请进行设置,因为它往往会吃掉它。

  • sudo apt-get install -y fail2ban

设置红宝石

安装 Git

  • sudo apt-get install -y git

安装 rbenv

安装 Ruby

  • sudo apt-get install -y curl gnupg build-essential
  • rbenv install -l(查找最新版本)
  • rbenv install 2.3.3(或目前可用的最新版本)
  • rbenv 全球 2.3.3
  • rbenv 重新散列
  • vim .gemrc
    • 粘贴:gem: --no-document

设置服务器

安装 nginx + 乘客

安装 PostgreSQL

设置库

安装 node.js

需要预编译资产。

  • sudo apt-get install -y nodejs

安装捆绑器

  • 获取安装捆绑器
  • rbenv 重新散列

设置应用程序

在 PostgreSQL 中创建用户

  • createuser 用户名--pwprompt
  • createdb -Ousername -Eutf8 db_name
  • 测试它:
    • psql db_name --user 用户名 --password

部署代码 * 在服务器上: * sudo mkdir -p /srv/yoursite.com * sudo chown deploy:deploy /srv/yoursite.com * 在你的开发机器上: * bundle exec cap production deploy:check (它会抛出一个错误,因为它没有找到数据库) * 在服务器上:* cd /srv/yoursite.com/shared/config * vim database.yml(粘贴您的数据库配置)* vim secrets.yml(粘贴您的秘密配置)*在您的开发机器上:* bundle exec cap production deploy * bundle exec cap productionwhen:update_crontab

配置 logrotate

于 2012-11-18T20:10:44.287 回答
1

我之前使用 Capistrano 将我的 Rails 应用程序部署到我的生产服务器(它是一个集群),但我发现 Capistrano 有点复杂,有时甚至会成为麻烦制造者......所以我用 bash shell 脚本编写了我的部署脚本。

我已经把它放在 github 上,并附有一个简短的指南:deploy_rails

于 2014-02-28T02:14:23.847 回答