Dockerize Omeka CMS
We had this activity in our “Advanced Computer Systems” class to deploy a collections archive website using a content management system written in PHP, Omeka CMS. What is Omeka CMS?
Omeka provides open-source web publishing platforms for sharing digital collections and media-rich online exhibits. - omeka.org
What Omeka CMS is for? Resource sharing. Sharing resources is a valuable asset for hobbyists, enthusiasts, educational institutions and government offices. OMEKA provides such perk plus offers a lot more like publishing collections and digital contents through online exhibits.
My omeka website aptly called 221B Coder Street :D
Just in time, I am also learning Docker. In a nutshell, Docker creates a portable container or package for applications and services. It’s not only useful in development, it also takes a lot of provision, test and ship process. It makes it easy to bundle software requirements and dependencies. Many have adopted Docker as a go-to solution for containerizing the technology stack in order to have a product ready for development and production. It is no surprise that famous technologies written in PHP, like Wordpress, has a readily available Docker image.
Docker is an open platform for developers and sysadmins to build, ship, and run distributed applications, whether on laptops, data center VMs, or the cloud. - docker.com
Admit it. It’s cute.
At the time, I have limited knowledge in using Docker all the while getting rusty in PHP. The instuctions given to us assumes installation and deployment on a bare metal server. Yet I still manage to get approval from my professor to use Docker. Just making sure this will be not all for nothing in the end just because I have a different method from the rest of the class.
Dockerfilefor our simple docker image
- Use Docker Compose for defining and running services
- Deploy and use the CMS
It’s important to know the following points too:
Manual setup and deploy
Omeka CMS specifications is a standard LAMP stack. In detail its the following:
- Apache HTTP server (with
- MySQL >= v5.0
- PHP >= v5.3.2
- ImageMagick image manipulation software
A typical flow will look like this
$ sudo apt update && sudo apt install apache2 -y # Make sure UFW firewall allows HTTP(S) traffic for Apache sudo ufw allow in "Apache Full" sudo apt install mysql-server -y sudo apt install -y php libapache2-mod-php php-mcrypt php-mysql # Enable mod_rewrite sudo a2enmod rewrite && sudo /etc/init.d/apache2 restart sudo apt install -y imagemagick
Next is to install and configure Omeka. Download the latest version of Omeka from https://omeka.org/classic/download/. Unzip the downloaded file and move to the directory discoverable by Apache web server.
# replace x.x by version downloaded unzip omeka-x.x.zip /var/www/html # set permissions to the web server chown -R www-data:www-data /var/www/html/files
At this point, the only thing left is to update
db.ini to have the correct database configuration.
[database] host = "<localhost-or-server-ip>" username = "omekauser" password = "omekapass" dbname = "omekadb" prefix = "omeka_" charset = "utf8" ;port = ""
http://localhost-or-ip/ and you should see Omeka ready for use.
Setup and deploy using Docker
Dockerfile will be trimmed-fat version of the manual setup above.
FROM ubuntu:16.04 LABEL maintainer="Wonderful Being <[email protected]>" ENV DEBIAN_FRONTEND noninteractive RUN apt-get update && apt-get upgrade -y RUN apt-get install -y \ zip unzip \ php7.0 \ apache2 \ libapache2-mod-php7.0 \ php7.0-mysql \ php7.0-xml \ imagemagick \ openssh-server \ vnstat \ cron # Enable mod_rewrite RUN a2enmod rewrite && /etc/init.d/apache2 restart # RUN rm /var/www/html/index.html ADD omeka-2.6 /var/www/html # Update the default apache site with the config we created. ADD apache-config.conf /etc/apache2/sites-enabled/000-default.conf # Set permissions RUN chown -R www-data:www-data /var/www/html/files COPY --chown=root:root omekactl / EXPOSE 80 VOLUME ["/var/www", "/var/log/apache2", "/etc/apache2"] ENTRYPOINT ["/usr/sbin/apache2ctl", "-D", "FOREGROUND"]
docker-compose.yml may look as simple as this
version: '3.3' services: omeka: image: omeka:dev env_file: .env restart: always
Development workflow will look like this
docker build -t omeka:dev . # compose cd omeka-build docker-compose up -d # persist common files docker volume create file-vol docker volume ls docker volume inspect file-vol docker run --rm -d \ -p 4000:80 \ -v file-vol:/var/www/html/files \ --name omekabox \ omeka:dev # debugging service docker exec -it omekabox bash # stopping service docker stop omekabox
A ready-to-run Docker image is available at the store so deploying your own will be as easy as:
docker pull aldnav/omeka:alpha docker volume create file-vol docker run --rm -d \ -p 80:80 \ -v file-vol:/var/www/html/files \ --name omekabox \ aldnav/omeka:alpha
Proceed to Omeka by visiting http://localhost/install/
I am happy for what the project has turned out. I get to learn the basics of Docker. There are a lot of things to improve.
You can check out my repository for the entirety of the project at https://github.com/aldnav/omeka-build
🐋 hello there! If you enjoy this, a
Or you can also ...Buy me a tea