Ich führe den Hauptdienst bereits auf Apache2 aus, daher möchte ich die Netzwerkeinstellungen für die REST-API nicht ändern. Also starte ich Sinatra auf Apache2. Sollte es ein Leistungsproblem geben, rufe ich die Rust-Funktion über FFI auf. Sinatra veröffentlicht die REST-API parallel zur von Apache2 veröffentlichten Haupt-App. Machen Sie es in der folgenden Form aufrufbar.
http://localhost:8080/main_app
http://localhost:8080/sinatra
Erstellen Sie mit Vagrant eine experimentelle Umgebung. Die Installationselemente lauten wie folgt.
Wenn es mit 1024 MB Arbeitsspeicher funktioniert, sollte die Arbeitslast auf dem Produktionsserver gering sein. Da "vagrant ssh" einen Fehler verursachen kann, wird ssh zu Beginn der Installation festgelegt.
Vagrantfile
# -*- mode: ruby -*-
# vi: set ft=ruby :
Vagrant.configure("2") do |config|
  config.vm.box = "ubuntu/bionic64"
  config.vm.network "forwarded_port", guest: 80, host: 8080, host_ip: "127.0.0.1"
  config.vm.synced_folder "./data", "/vagrant_data"
  config.vm.provider "virtualbox" do |vb|
    vb.memory = "1024"
  end
  config.vm.provision "shell", inline: <<-SHELL
    # To solve the issue of "[email protected]: permission denied (publickey)."
    sudo sed -i 's/PasswordAuthentication no/PasswordAuthentication yes/g' /etc/ssh/sshd_config; \
    sudo systemctl restart sshd;
    apt-get update
    # Installing Apache2
    apt-get install -y apache2
    # Installing Ruby & sinatra
    apt-get install -y ruby
    gem install bundler
    gem install sinatra
    gem install sinatra-contrib
    
    # [Installing Passenger + Apache on Ubuntu 18.04 LTS (with APT)]
    # (https://www.phusionpassenger.com/library/install/apache/install/oss/bionic/)
    sudo apt-get install -y dirmngr gnupg
    sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv-keys 561F9B9CAC40B2F7
    sudo apt-get install -y apt-transport-https ca-certificates
    sudo sh -c 'echo deb https://oss-binaries.phusionpassenger.com/apt/passenger bionic main > /etc/apt/sources.list.d/passenger.list'
    sudo apt-get update
    sudo apt-get install -y libapache2-mod-passenger
    
    sudo a2enmod passenger
    sudo a2enmod headers
    sudo apache2ctl restart
  SHELL
end
Melden Sie sich mit vagrant ssh an, um dies zu überprüfen. Das Passwort ist "vagrant".
Apache2
Die Version von Apache2 bestimmt, ob Apache2-Einstellungen geschrieben werden sollen ("Alle erforderlich").
$ apache2 -v
Server version: Apache/2.4.29 (Ubuntu)
Server built:   2020-08-12T21:33:25
Ruby
Die Ruby-Version wird auch hier als normal verwendbar bestätigt.
$ ruby -v
ruby 2.5.1p57 (2018-03-29 revision 63029) [x86_64-linux-gnu]
Der Speicherort der ausführbaren Ruby-Datei wird in den Apache2-Einstellungen (PassengerRuby / usr / bin / ruby2.5) wiedergegeben.
Ruby Gems (bundler,sinatra,sinatra-contrib)
Die folgenden Elemente wurden von der Arbeit bis zu diesem Punkt installiert.
$gem list
backports (3.18.2)
bigdecimal (default: 1.3.4)
bundler (2.1.4)
cmath (default: 1.0.0)
csv (default: 1.0.0)
date (default: 1.0.0)
dbm (default: 1.0.0)
did_you_mean (1.2.0)
etc (default: 1.0.0)
fcntl (default: 1.0.0)
fiddle (default: 1.0.0)
fileutils (default: 1.0.2)
gdbm (default: 2.0.0)
io-console (default: 0.4.6)
ipaddr (default: 1.2.0)
json (default: 2.1.0)
minitest (5.10.3)
multi_json (1.15.0)
mustermann (1.1.1)
net-telnet (0.1.1)
openssl (default: 2.1.1)
power_assert (0.2.7)
psych (default: 3.0.2)
rack (2.2.3, 1.6.4)
rack-protection (2.0.8.1)
rake (12.3.1)
rdoc (default: 6.0.1)
ruby2_keywords (0.0.2)
scanf (default: 1.0.0)
sdbm (default: 1.0.0)
sinatra (2.0.8.1)
sinatra-contrib (2.0.8.1)
stringio (default: 0.0.1)
strscan (default: 1.0.0)
test-unit (3.2.5)
tilt (2.0.10)
webrick (default: 1.4.2)
zlib (default: 1.0.0)
Passenger
Überprüfen Sie den Vorgang unter Schritt 3: Installation überprüfen.
$ sudo /usr/bin/passenger-config validate-install
What would you like to validate?
Use <space> to select.
If the menu doesn't display correctly, press '!'
 . ●  Passenger itself
   ○  Apache
