Total Pageviews

Thursday, January 27, 2011

Virtual Hosting with Tomcat

Virtual hosting with Tomcat:

http://www.ex-parrot.com/pete/tomcat-vhost.html


Virtual Hosting with Tomcat

This is a guide on setting up Tomcat to do virtual hosting and make it behave like a simple webserver with jsp and servlet support, for many different sites all hosted on the same IP address. The aim is to have a single directory for each virtual host, which can be manipulated individually without hassles from managing multiple .war files and other configuration difficulties.
To configure Tomcat for a virtual host, you need a <Host ..> directive in the server.xml file, and a ROOT.xml file in the conf/Catalina/$host directory. Here's the minimal setup required for a copy of Tomcat serving directly on Port 80, using no connectors or other configuration difficulties.
This was written for Tomcat 5 on linux, with Tomcat installed in /usr/local/tomcat
We start with the simplest configuration, of one website, called 'localhost' which keeps it's files in /usr/local/tomcat/webapps/localhost . We're not using any .war files here - all the files are placed straight into the directory.

conf/server.xml

<Server port="8005" shutdown="SHUTDOWN" debug="0">

  <!-- Define the Tomcat Stand-Alone Service -->
  <Service name="Catalina">
    
        <!-- Define a non-SSL Coyote HTTP/1.1 Connector on port 8080 -->
    <Connector port="80"
               maxThreads="150" minSpareThreads="25" maxSpareThreads="75"
               enableLookups="false" redirectPort="8443" acceptCount="100"
               debug="0" connectionTimeout="20000" 
               disableUploadTimeout="true" />

                <Engine name="Catalina" defaultHost="localhost" debug="0">

   
      <!-- Define the default virtual host
           Note: XML Schema validation will not work with Xerces 2.2.
       -->
      <Host name="localhost" debug="0" appBase="webapps/localhost"
       unpackWARs="true" autoDeploy="true"
       xmlValidation="false" xmlNamespaceAware="false">
        <Logger className="org.apache.catalina.logger.FileLogger"
                 directory="logs"  prefix="localhost_log." suffix=".txt"
            timestamp="true"/>
      </Host>

         <!-- VIRTUAL HOST INJECTION POINT -->
          
    </Engine>

  </Service>

</Server>

conf/Catalina/localhost/ROOT.xml

<?xml version='1.0' encoding='utf-8'?>
<Context displayName="localhost" docBase="" path=""
workDir="work/Catalina/localhost/_">
</Context>

webapps/localhost

index.jsp
WEB-INF/web.xml

webapps/localhost/WEB-INF/web.xml

<?xml version="1.0" encoding="ISO-8859-1"?>
<web-app>
</web-app>

Adding a virtual host to this config.

From here, to add a virtual host $host with an alias of $alias, the following steps are required.
  • Shut down tomcat.
  • Add a Host entry to the server.xml file at the VIRTUAL HOST INJECTION POINT
    <Host name="$host" debug="0" appBase="webapps/$host"
            unpackWARs="true" autoDeploy="true"
        xmlValidation="false" xmlNamespaceAware="false">
    
    <Logger className="org.apache.catalina.logger.FileLogger"
    directory="logs"  prefix="$host\_log." suffix=".txt" timestamp="true"/>
    
    <Alias>$alias</Alias>
    </Host>
  • Add a configuration file for the host
    mkdir conf/Catalina/$host
    
    cat >conf/Catalina/$host/ROOT.xml
    <?xml version='1.0' encoding='utf-8'?>
    <Context displayName="$host" docBase="" path=""
    workDir="work/Catalina/$host/_">
    </Context>
    ^D
    
  • Add a skeleton directory structure for the files
    mkdir $tomcatdir/webapps/$host
    mkdir $tomcatdir/webapps/$host/WEB-INF
    mkdir $tomcatdir/webapps/$host/WEB-INF/classes
    mkdir $tomcatdir/webapps/$host/WEB-INF/lib
  • Add a minimal web.xml file
    cat >webapps/$host/WEB-INF/web.xml
    <?xml version="1.0" encoding="ISO-8859-1"?>
    <web-app>
    </web-app>
  • Add a trivial holding page
    cat >index.jsp
    <html>
    <head>
    <title>Not yet configured</title>
    </head>
    
    <body>
    <p>This virtual server $host is not yet configured.</p>
    </body>
    </html>
  • Start tomcat back up again.

Automating the process

For a standard situation with tomcat installed in /usr/local/tomcat, here's a small perl script that does all this for you. Save it into the /usr/local/tomcat/bin directory. add_virtual_host.pl

Usage

./bin/add_virtual_host.pl host alias1 alias2 alias3

Tomcat 6 binding on port 80 (instead of default port 8080)on ubuntu

Tomcat 6 binding on port 80 (instead of default port 8080)on ubuntu

http://thelowedown.wordpress.com/2010/08/17/tomcat-6-binding-to-a-privileged-port-on-debianubuntu/

Makes ure: Authbind = yes in /etc/defaults/tomcat6.
in /var/lib/tomcat6/conf /server.xml - change the port to 80 from 8080

Tuesday, January 25, 2011

Tuesday, January 18, 2011

MySQL cluster tips

MySQL cluster- careful:

1. when you start the client with ndbd --initial - it clears all tables, as it starts fresh, so to start client node use "ndbd"
2. in case u need to start ndbd --initial, dont start both nodes at once. wait for one node to start completly, so that the other node will reflect the data.

Monday, January 3, 2011

High Availablility storage cluster with GlusterFS

http://www.howtoforge.com/high-availability-storage-with-glusterfs-on-ubuntu-10.04-automatic-file-replication-mirror-across-two-storage-servers

In the above link some items are missing. Find below the extra steps to be done:

on client system one need to install Fuse, as GlusterFS is using FUSE as underlying File system. To install FUSE:

  • apt-get install build-essential
  • apt-get install libfuse-dev
  • apt-get install fuse-utils
  • apt-get install libcurl4-openssl-dev
  • apt-get install libxml2-dev
  • apt-get install mime-support
 On GlusterFS server side use the below command instead of shown in the link above:

[root@@server]# glusterfsd -f /tmp/glusterfsd.vol
[root@@client]# glusterfs -f /tmp/glusterfs.vol /mnt/glusterfs
NOTE: use correct path for Glusterfs.vol

http://www.gluster.com/community/documentation/index.php/User_Guide

GlusterFS Server and Client on same machine:

one can have glusterfs server and client on same machine. only thing to do is having two separate glusterfs.vol for server and client (say glusterfs_srv.vol and glusterfs_cl.vol) under /etc/glusterfs/ folder.