Java-Webanwendung mit Tomcat auf Port 80 ausliefern

Ich arbeite ja ganz gerne mit der JiffyBox und der aktuellsten Ubuntu Langzeit-Support Version (Precise Pangolin – 12.04 LTS). Wenn man eine Java-Webanwendung mit Tomcat auf dem Standardport für Webserver (Port 80) bereitstellen möchte, gibt es dafür verschiedene Wege.

Die schnellste Möglichkeit könnte es sein, Tomcat per apt-get zu installieren und in der server.xml den Tomcat-Standardport von 8080 auf 80 zu ändern. Allerdings wird dann beim Starten des Servers ein Fehler auftreten. Schließlich werden Root-Rechte benötigt, um einen der ersten 1024 Ports zu reservieren:

Jan 22, 2013 11:53:51 PM org.apache.coyote.http11.Http11Protocol init
SEVERE: Error initializing endpoint
java.net.BindException: Permission denied <null>:80
        at org.apache.tomcat.util.net.JIoEndpoint.init(JIoEndpoint.java:549)
        at org.apache.coyote.http11.Http11Protocol.init(Http11Protocol.java:176)
        at org.apache.catalina.connector.Connector.initialize(Connector.java:1049)
        at org.apache.catalina.core.StandardService.initialize(StandardService.java:703)
        at org.apache.catalina.core.StandardServer.initialize(StandardServer.java:838)
        at org.apache.catalina.startup.Catalina.load(Catalina.java:538)
        at org.apache.catalina.startup.Catalina.load(Catalina.java:562)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
        at java.lang.reflect.Method.invoke(Method.java:616)
        at org.apache.catalina.startup.Bootstrap.load(Bootstrap.java:261)
        at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:413)
Caused by: java.net.BindException: Permission denied
        at java.net.PlainSocketImpl.socketBind(Native Method)
        at java.net.AbstractPlainSocketImpl.bind(AbstractPlainSocketImpl.java:353)
        at java.net.ServerSocket.bind(ServerSocket.java:336)
        at java.net.ServerSocket.<init>(ServerSocket.java:202)
        at java.net.ServerSocket.<init>(ServerSocket.java:158)
        at org.apache.tomcat.util.net.DefaultServerSocketFactory.createSocket(DefaultServerSocketFactory.java:50)
        at org.apache.tomcat.util.net.JIoEndpoint.init(JIoEndpoint.java:538)
        ... 12 more
Jan 22, 2013 11:53:51 PM org.apache.catalina.core.StandardService initialize
SEVERE: Failed to initialize connector [Connector[HTTP/1.1-80]]
LifecycleException:  Protocol handler initialization failed: java.net.BindException: Permission denied <null>:80
        at org.apache.catalina.connector.Connector.initialize(Connector.java:1051)
        at org.apache.catalina.core.StandardService.initialize(StandardService.java:703)
        at org.apache.catalina.core.StandardServer.initialize(StandardServer.java:838)
        at org.apache.catalina.startup.Catalina.load(Catalina.java:538)
        at org.apache.catalina.startup.Catalina.load(Catalina.java:562)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
        at java.lang.reflect.Method.invoke(Method.java:616)
        at org.apache.catalina.startup.Bootstrap.load(Bootstrap.java:261)
        at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:413)
Jan 22, 2013 11:53:51 PM org.apache.catalina.startup.Catalina load

Natürlich gibt es viele Möglichkeiten, das Problem anzugehen. Hier jetzt eine dreckige und eine saubere Lösung:

  1. Schnell und unsicher (einfach dreckig): Eigenen Tomcat-Server installieren und als Root starten
  2. Aufwendiger und sicher (schöööön sauber): Standard Apache-Server und Tomcat installieren und per AJP (Apache JServ Protocol) miteinander verbinden

Weiterlesen

Locale-Fehler bei JiffyBox unter Ubuntu 10.4

Ich finde die JiffyBox von DomainFactory ja klasse (war auch Thema meines ersten Blogartikels). Damit kann man eben schnell einen kostengünstigen Server aufsetzen und einige Sachen ausprobieren. Falls dann etwas schief geht, wirft man die ganze Installation weg und startet mal eben einen neuen Server – alles innerhalb weniger Minuten.

Jetzt bin ich allerdings auf ein Problem gestoßen, das ich vor Monaten nach meiner Meinung nicht hatte. Ich möchte nämlich eigentlich einen neuen Server mit ‚Ubuntu 10.04 LTS 64Bit‘ (Lucid) und PostgreSQL aufsetzen. Das klappte nach einigen Warnungen nicht und letztlich lag es an fehlerhaften Locale-Einstellungen, wie es auch in diesem Link beschrieben wird. Hätte die angegebene Lösung sofort bei mir geklappt, wäre dieser Artikel wahrscheinlich nicht entstanden.

Um das Problem nachzustellen, muss man nicht gleich PostgreSQL installieren, sondern man kann auf dem frisch gestarteten System auch einfach mal einen neuen Benutzer anlegen: adduser myuser

root@j24664:~# adduser myuser
perl: warning: Setting locale failed.
perl: warning: Please check that your locale settings:
	LANGUAGE = (unset),
	LC_ALL = (unset),
	LC_CTYPE = "UTF-8",
	LANG = "en_US.UTF-8"
    are supported and installed on your system.
perl: warning: Falling back to the standard locale ("C").

Weiterlesen

JiffyBox mit Apache über neue Domain nutzen

Für ein Projekt benötige ich einen Ubuntu-Server mit Apache, der über eine Top-Level-Domain erreichbar sein soll. Normalerweise hätte ich den bei einem der üblichen Webhoster bestellt, aber ein Bekannter meinte: „Nimm dir doch lieber einen Cloud-Anbieter – wie Amazon. Damit bist du doch viel flexibler !“.  Also habe ich mal ein bisschen gesucht und bin auf die JiffyBox (CloudServer On Demand) von domainFACTORY gestoßen. Genau das Richtige für mich:

  • keine festen monatlichen Kosten, sondern bedarfsgerechte Abrechnungen
  • günstigstes Angebot mit 1 GB Arbeitsspeicher und 50 GB Festplatte für 0,02 Euro pro Stunde (weniger als 15 Euro pro Monat)
  • keine langfristigen Vertragsbindungen
  • einfaches Erstellen, Sichern, Duplizieren, Einfrieren und Löschen von JiffyBoxen
  • Datencenter in Deutschland – Amazon scheidet für mich aus datenschutzrechtlichen Gründen aus

Weiterlesen