gpt4 book ai didi

ruby-on-rails - HOW TO:使用OS X 10.10+上运行Ruby on Rails 4,Postgres,Unicorn,Nginx和端口转发的VirtualBox设置Vagrant

转载 作者:行者123 更新时间:2023-12-02 23:36:00 25 4
gpt4 key购买 nike

我将其发布为我遇到的资源的汇总,因为那里的指南无法满足Vagrant提供的虚拟化以及由于该原因而可能发生的错误。

结果,我将参考许多其他人解释并比我更好地格式化的资料,同时仅替换所述资料中的步骤以使它在Vagrant下有效。

在实际的部署环境中,链接的资源就足够了(本文仅适用于Vagrant):


Vagrant 'Getting Started' documentation(Vagrantup)
Installing Ruby via rbenv on Ubuntu 14.04(DigitalOcean)
Deploying with Rails, Unicorn, and Nginx on Ubuntu 14.04(DigitalOcean)
Vagrant Triggers Explanation
Working Vagrant Triggers Port Mapping

最佳答案

步骤1:安装Vagrant和VirtualBox

您可以使用Homebrew或从各自的网站herehere进行安装。

通过自制软件:

brew cask install vagrant
brew cask install virtualbox




第2步:设置无业游民

2.2-首先我们添加一个无用的盒子

Vagrant框是由Vagrant克隆到虚拟机中的映像,我们将使用 Ubuntu repository中的Ubuntu 14.04创建我们的虚拟机。

vagrant box add ubuntu/trusty64


2.3-其次,我们初始化Vagrantfile

虚拟化的流浪者默认提供程序是VirtualBox,因此我们不必在此方面进行任何配置。我们需要做的就是在项目根文件夹中或旁边创建一个 Vagrantfile


Vagrantfile将用作虚拟机内 /vagrant文件夹的“位置标记”,因为与 Vagrantfile相同的文件夹中包含的所有内容都可以在虚拟机内访问。


确保 cd到要从哪个目录开始的共享目录,然后我们要做的就是使用Ubuntu 14.04映像运行 vagrant init

vagrant init ubuntu/trusty64


-现在,我们准备在虚拟机中启动和玩转。



第3步:引导并通过SSH进入我们的虚拟机

要启动然后通过ssh进入我们的虚拟机,我们必须与 Vagrantfile位于同一目录并运行:

vagrant up
vagrant ssh


现在我们准备安装Ruby,Postgres,Rails,Unicorn和Nginx。



步骤4:安装套件并配置我们的虚拟机

4.1-遵循DigitalOcean的安装Ruby和Ruby on Rails指南,直到达到可选步骤 here


注意:在 Install rbenv下,请确保将文件保留为 .bash_profile


4.2-在Ubuntu 14.04上安装Postgresql。

更新apt-get,然后安装Postgres及其依赖项:

sudo apt-get update
sudo apt-get install postgresql postgresql-contrib libpq-dev


4.3-请遵循DigitalOcean关于Rails,Unicorn和Nginx here的部署设置的指南。


注意:请确保参考以下要更换的物品。
在执行第一步之前,请确保您位于共享目录中,这样您就可以从主机访问文件,例如使用崇高文字。要访问您的共享目录,请输入 cd /vagrant
配置Unicorn:复制提供的配置,但是“ Unicorn无法在Virtual Box共享文件夹上存储.sock文件,因此您要做的就是修改套接字[...]” solution at source。感谢Dave Long。
创建Unicorn初始化脚本:但是,复制提供的配置:


USER将始终为 vagrant
我们必须从 /home路径中删除 APP_ROOT,也只剩下 /$USER/$APP_NAME
最后,鉴于OS X上的端口低于1024,我们将不得不强制Rails应用程序在更高的操作系统上运行,因此:


更改此行: CMD="cd $APP_ROOT && bundle exec unicorn -c config/unicorn.rb -E $ENV -D"
改为: CMD="cd $APP_ROOT && bundle exec unicorn -c config/unicorn.rb -E $ENV -D -l 0.0.0.0:3000"


安装和配置Nginx:复制提供的配置,但是:


我们将路径更改为 unicorn.sock,因此将路径修改为 server unix:/home/tmp/sockets/unicorn.sock fail_timeout=0;
root配置行中,确保将 deploy替换为 vagrant,产生: root /home/vagrant/APPNAME/public;
最后,Nginx可能无法正确找到Rails应用程序,因此我们将 proxy_pass设置为 http://localhost:3000;



由于我们将 unicorn.sock文件的位置更改为/ tmp /文件夹中的文件夹(每次我们使用 halt机器时都会删除该文件夹),因此我们将必须通过流浪汉设置一些 shell provisions来确保每当我们为该项目发出 mkdir /tmp/sockets时,都会运行命令 vagrant up

只需在任意位置的 configure中的 Vagrantfile块下添加以下内容:

# Create the /tmp/sockets folder we need every time on startup
config.vm.provision "shell",
inline: "mkdir /tmp/sockets"


现在,每次要启动虚拟机时,都必须运行 vagrant up而不是 vagrant up --provision,并且将为我们创建/ tmp / sockets文件夹。如果我们不创建此文件夹,Unicorn将无法启动!



步骤5:端口转发

此时,只要在Vagrantfile中具有端口转发设置,您就可以在 http://localhost:8080/tasks上访问您的应用程序。但是,实际上,您永远都不会在端口上访问您的应用程序,因此我们需要向前移植并解决此问题。如前所述,Vagrant无法转发到低于1024的端口,因为它们在OS X上具有特权。在 sudo下运行Vagrant也无济于事,因为此特权未传递给VBoxManage进​​程Vagrant产生。

结果,我们会将主机上的端口8080转发到虚拟机(来宾)的端口80。类似地,我们会将主机上端口80上的所有流量转发到主机上的端口8080。这样我们可以:


在我们的主机上访问 localhost ...
它将转发到我们主机上的 localhost:8080 ...
它将被转发到我们的来宾(虚拟)计算机上的 localhost:80


最后,我们可以使用 localhost访问我们的应用程序!

5.1-将主机转发到来宾

主机是您的物理机,来宾是您的虚拟机。我们将把主机上的8080端口转发到来宾上的80端口。


打开您的 Vagrantfile并找到其中包含 config.vm.network的行。
取消注释该行并对其进行编辑,同时添加另一行,使其类似于:




config.vm.network "forwarded_port", guest: 80, host: 8080
config.vm.network "forwarded_port", guest: 443, host: 8443


现在,您已经将默认的http和https端口从您的主机转发到了来宾。

5.2-端口映射主机的端口

现在我们需要将主机的端口80和443映射到主机的端口8080和8443,以便流浪汉可以将其拾取!我们将使用一个名为 vagrant-triggers的漂亮插件,因为我们不希望这种情况一直发生。我们仅在运行Vagrant实例时才需要它。使用 vagrant-triggers将使我们能够根据告诉Vagrant执行的命令在主机上执行命令。


通过在与 vagrant-triggers相同的目录中执行以下命令来安装 Vagrantfilevagrant plugin install vagrant-triggers
将以下配置粘贴到 Vagrantfile块中任意位置的 configure中。




config.trigger.after [:provision, :up, :reload] do
system('echo "
rdr pass inet proto tcp from any to any port 80 -> 127.0.0.1 port 8080
rdr pass inet proto tcp from any to any port 443 -> 127.0.0.1 port 8443
" | sudo pfctl -ef - > /dev/null 2>&1; echo "==> Fowarding Ports: 80 -> 8080, 443 -> 8443"')
end

config.trigger.after [:halt, :destroy] do
system("sudo pfctl -ef /etc/pf.conf > /dev/null 2>&1; echo '==> Removing Port Forwarding'")
end


因此,运行 vagrant up将设置端口映射,而运行 vagrant halt将删除它。

现在,您可以从 http://localhost/tasks访问您的应用程序。

希望本指南对大家有所帮助。我不得不花点时间寻找信息,以了解为什么这在Vagrant的管理下不起作用。

非常感谢DigitalOcean和这个社区的成员,他们的成员为本指南提供了内容,包括在优胜美地和Unicorn套接字配置下指向 pfctl映射的链接。

如果您发现指南有任何问题,请给我发消息,以便如有需要,我可以进行调查和修改!

编码愉快,

jp

关于ruby-on-rails - HOW TO:使用OS X 10.10+上运行Ruby on Rails 4,Postgres,Unicorn,Nginx和端口转发的VirtualBox设置Vagrant,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32669067/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com