ISPconfig, Apache Passenger 6 und Ruby on Rails 6: Zugriffsproblem

Frank77

New Member
Hallo,
ich habe ISPconfig 3.2 auf einem Ubuntu 20.04 nach der Anleitung hier erfolgreich installiert:

Soweit erkennbar, funktioniert alles, auch Let's Encrypt, auf Anhieb. Vielen Dank schon einmal für das Dokumentieren der Vorgehensweise!

Ich möchte auf einigen meiner Domains Ruby on Rails anbieten unter Apache Passenger (siehe www.phusionpassenger.com), der Industriestandard für Rails Apps. Hierzu habe ich nach der obigen Installation noch folgendes gemacht. Es gab etwas Probleme, da 'bundler' gegebenenfalls Zugriff auf 'sudo' benötigt, um RubyGems zu installieren (ich dachte das geht mit RVM ohne `sudo`), aber das habe ich per sudoers file lösen können.

Falls es eine Anleitung für "ISPconfig + Apache/(Nginx) Passenger + Ruby on Rails" noch nicht gibt, und ich das zum Laufen bekomme, könnte ich eine schreiben.
Frage: Gibt es eine solche Anleitung schon? Google hat nichts gefunden.


Bash:
# RVM installieren (Ruby Version Manager)
$ curl -sSL https://get.rvm.io | bash -s stable
...
Thanks for installing RVM 

# web1: Kundenkonto
# jb-mp: Shellaccount des Kundenkontos, für git und Bundler
$ adduser root rvm
$ adduser jb-mp rvm
exit
# relogin as root

# Ruby unter RVM installieren
$ rvm install 2.7.0
$ rvm default 2.7.0
$ gem install passenger
$ passenger build-native support
$ cd ...../web1 ; bundle install

Mit den folgenden Zeilen als Apache Konfigurationserweiterung im ISPConfig-Fenster startet Passenger auch, wenn ich meine Rails App aufrufe:

Apache-Konfiguration:
    DocumentRoot {DOCROOT}/public
    PassengerStickySessions on

    <Directory {DOCROOT}/public>
        Allow from all
        Options -MultiViews
        Require all granted
    </Directory>

Passenger möchte für den aktuellen User eine 'native support library' kompilieren, und scheitert daran, dass er kein Verzeichnis ".passenger" im Kundenverzeichnis erstellen kann.

Code:
==> /var/log/apache2/error.log <==
App 2761112 stdout:
App 2761112 stderr:  [passenger_native_support.so] trying to compile for the current user (web1) and Ruby interpreter...
App 2761112 stderr:      (set PASSENGER_COMPILE_NATIVE_SUPPORT_BINARY=0 to disable)
[ 2021-01-17 09:55:30.2307 2527275/7f312c4bb700 age/Cor/App/Implementation.cpp:304 ]: Could not spawn process for application /var/www/CENSORED/web: An error occurred while starting up the preloader.
  Error ID: 046c1b8b
  Error details saved to: /tmp/passenger-error-3UMfjU.html
  Message from application: Operation not permitted @ dir_s_mkdir - /var/www/clients/client1/web1/.passenger (Errno::EPERM)
  /usr/local/rvm/rubies/ruby-2.7.0/lib/ruby/2.7.0/fileutils.rb:250:in `mkdir'
  /usr/local/rvm/rubies/ruby-2.7.0/lib/ruby/2.7.0/fileutils.rb:250:in `fu_mkdir'
  ...
  /usr/lib/ruby/vendor_ruby/phusion_passenger/native_support.rb:295:in `mkdir'
  ...

Dies erfordert ein Löschen des 'Immutable' flags auf "web1", Erstellen des Verzeichnisses ".passenger" und Wiederherstellung von "+i".
Frage: Warum ist auf "web1" hier das +i Flag gesetzt?

Bash:
# chattr -i .
# mkdir .passenger
# chown web1.client1 .passenger
# chmod g+w .passenger
# chattr +i .

Danach geht es einen Schritt weiter, aber Erfolg ist das noch nicht. Selbst nicht mit der COMPILE Variablen oben aus der Fehlermeldung auf "0" gesetzt.
An dieser Stelle habe ich erst einmal aufgegeben. Bin ich vielleicht komplett auf dem falschen Weg?
Hat das jemand schon mal erfolgreich zum Laufen bekommen?

Ich würde meinen Kunden gerne Ruby on Rails anbieten können, aber so richtig "rund" läuft das noch nicht.

Bin für jeden Hinweis dankbar!


Code:
==> /var/log/apache2/error.log <==
App 2768505 stdout:  
App 2768505 stderr: [passenger_native_support.so] trying to compile for the current user (web1) and Rub
y interpreter...
App 2768505 stderr: (set PASSENGER_COMPILE_NATIVE_SUPPORT_BINARY=0 to disable)
App 2768505 stderr: Unable to autodetect the currently active RVM gem set name. This could happen if you
ran this program using 'sudo' instead of 'rvmsudo'. When using RVM, you're always supposed to use 'rvms
udo' instead of 'sudo!'.
App 2768505 stderr:
App 2768505 stderr: Please try rerunning this program using 'rvmsudo'. If that doesn't help, please cont
act this program's author for support.
[ 2021-01-17 10:41:25.2396 2527275/7f312c4bb700 age/Cor/App/Implementation.cpp:304 ]: Could not spawn pr
ocess for application /var/www/mealplan.jensbenecke.de/web: An error occurred while starting up the prel
oader.
Error ID: 82ca3a5f
Error details saved to: /tmp/passenger-error-BTLmEU.html
Message from application: exit (SystemExit)
/usr/lib/ruby/vendor_ruby/phusion_passenger/platform_info/ruby.rb:311:in `exit'
/usr/lib/ruby/vendor_ruby/phusion_passenger/platform_info/ruby.rb:311:in `rvm_ruby_string'
 

Till

Administrator
Frage: Gibt es eine solche Anleitung schon? Google hat nichts gefunden.

Nicht dass ich wüsste.

Frage: Warum ist auf "web1" hier das +i Flag gesetzt?

Andernfalls könnte ein Kunde z.B. durch löschen des web Verzeichnisses den kompletten apache server dazu bringen dass er nicht mehr startet oder das web löschen und es auf ein anderes Verzeichnis zeigen lassen.

Der Platzhalter {DOCROOT} cerweist ja auf den Symlink zum web und nicht auf das Verzeichnis selbst, versuch es mal mit dem Platzhalter {DOCROOT_CLIENT}
 

Frank77

New Member
und *boom*, plötzlich geht es. Danke! :D

Allerdings eine Beschreibung der {...} Variablen in der Anwendung würde ich mir schon wünschen, das war wirklich nicht intuitiv zu verstehen.
 

Werbung

Top