{"id":261,"date":"2010-12-29T11:23:52","date_gmt":"2010-12-29T11:23:52","guid":{"rendered":"https:\/\/blog.ecotronics.ch\/wordpress\/?p=261"},"modified":"2010-12-29T11:26:09","modified_gmt":"2010-12-29T11:26:09","slug":"grails-applikation-unter-tomcat-auf-xampp-server-publizieren","status":"publish","type":"post","link":"https:\/\/blog.ecotronics.ch\/wordpress\/?p=261","title":{"rendered":"Grails-Applikation unter Tomcat auf XAMPP-Server publizieren"},"content":{"rendered":"<p>Die folgende Anleitung bezieht sich auf eine<strong> XAMPP-Installation 1.7.2 unter Windows<\/strong>, sollte in weiten Teilen aber auch f\u00fcr andere Betriebssysteme gelten. Die verwendete<strong> Grails-Version <\/strong>ist <strong>1.3.5<\/strong>. Ausserdem gehe ich davon aus, dass man direkten Zugriff zum Server hat und nicht \u00fcber ein Web-Interface arbeitet. Hier die notwendigen Schritte, um eine Grails-Applikation auf einem XAMPP-Server unter Tomcat zu publizieren:<\/p>\n<h2>Voraussetzungen<\/h2>\n<ul>\n<li>lauff\u00e4hige <a href=\"http:\/\/www.grails.org\/\" target=\"_blank\">Grails<\/a>-Applikation<\/li>\n<li><a href=\"http:\/\/de.wikipedia.org\/wiki\/XAMPP\" target=\"_blank\">XAMPP<\/a>-Server inklusive Servlet-Container <a href=\"http:\/\/de.wikipedia.org\/wiki\/Apache_Tomcat\" target=\"_blank\">Tomcat<\/a> installiert und konfiguriert<\/li>\n<\/ul>\n<h2>Spezielle Ports<\/h2>\n<p>Mein erster Stolperstein ist immer, dass <strong>Oracle XE<\/strong> unter <strong>Port 8080<\/strong> l\u00e4uft. <strong>Tomcat beansprucht ebenfalls diesen Port und Grails beim Testen gleich noch mal<\/strong>. Da Oracle eindeutig am schwierigsten umzukonfigurieren ist und ausserdem bei mir schon am l\u00e4ngsten auf diesem Port l\u00e4uft, bedeutet dies, <strong>Tomcat unter einem anderen Port laufen zu lassen<\/strong>.<\/p>\n<p>F\u00fcr Tomcat sucht man die Datei <strong>..\\xampp\\xampp\\tomcat\\conf\\server.xml<\/strong>. Der zu \u00e4ndernde Text steht ungef\u00e4hr in der Mitte und bezieht sich auf den Connector f\u00fcr das <strong>Http11AprProtocol<\/strong>. Es muss lediglich die Port-Nr ge\u00e4ndert werden. Um Tomcat auf 8081 zu betreiben, \u00e4ndert man das folgendermassen:<\/p>\n<pre>&lt;Connector port=\"<strong>8081<\/strong>\"\r\n   protocol=\"org.apache.coyote.http11.Http11AprProtocol\"\r\n\u00a0\u00a0 connectionTimeout=\"20000\"\r\n\u00a0\u00a0 redirectPort=\"8443\" \/&gt;\r\n<\/pre>\n<h2>Memory<\/h2>\n<p>Wenn wir gerade dabei sind, Tomcat zu konfigurieren, dann k\u00f6nnen wir gleich noch am Memory herumschrauben, dass f\u00fcr Java-Applikationen vorgesehen ist. Dies macht man in der Batch-Datei<strong> ..\\xampp\\xampp\\tomcat\\bin\\setenv.bat<\/strong> mit folgender Zeile:<\/p>\n<pre>SET \"JAVA_OPTS=<strong>-Xms256m -Xmx512m<\/strong>\"<\/pre>\n<p>Damit teilt man Java f\u00fcr die anf\u00e4ngliche Gr\u00f6sse des <strong>Heap <\/strong>256 MB und f\u00fcr die maximale 512 MB zu.<\/p>\n<p>Nach der Konfiguration stoppt und startet man den Tomcat in der Management-Konsole des XAMPP-Servers neu. Mit<\/p>\n<pre><strong>http:\/\/localhost:8081<\/strong><\/pre>\n<p>testet man im Browser, ob Tomcat wirklich l\u00e4uft. Die Grails-Applikation wird somit auch unter diesem Port laufen.<\/p>\n<h2>WAR-Datei<\/h2>\n<p>Als n\u00e4chstes muss man f\u00fcr seine Grails-Applikation ein WAR-File erzeugen. Dazu \u00f6ffnet man die Kommandozeile, wechselts in Root-Verzeichnis der Applikation und setzt den Befehl &#8220;<strong>grails war<\/strong>&#8221; ab. Nach kurzer Zeit ist im Unterverzeichnis \\target eine<strong> Datei mit der Endung .war<\/strong> zu finden (in \u00e4lteren Grails-Versionen im Root). Die Standardeinstellung nimmt dabei automatisch die <strong>Produktions-Umgebung<\/strong>. Man muss also vorher daf\u00fcr sorgen, dass diese in der Datei ..\\grails-app\\conf\\DataSource.groovy richtig konfiguriert ist.<\/p>\n<p>Der abgesetzte Befehl hat die unsch\u00f6ne Eigenschaft, den Dateinamen noch mit der Versions-Nr zu versehen. Damit diese Nummer sp\u00e4ter im Pfad der Applikation nicht erscheint, entfernt man am besten diesen Teil aus dem Dateinamen. Aus gTunes-0.1.war wird somit gTunes.war.<\/p>\n<h2>WAR-Datei auf Tomcat publizieren<\/h2>\n<p>Nun \u00f6ffnet man Tomcat im Browser (siehe oben) und klickt auf den Link &#8220;Tomcat Manager&#8221;. Tomcat verlangt als erstes ein Passwort. Dieses findet man in der Datei ..\\xampp\\xampp\\tomcat\\conf\\tomcat-users.xml. Anschiessend sucht man die Rubrik &#8220;WAR file to deploy&#8221;, klickt auf die Schaltfl\u00e4che &#8220;Durchsuchen&#8221;, gibt die soeben erzeugte WAR-Datei an und schliesst mit Deploy ab. Nach kurzer Zeit erscheint in der Liste &#8220;Applications&#8221; ein neuer Eintrag mit dem Titel der Grails-Applikation, z.B. gTunes. Sie sollte bereits laufen, so dass ein Klick auf den in der Liste vorhandenen Link zur Startseite der Applikation f\u00fchrt.<\/p>\n<h2>ProxyPass in Apache<\/h2>\n<p>Nun haben wir zwar eine lauff\u00e4hige Applikation auf Tomcat, aber sie kann nur aufgerufen werden, indem man den Port in der URL angibt. Gew\u00fcnscht ist eigentlich, dass die Grails-Applikation \u00fcber den Apache ohne Angabe eines Ports erreichbar ist, z.B. \u00fcber http:\/\/www.meinedomain.ch\/gTunes oder lokal mit <strong>http:\/\/localhost\/gTunes<\/strong>. Dies ist m\u00f6glich, wenn man den Apache f\u00fcr ein <strong>ProxyPass<\/strong> einrichtet. Dazu \u00f6ffnet man <strong>..\\xampp\\xampp\\apache\\conf\\httpd.conf<\/strong> mit einem Texteditor. Als erstes muss man die Module f\u00fcr ProxyPass freischalten, indem man das Kommentar-Zeichen<strong> #<\/strong> am Anfang folgender Zeilen entfernt:<\/p>\n<pre>LoadModule proxy_module modules\/mod_proxy.so\r\nLoadModule proxy_connect_module modules\/mod_proxy_connect.so\r\nLoadModule proxy_http_module modules\/mod_proxy_http.so<\/pre>\n<p>Dann f\u00fcgt man noch die folgenden Zeilen ein:<\/p>\n<pre>&lt;IfModule mod_proxy.c&gt;\r\n  ProxyRequests Off\r\n  ProxyPreserveHost On\r\n  ProxyTimeout 300 \r\n\r\n<strong>  ProxyPass \/gTunes\/ http:\/\/localhost:8081\/gTunes\/\r\n  ProxyPassReverse \/gTunes\/ http:\/\/localhost:8081\/gTunes\/\r\n<\/strong>\r\n  &lt;Proxy *&gt;\r\n    Order deny,allow\r\n    Allow from all\r\n  &lt;\/Proxy&gt;\r\n\r\n&lt;\/IfModule&gt;<\/pre>\n<p>Wichtig ist, dass das Unterverzeichnis, d.h. gTunes mit dem Namen der  Datei \u00fcbereinstimmt. Sonst l\u00e4sst sich zwar die Startseite aufrufen, aber  die Links innerhalb der Applikation funktionieren nicht. Nun startet man den Apache neu, damit die \u00c4nderungen \u00fcbernommen werden. L\u00e4sst sich http:\/\/localhost\/gTunes nun im Browser aufrufen und funktionieren die Links in der Applikation, dann ist unser Deployment erfolgreich beendet.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Die folgende Anleitung bezieht sich auf eine XAMPP-Installation 1.7.2 unter Windows, sollte in weiten Teilen aber auch f\u00fcr andere Betriebssysteme gelten. Die verwendete Grails-Version ist 1.3.5. Ausserdem gehe ich davon aus, dass man direkten Zugriff zum Server hat und nicht \u00fcber ein Web-Interface arbeitet. Hier die notwendigen Schritte, um eine Grails-Applikation auf einem XAMPP-Server unter [&#8230;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":[],"categories":[36,74],"tags":[71,29,73,72,70,69],"_links":{"self":[{"href":"https:\/\/blog.ecotronics.ch\/wordpress\/index.php?rest_route=\/wp\/v2\/posts\/261"}],"collection":[{"href":"https:\/\/blog.ecotronics.ch\/wordpress\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/blog.ecotronics.ch\/wordpress\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/blog.ecotronics.ch\/wordpress\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/blog.ecotronics.ch\/wordpress\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=261"}],"version-history":[{"count":19,"href":"https:\/\/blog.ecotronics.ch\/wordpress\/index.php?rest_route=\/wp\/v2\/posts\/261\/revisions"}],"predecessor-version":[{"id":280,"href":"https:\/\/blog.ecotronics.ch\/wordpress\/index.php?rest_route=\/wp\/v2\/posts\/261\/revisions\/280"}],"wp:attachment":[{"href":"https:\/\/blog.ecotronics.ch\/wordpress\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=261"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blog.ecotronics.ch\/wordpress\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=261"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blog.ecotronics.ch\/wordpress\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=261"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}