Skip to content

Docker compose a VM to get LetsEncrypt / NGINX proxy auto provisioning, ELK logging, Prometheus / Grafana monitoring, Portainer GUI, and more...

License

Notifications You must be signed in to change notification settings

gregpelle/dockerize-your-dev

 
 

Repository files navigation

Dockerize Your Dev

Starting point for turning a single VM into a containerized cloud development suite or lightweight container hosting environment. You can also just take the bones and basically do whatever you want with it.

Deploy any number of docker containers to almost any flavor Linux VM, as long as it supports docker and docker-compose your golden (although some may prove more difficult than others). Currently this repo is being developed on a Ubuntu 18.04 LTS Minimal VM on GCE (n1-standard-2).

All the monthly fees for git, logging, monitoring, error monitoring, alerting, CI, etc etc really start to add up don't they... Well cancel a bunch of monthly fees with me, plus you don't even need to spend 100s of hours debugging to get it all working.

Roadmap

  • Portainer (gui)
  • ELK Stack (logging)
  • Grafana/Prometheus (monitoring)
  • Gitea (git)
  • Sentry (errors)
  • Mattermost (chat)
  • NGINX (proxy)
  • LetsEncrypt (safety)
  • Code Server (editor)
  • Bit (code)

That is the goal anyways, its all containerized so add or subtract as you see fit.

Unfortunatly this setup with the SSL provisioning is not localhost friendly, also I am not actively supporting installing or running this on anything except a linux VM or if you are slick and run linux as your everyday OS you can get it working locally pretty easily. If you want to try it on Windows be my guest but I bet it won't be fun.

Pre-Setup

  1. On your host VM install docker and docker-compose, if you can't get this going probably this stack is not what your looking for anyways.

  2. On the host make sure /etc/sysctl.conf has vm.max_map_count set to at least 262144 - vm.max_map_count=262144

  3. Point all the subdomains you will be using to the public IP of your host VM, these are examples of what you may want to use.

  • kibana.example.com
  • cadvisor.example.com
  • alertmanager.example.com
  • portainer.example.com
  • grafana.example.com
  • prometheus.example.com
  • sentry.example.com
  1. Go through all the compose.yml files in the root directory and find-replace your configured domains for NGINX/SSLs and email address for LetsEncrypt if you want emails from them about alerts on your SSLs.
find -type f -name "*-compose.yml" | xargs sed -i "s/example.com/yourdomain.com/g"
find -type f -name "*-compose.yml" | xargs sed -i "s/[email protected]/[email protected]/g"
  1. (Optional) Setup / change / remove / add proxy configurations in the proxy/conf.d folder, they will all be mounted inside your NGINX container and used.

Setup

  1. Install the proxy
docker-compose -f proxy-compose.yml up -d
  1. Install the logging
docker-compose -f logging-compose.yml up -d

** Optional ** Setup basic auth for kibana

sudo sh -c "echo -n '[username]:' >> /var/lib/docker/volumes/dockerize-your-dev_htpasswd/_data/kibana.example.com"
sudo sh -c "openssl passwd -apr1 >> /var/lib/docker/volumes/dockerize-your-dev_htpasswd/_data/kibana.example.com"
  1. Install the monitoring
docker-compose -f monitoring-compose.yml up -d

** Optional ** Setup basic auth for cadvisor, alertmanager, and prometheus

sudo sh -c "echo -n '[username]:' >> /var/lib/docker/volumes/dockerize-your-dev_htpasswd/_data/cadvisor.example.com"
sudo sh -c "openssl passwd -apr1 >> /var/lib/docker/volumes/dockerize-your-dev_htpasswd/_data/cadvisor.example.com"
sudo sh -c "echo -n '[username]:' >> /var/lib/docker/volumes/dockerize-your-dev_htpasswd/_data/alertmanager.example.com"
sudo sh -c "openssl passwd -apr1 >> /var/lib/docker/volumes/dockerize-your-dev_htpasswd/_data/alertmanager.example.com"
sudo sh -c "echo -n '[username]:' >> /var/lib/docker/volumes/dockerize-your-dev_htpasswd/_data/prometheus.example.com"
sudo sh -c "openssl passwd -apr1 >> /var/lib/docker/volumes/dockerize-your-dev_htpasswd/_data/prometheus.example.com"
  1. Install the docker GUI
docker-compose -f gui-compose.yml up -d
  1. Visit Portainer configured URL to setup your admin account UN and PW

Sentry

  1. Generate a secret key. Add it to sentry/.env as SENTRY_SECRET_KEY
echo -e "\nSENTRY_SECRET_KEY=$(docker-compose run --rm sentry-base sentry config generate-secret-key)" >> sentry/sentry.env
  1. Build the database. Use the interactive prompts to create a user account
docker-compose -f sentry-compose.yml run --rm sentry-base sentry upgrade
  1. Start it
docker-compose -f sentry-compose.yml up -d

** To Upgrade **

Use the following steps after updating sentry Dockerfile:

docker-compose -f sentry-compose.yml run --rm sentry-web upgrade
docker-compose -f sentry-compose.yml up -d

Basic Auth

sudo sh -c "echo -n '[username]:' >> /var/lib/docker/volumes/dockerize-your-dev_htpasswd/_data/${VIRTUAL_HOST}"
sudo sh -c "openssl passwd -apr1 >> /var/lib/docker/volumes/dockerize-your-dev_htpasswd/_data/${VIRTUAL_HOST}"

Attribution

https://github.com/jwilder/nginx-proxy

https://github.com/buchdag/letsencrypt-nginx-proxy-companion-compose

https://github.com/evertramos/docker-compose-letsencrypt-nginx-proxy-companion

https://github.com/vegasbrianc/prometheus

About

Docker compose a VM to get LetsEncrypt / NGINX proxy auto provisioning, ELK logging, Prometheus / Grafana monitoring, Portainer GUI, and more...

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages

  • Dockerfile 54.0%
  • Shell 30.1%
  • Go 15.9%