如何将 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