Próbuję znaleźć sposób na powiązanie mojego serwera Rails produkcyjnego z portem 80 bez konieczności uruchamiania całego serwera z uprawnieniami roota. Moje pytanie jest w zasadzie takie samo jak "Is there a way for non-root processes to bind to "privileged" ports (<1024) on Linux?", z tym że muszę to zrobić z Railsami. Obecnie dwie pierwsze odpowiedzi na pytanie, do którego się odwołałem, wymagają ode mnie zgody na tłumaczenie CAP_NET_BIND_SERVICE
dla interpretera Ruby (prawdopodobnie nie jest to dobry pomysł) lub przywrócenia uprawnień roota po uruchomieniu serwera (który I'm not sure is possible with Ruby). Jakieś pomysły?Powiązanie serwera Rails z portem 80 w systemie Linux bez uruchamiania go jako root
5
A
Odpowiedz
4
W zasadzie odpowiedź brzmi: nie. Możliwe, że jest jakiś naprawdę odrażający sposób, aby to zadziałało, ale szanse, że tak naprawdę chcesz to zrobić są wyjątkowo niskie. Zamiast tego uruchom Railsy na nieuprawnionym porcie i skonfiguruj prawdziwy serwer WWW, taki jak nginx, aby przekazywać do Rails.
Jako przykład super proste, z nginx można użyć pliku konfiguracyjnego, który wygląda mniej więcej tak:
upstream rails_server {
server localhost:3000;
}
server {
listen 80;
location/{
root /home/deploy_user/rails_app/public;
try_files $uri @missing;
}
location @missing {
proxy_pass http://rails_server;
proxy_set_header Host $http_host;
proxy_redirect off;
}
}
To rozwiązanie jest również lepsze długoterminowe, ponieważ sprawia, że infrastruktura bardziej elastyczne. Na przykład, jeśli chcesz skalować swoją aplikację na wiele komputerów, możesz użyć nginx jako load-balancer i przekazać żądania do całej gamy serwerów Railsowych uruchomionych na różnych komputerach.
Powiązane problemy
- 1. Powiąż serwer WWW z portem 80 bez korzenia
- 2. Błąd uruchamiania serwera Rails Ubuntu
- 3. Jak uruchomić Elasticsearch 2.1.1 jako root w maszynie Linux
- 4. Przenoszenie pliku jako root zachowujący własność linux
- 5. Dlaczego Tomcat działa z portem 8080, ale nie z 80?
- 6. Wykonywanie poleceń jako root bez hasła root lub sudo
- 7. Zainstaluj vim-go w systemie Linux?
- 8. zwijanie Nieudane połączenie z portem lokalnego hosta 80
- 9. Programowo rozmawia z portem szeregowym w systemie OS X lub Linux
- 10. Czy konieczne jest uruchomienie jstack -F jako root (w systemie Linux), a jeśli tak, to dlaczego?
- 11. Dlaczego PyUSB/libusb wymaga uprawnień root (sudo) w systemie Linux?
- 12. Uzyskiwanie EPERM podczas wywoływania pthread_create() dla wątku SCHED_FIFO jako root w systemie Linux
- 13. Usługa WCF w systemie Linux z Apache2
- 14. Podczas korzystania z serwera JMX z portem efemerycznym, jak uzyskać numer portu serwera?
- 15. Błąd segmentacji podczas uruchamiania programu Java w systemie Linux
- 16. ADB otrzymuje odmowę dostępu pomimo uruchamiania jako root
- 17. Jak uruchomić plik node.js jako użytkownik inny niż root?
- 18. Uruchamianie procesu Java jako usługi w systemie Linux
- 19. Sprawdź, czy VT-x jest aktywny bez konieczności ponownego uruchamiania w systemie Linux?
- 20. Jak utworzyć plik na stałe tylko do odczytu w systemie Linux, aby nawet root nie mógł go edytować?
- 21. Czy można uruchamiać skrypty Selenium bez uruchamiania serwera X?
- 22. Uruchamianie Selenium :: WebDriver :: Firefox wewnątrz Xvfb z ruby jako użytkownik bez uprawnień root
- 23. Rails 3 czas uruchamiania serwera aplikacji jest długi
- 24. Instalacja i aktualizacja Java w systemie Linux/CentOS bez monitów
- 25. Boost.Log powiązanie błędów GNU/Linux
- 26. Jak uruchomić nohup jako inny użytkownik bez uruchamiania dwóch procesów?
- 27. Błąd uruchamiania serwera wampirów
- 28. Aktualizacja aktualizacji serwera serwera Linux
- 29. Automatyzacja komunikacji portu szeregowego w systemie Linux
- 30. Zapisywanie pliku Atom w systemie Linux bez utraty metadanych
Czy masz możliwość uruchomienia tradycyjnego serwera WWW na porcie 80 i przesłania żądań do serwera Railsowego działającego na innym porcie? Na przykład, uruchamianie [nginx] (http://wiki.nginx.org/Main) i kierowanie żądań do [thin] (http://code.macournoyer.com/thin/) lub [unicorn] (http: // unicorn.bogomips.org/) działa na porcie nieuprzywilejowanym. –
Szanse na to, że rzeczywiście chcesz to zrobić, są bardzo niskie. Thin, Mongrel, Puma, Unicorn lub cokolwiek innego powinny znajdować się za serwerem nie-Ruby w normalnych wzorcach użytkowania. Zobacz [to pytanie] (http://stackoverflow.com/questions/15469598/why-thin-behind-nginx). – colinm
Tak, po raz pierwszy naprawdę próbowałem wdrożyć aplikację produkcyjną bez pomocy kogoś, kto skonfigurował dla mnie serwer lub PaaS jak Heroku; więc jest duża szansa, że nie wiem, czego chcę. Jeśli chcesz umieścić szczegółową odpowiedź sugerującą alternatywę dla wiązania cienkiego na porcie 80 (jak nginx, jak Jim powiedział w swoim komentarzu), zaakceptowałbym to jako poprawną odpowiedź. – Ajedi32