Dave Johnson on open web technologies, social software and Java
About three years ago I decided to modernize and improve the Apache Roller web UI by rewriting the JSP pages to use the Struts 2 Bootstrap tags, which use Twitter's Bootstrap v3 components and JavaScipt. I also wanted to replace all the HTML
table-based formatting with
div's and Bootstrap, do a bunch of other improvements and make Roller's web UI less clunky and annoying.
Converting Roller's eight-five JSP pages was a big task and I did not have much time for it. That's why it took three years. Ironically, the Roller modernization project leaves Roller three years out of date. Still, I think it is a huge improvement over the Roller v5 web UI and I want to get it released in Roller v6. Currently, this work is available as Pull Request #22 and you can find some screenshots there too. Here's one:
I also did some work to make it super-easy to try the Roller v6 snapshot pre-release for yourself, by using Docker Compose. You don't have to fiddle with Tomcat or PostgreSQL. You can find a simple Dockerfile for running Roller v2 snapshot and a docker-compose.yml file in Roller's deployment/docker-compose directory. And you can find a Docker image in my DockerHub repo.If you want to try Roller v6 snapshot, here's what you need to do:
1 - If you don't aleady have it, install Docker
2 - Create a directory on your computer where you want Roller to store it's data.
3 - Save this file docker-compose.yml to that new directory.
4 - Open a shell in that new directory and run:
5 - Watch the PostgreSQL and Roller startup logs scroll by
6 - When the log scroll slows go to http://localhost:8080 to access Roller and go through the initial setup.
Alternatively, if you want to try Roller the hard way, you can get the regular-style v6 SNAPSHOT release files here roller/roller-6.0/v6.0.0.
Just a quick note to say that I ditched Docker Swarm and now this rarely updated blog is powered by Kubernetes. Total overkill, I know. Like Roller itself, I did it as a learning exercise. I hope to blog more about what I learned by doing this. For now, here's a quick summary of what I've done so far.
Created a cluster
I created a 2-node Kubernetes cluster on Digital Ocean using some hand-crafted Ansible scripts that call
apt-get to install and
kubeadm to start Kubernetes. I considered using Typhoon to create the cluster, but I really wanted to learn how to install Kubernetes "from scratch".
Ran two Ingress Controllers
To avoid using Digital Ocean's $20/month load balancer I'm running an Nginx Ingress controller on each node, and pinning containers to nodes using labels and nodeSelectors. I had to borrow Nginx Controller setup files from the Typhoon project because I'm still kind of bewildered by Ingresses.
Deployed my containers
Next, I wrote Kubernetes YAML files for deploying my containers: a private Docker Registry, PostgreSQL and my custom Roller image. Getting the private registry working properly was the biggest challenge. I need private because I don't want to make my custom Roller image public. Next, I'll install Jenkins next for CI/CD of my custom Roller build via the Jenkins Kubernetes plugin.
Let me know if there are any aspects of this that you'd like to see covered in a blog entry, or suggestions for running the cluster without two Ingress Controllers. I've already got a post cooking about installing a TLS secured Docker Registry on Kubernetes.
version: '3.2' services: postgresql: image: "postgres:10.0" ports: - "5432:5432" deploy: resources: limits: memory: 50M volumes: - type: bind source: /var/lib/postgresql/data target: /var/lib/postgresql/data environment: - POSTGRES_USER=roller - POSTGRES_DB=rollerdb - POSTGRES_PASSWORD_FILE=/run/secrets/pg_passwd secrets: - source: db_passwd target: pg_passwd roller: image: "rwo:latest" ports: - "80:8080" depends_on: - postgresql deploy: resources: limits: memory: 800M volumes: - type: bind source: /var/lib/roller target: /var/lib/roller environment: - DB_HOST=postgresql - STORAGE_ROOT=/var/lib/roller - JAVA_OPTS="-Xmx700m" secrets: db_passwd: file: ./db_passwd.txtIt was a pain, but sometimes pain = gain and I learned a lot. I'm hoping the site will be a bit more stable now.