Thursday, May 20, 2010

Setting up Alfresco 3.3 Community Edition Standalone Deployment Receiver for WCM

I'm trying out the latest edition of the Alfresco content management system community edition. This is a free, open-source content management system that can do both document and web content management (and much more). What my company wants to use it for is web content management (managing html, php, css, images etc. for our many websites).

We like open source software so we are trying to use the completely unsupported, not guaranteed OS version instead of the fully supported and tested enterprise version. Without support or thorough documentation I am on my own (with the help of generous community members) to get this thing installed, configured and up and running and to keep it that way.

One aspect of getting this project off the ground that was especially tricky was getting a Standalone Deployment Receiver working so that I could deploy content (again, html files, css, php) from my Alfresco repository on one machine to a folder on my web server. Here is how I did it:

Before I started I already had a Web Project in alfresco with some dummy content in it (index.html, and a directory with another html file in it).
  1. Downloaded Linux Installer for Standalone Deployment Receiver, Alfresco-DeploymentCommunity-3.3-Linux-x86-Install, from http://wiki.alfresco.com/wiki/Community_Edition_file_list_3.3
  2. Ran the installer (requires gui environment, expects to be able to pop up a window to walk you through installation)
  3. Accepted all defaults, including port numbers
  4. Started it up(start.sh)

Then I went to my web project in alfresco, and edited the web project settings and added a deployment receiver.  (My Web Project -> Actions -> Edit Web Project Settings -> Next -> Add Deployment Receiver) I added my remote machine as a test server.

Then I should be able to click My Sandbox -> More Actions -> Deploy, choose my test server and the content as it exists in my sandbox should be copied over to the remote server, but it didn't work.


Could not connect to remote service [rmi://144.118.94.157:44100/deployment]; nested exception is java.rmi.ConnectException: Connection refused to host: 127.0.1.1; nested exception is: java.net.ConnectException: Connection refused

I did some googling around and found several people mention that you need to do two things: add a setting to JAVA_OPTS for your alfresco tomcat and set up /etc/hosts in a certain way. I tried a bunch of different things that were suggested, but here is what I did that actually resulted in a successful deployment:

1. Made sure that my remote server had the 44100 port open
2. Made sure the deployment receiver was running on my remote server
3. Added to catalina.sh (/tomcat/bin/catalina.sh) the following line near the top before the first time JAVA_OPTS is used:

JAVA_OPTS="$JAVA_OPTS -Djava.rmi.server.hostname=144.118.68.94"

4. Modify /etc/hosts on the alfresco server to include a mapping from its IP address to the domain name like this:

xxx.xxx.xx.xx mydomainname.com

xxx.xxx.xx.xx is not my real IP address, obviously. On the remote server I did the same thing, mapping its IP to its domain name and mapping the alfresco server's IP to the alfresco server domain name, although I'm not sure that was necessary.

5. Restarted alfresco and the remote server (and started the FSR on the remote server again)

Finally! I am able to deploy snapshots from my sandbox to a test server. By repeating the process and setting the second machine as a "Live Server" in the web project settings I am able to deploy snapshots of approved committed content from all users to another remote server. On the remote servers you can do whatever you want, like deploy your web content to a directory that an apache instance serves up and voila! you have a website.

FYI, here are some of the sources I used to piece together this soution: