Setting `docker-compose` on fresh Ubuntu 18.04 install

In an effort for setting development tools in the most economical way (and also learn stuff about as much as possible), I am now trying to install docker-compose on a fresh Ubuntu 18.04 instance.

At the end, an nginx is supposed to run at startup and display a generic page.

Assumpions

  • the OS is already installed;
  • ufw is enabled, ports 80 and 443 are accesible;
  • the OS already has a custom user with sudo privileges (e.g. user);
  • we have a domain name pointing at the IP of the server (e.g. example.com) and also a CNAME record (*.example.com);

Install docker

  • sudo apt update
  • sudo apt install -y apt-transport-https ca-certificates curl software-properties-common
  • curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
  • sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu bionic stable"
  • sudo apt update
  • sudo apt upgrade -y
  • apt-cache policy docker-ce
  • sudo apt install docker-ce
  • sudo systemctl status docker
  • sudo usermod -aG docker ${USER}
  • su - ${USER}
  • id -nG

Install docker-compose

  • sudo curl -L https://github.com/docker/compose/releases/download/1.23.2/docker-compose-uname -s-uname -m -o /usr/local/bin/docker-compose
  • sudo chmod +x /usr/local/bin/docker-compose
  • docker-compose --version

Setup Nginx

  • sudo mkdir -p /app
  • cd /app
  • sudo touch docker-compose.yml
  • sudo nano docker-compose.yml
  • docker-compose up -d
  • Access http://example.com and here you should see the default nginx page.

Autostart

  • crontab -e
    You can use crontab -u <username> -e to execute the following command as a specific user;
  • add: @reboot (sleep 60 ; su itcafe -c "cd /app ; /usr/local/bin/docker-compose down ; /usr/local/bin/docker-compose -f docker-compose.yml up -d --build")&
  • sudo reboot
  • http://example.com should still be accesible after server starts;
  • http://whatever.example.com should also be aviable, with the same content.

Sources

  • https://www.digitalocean.com/community/tutorials/initial-server-setup-with-ubuntu-18-04
  • https://www.digitalocean.com/community/tutorials/how-to-install-and-use-docker-on-ubuntu-18-04
  • https://www.digitalocean.com/community/tutorials/how-to-install-docker-compose-on-ubuntu-18-04
  • https://github.com/docker/compose/releases
  • https://stackoverflow.com/questions/43671482/how-to-run-docker-compose-up-d-at-system-start-up
  • https://askubuntu.com/questions/612928/how-to-run-docker-compose-at-bootup
  • https://blog.cloud66.com/10-tips-for-docker-compose-hosting-in-production/
  • https://www.digitalocean.com/community/tutorials/how-to-set-up-laravel-nginx-and-mysql-with-docker-compose