-------------------------------------------------------------------------
 * Checking whether this Passenger install is in PATH... ✓
 * Checking whether there are no other Passenger installations... ✓
Everything looks good. :-)
Das Aktivieren von "Apache" erkennt es nicht. Es ist nicht erforderlich, Apache2 vom Passagier zu erkennen, daher gibt es kein Problem.
Überprüfen Sie den Speicherauslastungsstatus.
$ sudo /usr/sbin/passenger-memory-stats
Version: 6.0.6
Date   : 2020-09-03 00:07:00 +0000
--------- Apache processes ----------
PID   PPID  VMSize     Private  Name
-------------------------------------
4238  1     153.9 MB   0.5 MB   /usr/sbin/apache2 -k start
4483  4238  1268.4 MB  0.7 MB   /usr/sbin/apache2 -k start
4484  4238  1268.4 MB  0.6 MB   /usr/sbin/apache2 -k start
### Processes: 3
### Total private dirty RSS: 1.78 MB
-------- Nginx processes --------
### Processes: 0
### Total private dirty RSS: 0.00 MB
---- Passenger processes -----
PID   VMSize    Private  Name
------------------------------
4468  389.7 MB  2.3 MB   Passenger watchdog
4471  946.3 MB  3.4 MB   Passenger core
### Processes: 2
### Total private dirty RSS: 5.64 MB
Stellen Sie sicher, dass der Passagier Ruby erkennt. Siehe Bestimmen Sie den Ruby-Befehl, den der Passagier verwenden soll.
$ passenger-config about ruby-command
passenger-config was invoked through the following Ruby interpreter:
  Command: /usr/bin/ruby2.5
  Version: ruby 2.5.1p57 (2018-03-29 revision 63029) [x86_64-linux-gnu]
  To use in Apache: PassengerRuby /usr/bin/ruby2.5
  To use in Nginx : passenger_ruby /usr/bin/ruby2.5
  To use with Standalone: /usr/bin/ruby2.5 /usr/bin/passenger start
The following Ruby interpreter was found first in $PATH:
  Command: /usr/bin/ruby
  Version: ruby 2.5.1p57 (2018-03-29 revision 63029) [x86_64-linux-gnu]
  To use in Apache: PassengerRuby /usr/bin/ruby
  To use in Nginx : passenger_ruby /usr/bin/ruby
  To use with Standalone: /usr/bin/ruby /usr/bin/passenger start
