Software Stacks

Last modified by chrisby on 2024/08/29 14:47

Introduction

I love open source software, especially when it can be deployed seamlessly via Docker. However, individual projects often have unique nuances and configurations. So I've created this section to show you how to deploy the software I'm working with using very few instructions. To get a working deployment of a software stack, simply copy the docker-compose.yml from the article, replace any variables with the format <some-variable> with an actual value, and follow the instructions.

All the configurations described in the subsections use Traefik, which greatly simplifies the reverse proxying process and certificate generation. It's also possible to combine all the stacks on a single device behind a single Traefik container. Just merge the service configuration from one docker-compose.yml into another.

Traefik will automatically generate an appropriate LetsEncrypt certificate on startup. It's worth noting that there is currently a limit of 5 LetsEncrypt certificates per 24 hour period. However, there's an option in the Traefik settings in the docker-compose.yml to manually disable this and use dummy certificates instead. This comes in handy if you're in the experimental phase and are initiating multiple deployments per day. If you want to get rid of the dummy certificates or real certificates for new stacks, just shut down Traefik, delete its volume and restart it.

In each docker-compose.yml, unambiguous docker image tags are set. The reason for this is to keep the deployment stable. It's frustrating to encounter bugs during deployment due to outdated configurations or incompatible container versions, especially when you're just testing the software. If you intend to use the software in production, I recommend reading the documentation or experimenting with the latest version of containers to get a stable set. This will avoid unnecessary security vulnerabilities and give you the latest features.

Requirements

  • A server
    • with a public IP address
    • where docker and docker-compose are installed
  • A domain (e.g. "crispy-coding.org") and DNS records pointing from subdomains (e.g. xwiki.crispy-coding.org) to the public IP address of the Linux server.

Table of Contents