Skip to content

Instantly share code, notes, and snippets.

@vondraussen
Last active December 21, 2020 16:02
Show Gist options
  • Save vondraussen/32c5c7be014ed26039a864f077dbff6f to your computer and use it in GitHub Desktop.
Save vondraussen/32c5c7be014ed26039a864f077dbff6f to your computer and use it in GitHub Desktop.
Google Cloud Engine simple setup

Setup

cd ~
curl -Ls https://gist.github.com/raw/32c5c7be014ed26039a864f077dbff6f/setup.sh | bash

Logout and in again to apply the changed groups!

version: "3.7"
services:
traefik:
image: traefik:v2.3
container_name: traefik
restart: unless-stopped
ports:
- 80:80
- 443:443
- 127.0.0.1:8080:8080
command:
- "--api.insecure=false"
- "--providers.docker=true"
- "--providers.docker.exposedbydefault=false"
- "--entrypoints.web.address=:80"
- "--entrypoints.webs.address=:443"
- "--certificatesresolvers.le.acme.httpchallenge=true"
- "--certificatesresolvers.le.acme.httpchallenge.entrypoint=web"
- "[email protected]"
- "--certificatesresolvers.le.acme.storage=/acme.json"
# remove the following, once your setup works
- "--certificatesresolvers.le.acme.caserver=https://acme-staging-v02.api.letsencrypt.org/directory"
volumes:
- /var/run/docker.sock:/var/run/docker.sock
- $PWD/traefik/acme.json:/acme.json
traefik-certs-dumper:
container_name: traefik_certs_dumper
image: ldez/traefik-certs-dumper:v2.7.4
restart: unless-stopped
entrypoint: sh -c '
apk add jq
; while ! [ -e /data/acme.json ]
|| ! [ `jq ".[] | .Certificates | length" /data/acme.json` != 0 ]; do
sleep 1
; done
&& traefik-certs-dumper file --version v2 --domain-subdir=true --watch
--source /data/acme.json --dest /data/certs'
volumes:
- $PWD/traefik:/data
hello:
image: tutum/hello-world
container_name: hello-world
restart: unless-stopped
labels:
- "traefik.enable=true"
- "traefik.http.routers.hello.rule=Host(`example.duckdns.org`)"
- "traefik.http.routers.hello.entrypoints=webs"
- "traefik.http.routers.hello.tls.certresolver=le"
#!/bin/bash
sudo apt-get update && sudo apt-get upgrade -y && sudo apt-get install -y nano cron apt-transport-https ca-certificates gnupg-agent software-properties-common
# install docker
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 $(lsb_release -cs) stable"
sudo apt-get update && sudo apt-get install -y docker-ce docker-ce-cli containerd.io
sudo usermod -aG docker $USER
# install docker-compose
sudo curl -L "https://github.com/docker/compose/releases/download/1.27.4/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
sudo chmod +x /usr/local/bin/docker-compose
# prepare duckdns
mkdir -p ~/duckdns
echo -e "#!/bin/bash\nDOMAIN=example.duckdns.org\nTOKEN=aaaaaaaa-1111-1111-1111-111111111111\n\necho url=\"https://www.duckdns.org/update?domains=\${DOMAIN}&token=\${TOKEN}&ip=\" | curl -k -o ~/duckdns/duck.log -K -\n" > ~/duckdns/duck.sh
chmod 700 ~/duckdns/duck.sh
# install cron job for duckdns
# write out current crontab
crontab -l > ~/duckdns/cronjob
# echo new cron into cron file
echo "*/5 * * * * ~/duckdns/duck.sh >/dev/null 2>&1" >> ~/duckdns/cronjob
# install new cron file
crontab ~/duckdns/cronjob
rm ~/duckdns/cronjob
# get docker-compose example
mkdir -p ~/cloud
curl -Ls https://gist.github.com/raw/32c5c7be014ed26039a864f077dbff6f/docker-compose.yml -o ~/cloud/docker-compose.yml
# prepare traefik stroage
mkdir -p ~/cloud/traefik
echo "{}" > ~/cloud/traefik/acme.json
sudo chmod 600 ~/cloud/traefik/acme.json
# final info
echo -e "\n\n"
echo "Installation is done!"
echo "You need to adapt the following files:"
echo " ~/duckdns/duck.sh"
echo " ~/cloud/docker-compose.yml"
echo "Start:"
echo " cd ~/cloud"
echo " docker-compose up"
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment