如何将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-凯基
- 复制公钥:
- 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 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
- git clone https://github.com/sstephenson/rbenv.git~ / .rbenv
- echo’export PATH =“$ HOME / .rbenv / bin:$ PATH”’>>〜/ .bashrc
- echo’eval“$(rbenv init – )”’>>〜/ .bashrc
- source~ / .bashrc
- git clone 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 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
- 亚马逊Route 53 + Heroku应用程序无法从某些地方访问 – 该怎么办?
- 运行迁移时出现重复的列名错误
- 未定义的方法`空?’ 为零:NilClass
- 迁移时“pg_dump:无效选项 – i”
- Rails 4 + Capistrano 3:致命:部署时无法从远程存储库读取
- SSL_connect SYSCALL返回= 5 errno = 0 state = SSLv2 / v3读取服务器hello A – Faraday :: Error :: ConnectionFailed
- Rails form_for with file_field and remote => true and format =>:js
- Bundler :: RubyVersionMismatch:您的Ruby版本是1.9.3,但您的Gemfile指定为2.0.0
- Rails 3:“MyModel.all”的默认顺序是什么?