ruby-on-rails - 如何将 Rails 应用部署到 VPS(或专用服务器)?

标签 ruby-on-rails ruby-on-rails-3 vps

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

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

最佳答案

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

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

  • 这些是对我有用的步骤:

    设置虚拟机

    创建新的虚拟机

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

    成立日期
  • dpkg-重新配置 tzdata

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

  • 安全

    创建用户
  • adduser 部署
  • usermod -a -G sudo deploy
  • 登出

  • 设置 SSH key 认证

    在本地:
  • 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
  • 须藤服务 ssh 重启

  • 设置防火墙
  • sudo iptables -L(它应该显示一个空表)
  • 须藤 vim/etc/iptables.firewall.rules
  • 粘贴此:https://gist.github.com/davidmles/89fc88e48e17cf8252bfca374e46355f#file-iptables-firewall-rules
  • 须藤 iptables-restore
  • sudo iptables -L(现在它应该显示配置的规则)
  • sudo vim/etc/network/if-pre-up.d/firewall
  • 粘贴此:https://gist.github.com/davidmles/89fc88e48e17cf8252bfca374e46355f#file-firewall
  • 须藤 chmod +x/etc/network/if-pre-up.d/firewall

  • 设置fail2ban

    如果您有足够的空闲内存,请进行设置,因为它往往会吃掉它。
  • sudo apt-get install -y fail2ban

  • 安装 ruby

    安装 Git
  • sudo apt-get install -y git

  • 安装rbenv
  • git 克隆 https://github.com/sstephenson/rbenv.git ~/.rbenv
  • echo 'export PATH="$HOME/.rbenv/bin:$PATH"' >> ~/.bashrc
  • echo 'eval "$(rbenv init -)"' >> ~/.bashrc
  • 源 ~/.bashrc
  • git 克隆 https://github.com/sstephenson/ruby-build.git ~/.rbenv/plugins/ruby-build

  • 安装 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 + 乘客
  • 按照文档安装:
  • https://www.phusionpassenger.com/library/install/nginx/install/oss/jessie/

  • 安装 PostgreSQL
  • 按照文档安装:
  • https://wiki.postgresql.org/wiki/Apt#PostgreSQL_packages_for_Debian_and_Ubuntu

  • 设置库

    安装 node.js

    需要预编译 Assets 。
  • sudo apt-get install -y nodejs

  • 安装捆绑器
  • 获取安装捆绑器
  • rbenv 重新哈希

  • 设置应用程序

    在 PostgreSQL 中创建用户
  • createuser 用户名 --pwprompt
  • createdb -Ousername -Eutf8 db_name
  • 测试一下:
  • psql db_name --user 用户名 --password

  • 部署代码
    * 在服务器上:
    * 须藤 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(粘贴你的 secret 配置)
    * 在您的开发机器上:
    *捆绑执行帽生产部署
    * 捆绑执行上限生产每当:update_crontab

    配置 logrotate
  • 遵循本指南:* https://gorails.com/guides/rotating-rails-production-logs-with-logrotate
  • 关于ruby-on-rails - 如何将 Rails 应用部署到 VPS(或专用服务器)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13444105/

    相关文章:

    ruby-on-rails - Make 未被识别为内部或外部命令

    ruby-on-rails - 当我发出 ajax 请求时,如何防止浏览器屏幕滚动到顶部?

    ruby-on-rails - Rails - 设计 - edit_user_registration_path

    linux - 关闭终端 SSH 后进程终止

    javascript - 无法连接到我的 VPS 上的 node.js 服务器

    ruby-on-rails - 格式为电子邮件地址链接,ruby on rails

    ruby-on-rails - Ruby:卡住数组中的字符串是否也应该单独卡住?

    ruby-on-rails - (设计)更新时需要密码,即使它是空白的

    mysql - Rails 表单未写入数据库

    git - 设置 git 以要求 ssh key 文件