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

oprakyz7  于 2022-11-16  发布在  Apache
关注(0)|答案(1)|浏览(148)

我正在Linode上运行Ubuntu 22.04服务器,并尝试使用Apache和Puma部署simple Sinatra app,但目前,我只能显示索引页,所以我认为我遗漏了一个简单的步骤。我不知道如何将Puma连接到Apache,所以可能有一些相关的东西我遗漏了。以下是关键文件:
网站example.com/web.rb

require 'sinatra'

get '/' do
  "Hello World"
end

网站example.com/config/puma.rb

workers 2
threads 5, 5

preload_app!

port        5000
environment 'development'

/etc/apache2/sites-available/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>

然后,我运行了以下命令,没有出现问题:
一个月一个月一个月一个月

8ftvxx2r

8ftvxx2r1#

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

/var/www/示例/web.rb

require 'sinatra'

get '/' do
  "Hello World"
end

/var/www/示例/过程文件

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/config.ru

require './web'
run Sinatra::Application

/var/www/示例/配置/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/apache 2/可用站点/示例.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.服务

[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.套接字

[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/示例
    1.捆绑安装
  2. mkdir /var/www/示例/日志
  3. mkdir /var/www/示例/临时文件夹
  4. mkdir /var/www/示例/临时文件/puma
  5. chmod 777 /var/www/示例/日志
  6. chmod 755 /var/www/示例/临时文件
  7. chmod 755 /var/www/示例/临时文件/puma
  8. a2 ensite示例
  9. a2enmod
    代理代理_ajp代理_http重写缩小头代理_平衡器代理_连接代理_html
  10. systemctl守护程序重新加载
  11. systemctl启用puma.服务
  12. systemctl启用puma.套接字
  13. systemctl启动泵插座
  14. systemctl启动puma.服务
  15. systemctl重新加载apache 2

相关问题