## Notes for RVM users
Do you want to know which command to use for a different Ruby interpreter? 'rvm use' that Ruby interpreter, then re-run 'passenger-config about ruby-command'.
Denken Sie daran, dass "/ usr / bin / ruby2.5" in Apache2 festgelegt ist.
Um die Sinatra-App in der Apache2 + Passenger-Konfiguration auszuführen, sind in der Anwendungskonfiguration Vorsichtsmaßnahmen enthalten. Für das Anwendungsverzeichnis sind öffentliche und tmp-Verzeichnisse erforderlich. Der Inhalt kann leer sein.
/home/vagrant/sinatra$ $ ls -al
total 32
drwxr-xr-x 4 vagrant vagrant 4096 Sep  3 00:59 .
drwxr-xr-x 7 vagrant vagrant 4096 Sep  3 00:46 ..
-rw-r--r-- 1 vagrant vagrant   79 Sep  3 00:50 Gemfile
-rw-r--r-- 1 vagrant vagrant   83 Sep  3 00:59 app.rb
-rw-r--r-- 1 vagrant vagrant   63 Sep  3 00:31 config.ru
drwxr-xr-x 2 vagrant vagrant 4096 Sep  3 00:31 public
drwxr-xr-x 2 vagrant vagrant 4096 Sep  3 00:31 tmp
/home/vagrant/sinatra/Gemfile
source 'https://rubygems.org/'
gem 'sinatra'
gem 'sinatra-contrib'
gem 'rack'
/home/vagrant/sinatra/app.rb
Bundler.require
  get '/' do
    "I did it my way"
  end
/home/vagrant/sinatra/config.ru
require File.absolute_path("app.rb")
run Sinatra::Application
Führen Sie den Bundler aus und legen Sie die Anwendungsabhängigkeiten fest.
~/sinatra$ bundler install
Fetching gem metadata from https://rubygems.org/.........
Resolving dependencies...
Using backports 3.18.2
Following files may not be writable, so sudo is needed:
  /usr/local/bin
  /var/lib/gems/2.5.0
  /var/lib/gems/2.5.0/build_info
  /var/lib/gems/2.5.0/cache
  /var/lib/gems/2.5.0/doc
  /var/lib/gems/2.5.0/extensions
  /var/lib/gems/2.5.0/gems
  /var/lib/gems/2.5.0/specifications
Using bundler 2.1.4
Using multi_json 1.15.0
Using ruby2_keywords 0.0.2
Using mustermann 1.1.1
Using rack 2.2.3
Using rack-protection 2.0.8.1
Using tilt 2.0.10
Using sinatra 2.0.8.1
Using sinatra-contrib 2.0.8.1
Bundle complete! 3 Gemfile dependencies, 10 gems now installed.
Use `bundle info [gemname]` to see where a bundled gem is installed.
OK, wenn Gemfile.lock erstellt wurde.
/home/vagrant/sinatra/Gemfile.lock
GEM
  remote: https://rubygems.org/
  specs:
    backports (3.18.2)
    multi_json (1.15.0)
    mustermann (1.1.1)
      ruby2_keywords (~> 0.0.1)
    rack (2.2.3)
    rack-protection (2.0.8.1)
      rack
    ruby2_keywords (0.0.2)
    sinatra (2.0.8.1)
      mustermann (~> 1.0)
      rack (~> 2.0)
      rack-protection (= 2.0.8.1)
      tilt (~> 2.0)
    sinatra-contrib (2.0.8.1)
      backports (>= 2.8.2)
      multi_json
      mustermann (~> 1.0)
      rack-protection (= 2.0.8.1)
      sinatra (= 2.0.8.1)
      tilt (~> 2.0)
    tilt (2.0.10)
PLATFORMS
  ruby
DEPENDENCIES
  rack
  sinatra
  sinatra-contrib
BUNDLED WITH
   2.1.4
