如何将Rails应用程序部署到VPS(或专用服务器)?

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

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

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

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

这些步骤对我有用:

设置虚拟机

创建一个新的虚拟机

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

设置日期

  • dpkg-reconfigure tzdata

更新包

  • apt-get update
  • apt-get升级

安全

创建用户

  • adduser部署
  • usermod -a -G sudo deploy
  • 登出

设置SSH密钥validation

在当地:

在服务器上:

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

设置SSH

  • sudo vim / etc / ssh / sshd_config
  • 将PermitRootLogin切换为no
  • sudo service ssh restart

设置防火墙

  • sudo iptables -L(它应该显示一个void表)
  • sudo vim /etc/iptables.firewall.rules
  • 粘贴这个: https : //gist.github.com/davidmles/89fc88e48e17cf8252bfca374e46355f#file-iptables-firewall-rules
  • sudo iptables-restore
  • sudo iptables -L(现在应该显示已配置的规则)
  • sudo vim /etc/network/if-pre-up.d/firewall
  • 粘贴这个: https : //gist.github.com/davidmles/89fc88e48e17cf8252bfca374e46355f#file-firewall
  • sudo 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

安装Ruby

  • sudo apt-get install -y curl gnupg build-essential
  • rbenv install -l(查找最新版本)
  • rbenv install 2.3.3(或此时的最新版本)
  • rbenv global 2.3.3
  • rbenv rehash
  • vim .gemrc
    • 粘贴这个:gem: – no-document

设置服务器

安装nginx + Passenger

安装PostgreSQL

设置库

安装node.js

需要预先编译资产。

  • sudo apt-get install -y nodejs

安装捆绑器

  • 获取安装捆绑器
  • rbenv rehash

设置应用程序

在PostgreSQL中创建用户

  • createuser username –pwprompt
  • createdb -Ousername -Eutf8 db_name
  • 测试一下:
    • psql db_name –user username –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(粘贴你的秘密配置)*在你的dev机器上:* bundle exec cap production deploy * bundle exec cap production:update_crontab

配置logrotate

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

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