In lieu of using one of the more formal methods from the eXist-db Advanced Installation page, I just wanted a quick and dirty way to automatically spin up an eXist-db database, with code checked out from the eXist-db GitHub repository, when an EC2 instance was started.
My requirements? I wanted to run the Web application at port 80 and I wanted to do this on an EC2 instance that doesn’t have an Elastic IP. What follows is the quick and dirty solution I came up with. I’m not suggesting it’s better than the more formal methods, but it works and does what I wanted.
First, I started with installing some of the necessary software:
sudo aptitude install git screenie openjdk-8-jdk ant
Next, I checked out the eXist-db code and built it:
git checkout https://github.com/eXist-db/exist.git
Then I created a script that would configure a CNAME on my Route 53 DNS configuration, port map port 8080 to port 80, and startup the eXist database. I also created a configuration file for the AWS Route 53 connection. I put the configuration file at
/etc/route53/config. It contains:
aws_access_key_id = [SOMETHING_SECRET_GOES_HERE]
aws_secret_access_key = [SOMETHING_SECRET_GOES_HERE]
The contents of the script are:
# Make sure only root can run this script
if [ "$(id -u)" != "0" ]; then
echo "This script must be run as root" 1>&2
# Load AWS configuration
# Export access key ID and secret for cli53
# Use command line scripts to get the public hostname
PUBLIC_HOSTNAME=$(ec2metadata | grep 'public-hostname:' | cut -d ' ' -f 2)
# Create a new CNAME record on Route 53, replacing the old entry if necessary
/usr/local/bin/cli53 rrcreate lisforge.net c4lse CNAME "$PUBLIC_HOSTNAME" --replace --ttl "60"
# It's okay with me if the first fails because it's never been configured before
iptables -D PREROUTING -t nat -i eth0 -p tcp --dport 80 -j REDIRECT --to-port 8080
iptables -A PREROUTING -t nat -i eth0 -p tcp --dport 80 -j REDIRECT --to-port 8080
# At startup, this script is run as root, but we don't want to run eXist-db as root
sudo -u ubuntu bin/startup.sh
I put the script at
/usr/local/sbin/exist-startup and then put the following the
screenie -j exist /usr/local/sbin/exist-startup
That’s it. Now each time I start the EC2 instance with eXist-db installed, I can go to c4lse.lisforge.net and find the application running there.
If I’m on the EC2 instance and want to see the console output, I can use screenie to reattach to the session. Quick and dirty.