如何在Ubuntu上使用Apache和Puma部署Ruby (Sinatra框架)?



我在Linode上运行Ubuntu 22.04服务器,并试图使用Apache与Puma部署一个简单的Sinatra应用程序,但目前,我只能显示索引页,所以我相信我错过了一个简单的步骤。我不确定如何将Puma连接到Apache,所以可能有一些与此相关的东西我遗漏了。以下是关键文件:

/var/www/example.com/web.rb

require 'sinatra'
get '/' do
"Hello World"
end

/var/www/example.com/config/puma.rb

workers 2
threads 5, 5
preload_app!
port        5000
environment 'development'

/etc/输入/网站/example.conf

<VirtualHost *:80>
ServerAdmin info@example.com
ServerName sinatra.example.com
DocumentRoot /var/www/example.com
<Directory /var/www/example.com>
DirectoryIndex web.rb
Allow from all
</Directory>
ErrorLog /var/www/example.com/logs/errors.log
CustomLog /var/www/example.com/logs/access.log combined
RewriteEngine on
RewriteCond %{SERVER_NAME} =sinatra.example.com
RewriteRule ^ https://%{SERVER_NAME}%{REQUEST_URI} [END,NE,R=permanent]
</VirtualHost>

然后运行这些命令,没有问题:

bundle installa2ensitesystemctl reload apache2

您需要设置一个反向代理(如@konstantin-strukov所提到的)。这里是我设置的文件和我运行的命令的完整列表(不包括安装apache和ruby),因此没有歧义。

/var/www/例子/web.rb

require 'sinatra'
get '/' do
"Hello World"
end

/var/www/例子/Procfile

web: bundle exec puma -C config/puma.rb

/var/www/例子/GEMFILE

source 'http://rubygems.org'
ruby '3.0.4'
gem 'sinatra', '~>2'
gem 'puma', '~>5'

注意:Sinatra最近发布了3.0.0版本,Puma发布了6.0.0版本,这导致了与Rack的冲突,所以我需要使用以前的版本才能使其工作。

/var/www/例子/config.ru

require './web'
run Sinatra::Application

/var/www/例子/config/puma.rb

workers 2
threads 1, 2
preload_app!
port        5000
environment "development"
app_dir = File.expand_path("../..", __FILE__)
bind "unix://#{app_dir}/tmp/puma/puma.sock"
stdout_redirect "#{app_dir}/logs/puma.stdout.log", "#{app_dir}/logs/puma.stderr.log", true
pidfile "#{app_dir}/tmp/puma/pid"
state_path "#{app_dir}/tmp/puma/state"
directory "#{app_dir}/"
activate_control_app "unix://#{app_dir}/tmp/puma/pumactl.sock"
prune_bundler

/etc/输入/网站/example.conf

<VirtualHost *:80>
ServerAdmin info@example.com
ServerName sinatra.example.com
ProxyRequests Off
<Proxy *>
Order Allow,Deny
Allow from all
</Proxy>
ProxyPass / http://localhost:5000/
ProxyPassReverse / http://localhost:5000/
ProxyVia On
DocumentRoot /var/www/example
<Directory /var/www/example>
DirectoryIndex web.rb
Allow from all
</Directory>
ErrorLog /var/www/example/logs/errors.log
CustomLog /var/www/example/logs/access.log combined
RewriteEngine on
RewriteCond %{SERVER_NAME} =sinatra.example.com
RewriteRule ^ https://%{SERVER_NAME}%{REQUEST_URI} [END,NE,R=permanent]
</VirtualHost>

/etc/systemd/系统/puma.service

[Unit]
Description=Puma HTTP Server
After=network.target
Requires=puma.socket
[Service]
Type=notify
WatchdogSec=10
WorkingDirectory=/var/www/example
ExecStart=/usr/local/bin/puma -C /var/www/example/config/puma.rb
Restart=always
[Install]
WantedBy=multi-user.target

/etc/systemd/系统/puma.socket

[Unit]
Description=Puma HTTP Server Accept Sockets
[Socket]
ListenStream=0.0.0.0:5000
# Socket options matching Puma defaults
NoDelay=true
ReusePort=true
Backlog=1024
[Install]
WantedBy=sockets.target
  1. cd/var/www/example

  2. 包安装

  3. mkdir/var/www/example/logs

  4. mkdir/var/www/example/tmp

  5. mkdir/var/www/example/tmp/puma

  6. chmod 777/var/www/example/logs

  7. chmod 755/var/www/example/tmp

  8. chmod 755/var/www/example/tmp/puma

  9. a2ensite例子
  10. a2enmod

    proxy proxy_ajp proxy_http rewrite deflate headers proxy_balancer proxy_connect proxy_html

  11. systemctl daemon-reload

  12. systemctl enable puma.service

  13. systemctl enable puma.socket

  14. systemctl start puma.socket

  15. systemctl start pump .service

  16. systemctl reload apache2

最新更新