outcoldman
outcoldman Denis Gladkikh

Docker images for home server. Part 2.

docker, services, home server, and guacamole

I already told you that I use docker at home to run GitLab and Netatalk. Every month my list of containers which I host on my home server is growing for various reasons. Sometimes I just want to use something, sometimes I need it and sometimes I just want to take a quick look on it. So I decided to keep sharing some useful images and tips and tricks about them with you.

This blog post is numbered with Part 2, because I believe that I already showed you some containers in Using docker at home.

Guacamole

From http://guac-dev.org:

Guacamole is a clientless remote desktop gateway. It supports standard protocols like VNC and RDP.

Guacamole is a free, open source, written in HTML5, console for your home network. It can connect to VNC, RDP or SSH to computers at your home network (or any computer it has access to).

Glyptodon LLC has official images on docker registry and official documentation. One of the images is a server which knows how to initialize connection and another one is a web server. By default web server image requires linked database. It can be PostgreSQL or MySQL. But Guacamole supports also static configuration with user-mapping.xml if you don’t want to use PostgreSQL or MySQL.

If you want to use user-mapping.xml instead of databases you can just override/modify docker image. You need to remove check that one of the databases is configured and copy user-mapping.xml in /root/.guacamole/.

For example you can keep three files to build your own docker image

FROM glyptodon/guacamole:latest

RUN mkdir -p /root/.guacamole/
COPY user-mapping.xml /root/.guacamole/
COPY startx.sh /opt/guacamole/bin/
RUN chmod +x /opt/guacamole/bin/startx.sh

CMD ["/opt/guacamole/bin/startx.sh"]
#!/bin/bash

GUACAMOLE_HOME="$HOME/.guacamole"
GUACAMOLE_EXT="$GUACAMOLE_HOME/extensions"
GUACAMOLE_LIB="$GUACAMOLE_HOME/lib"
GUACAMOLE_PROPERTIES="$GUACAMOLE_HOME/guacamole.properties"

set_property() {

    NAME="$1"
    VALUE="$2"

    # Ensure guacamole.properties exists
    if [ ! -e "$GUACAMOLE_PROPERTIES" ]; then
        mkdir -p "$GUACAMOLE_HOME"
        echo "# guacamole.properties - generated `date`" > "$GUACAMOLE_PROPERTIES"
    fi

    # Set property
    echo "$NAME: $VALUE" >> "$GUACAMOLE_PROPERTIES"

}

start_guacamole() {
    cd /usr/local/tomcat
    exec catalina.sh run
}

mkdir -p "$GUACAMOLE_EXT"
mkdir -p "$GUACAMOLE_LIB"

set_property "guacd-hostname" "$GUACD_PORT_4822_TCP_ADDR"
set_property "guacd-port"     "$GUACD_PORT_4822_TCP_PORT"

start_guacamole

After that you can create docker-compose.yml file like

guacd:
  image: glyptodon/guacd:latest
  mem_limit: 2g
  cpu_shares: 256
  restart: always

web:
  build: .
  links:
    - guacd
  environment:
    - VIRTUAL_HOST=guacamole.example.com
  mem_limit: 2g
  cpu_shares: 256
  restart: always

VIRTUAL_HOST is set because I use nginx-proxy, see Using docker at home for details.

And one last thing. To get access to the guacamole you will need to use path /guacamole. The root path / will show you default web page of TomCat server. It is possible to change it. I am not a TomCat expect, so I used the simplest solution, in my Dockerfile I added three more lines

RUN rm -fR /usr/local/tomcat/webapps/ROOT/*

COPY robots.txt /usr/local/tomcat/webapps/ROOT/
COPY index.html /usr/local/tomcat/webapps/ROOT/

Where:

<META HTTP-EQUIV="Refresh" CONTENT="0; URL=/guacamole/"/>
User-Agent: *
Disallow: /

I was really surprised how great is this tool. The one problem which I could not solve is connection to the OS X VNC Server. But because I use SSH tunneling to access my OS X server, that wasn’t an issue for me.

Have feedback or questions? Looking for consultation?

My expertise: MongoDB, ElasticSearch, Splunk, and other databases. Docker, Kubernetes. Logging, Metrics. Performance, memory leaks.

Send me an email to public@denis.gladkikh.email.

The content on this site represents my own personal opinions and thoughts at the time of posting.

Content licensed under the Creative Commons CC BY 4.0.