Verknüpfen Sie ein von Apache2 erkanntes Verzeichnis.
$ sudo ln -s /home/vagrant/sinatra sinatra
$ ls -l
total 4
drwxr-xr-x 2 root root 4096 Sep  2 23:30 html
lrwxrwxrwx 1 root root   21 Sep  3 00:35 sinatra -> /home/vagrant/sinatra
[Deploying an app to a sub-URI or subdirectory]
Bearbeiten Sie die Konfigurationsdatei unter (https://www.phusionpassenger.com/library/deploy/apache/deploy/ruby/#deploying-an-app-to-a-sub-uri-or-subdirectory).
Da bei der Installation von Passenger ### Begin bis ### End beschrieben werden, fügen Sie die Einstellungen danach hinzu. Die Einstellungselemente unterscheiden sich je nach Version des Passagiers. Seien Sie also vorsichtig, wenn Sie verschiedene Versionen des Passagiers verwenden.
Geben Sie den Speicherort der ausführbaren Ruby-Datei in "PassengerRuby" an.
Wenn die Version von Apache2 2.4 oder höher ist, beschreiben Sie "Alle gewährt erforderlich".
Es gibt nur einen Ort, an dem RackBaseURI geschrieben werden kann, was korrekt ist.
/etc/apache2/mods-available/passenger.conf
### Begin automatically installed Phusion Passenger config snippet ###
<IfModule mod_passenger.c>
  PassengerRoot /usr/lib/ruby/vendor_ruby/phusion_passenger/locations.ini
  PassengerDefaultRuby /usr/bin/passenger_free_ruby
</IfModule>
### End automatically installed Phusion Passenger config snippet ###
PassengerRuby /usr/bin/ruby2.5
RackBaseURI /sinatra
Alias /sinatra /var/www/sinatra/public
<Location /sinatra>
  PassengerBaseURI /sinatra
  PassengerAppRoot /var/www/sinatra
</Location>
<Directory /var/www/sinatra/public>
  Allow from all
  Options -MultiViews
  Require all granted
</Directory>
$ sudo service apache2 restart
Überprüfen Sie den Status für alle Fälle.
$ sudo service apache2 status
● apache2.service - The Apache HTTP Server
   Loaded: loaded (/lib/systemd/system/apache2.service; enabled; vendor preset: enabled)
  Drop-In: /lib/systemd/system/apache2.service.d
           └─apache2-systemd.conf
   Active: active (running) since Thu 2020-09-03 00:25:40 UTC; 47s ago
  Process: 4811 ExecStop=/usr/sbin/apachectl stop (code=exited, status=0/SUCCESS)
  Process: 4817 ExecStart=/usr/sbin/apachectl start (code=exited, status=0/SUCCESS)
 Main PID: 2595 (code=exited, status=0/SUCCESS)
    Tasks: 73 (limit: 1152)
   CGroup: /system.slice/apache2.service
           ├─4871 /usr/sbin/apache2 -k start
           ├─4874 Passenger watchdog
           ├─4878 Passenger core
           ├─4892 /usr/sbin/apache2 -k start
           └─4893 /usr/sbin/apache2 -k start
Sep 03 00:25:40 ubuntu-bionic systemd[1]: Starting The Apache HTTP Server...
Sep 03 00:25:40 ubuntu-bionic apachectl[4817]: AH00558: apache2: Could not reliably determine the server's fully qualified d
Sep 03 00:25:40 ubuntu-bionic systemd[1]: Started The Apache HTTP Server.
Passagier läuft auch.
Zunächst die Haupt-App.

Überprüfen Sie die Funktion von Sinatra.

Wenn es nicht funktioniert, wird ein Fehlerbildschirm angezeigt.

Wenn Sie nicht einmal den Passagierfehlerbildschirm sehen, haben Sie den Passagier überhaupt nicht erreicht. Es besteht die Möglichkeit einer Fehlkonfiguration von Apache2 selbst. Wenn Sie eine Fehlermeldung erhalten, überprüfen Sie / var / log / apache2 / error.log.
Die Punkte, die aufgrund mangelnder Studien nicht gelöst wurden, sind wie folgt.
gem install sinatra machen.Recommended Posts