Skip to content
Chandra Challagonda edited this page May 18, 2020 · 18 revisions

DOCKER-SERVICES DEPLOYMENT

NOTES

The document covers the deployment and configuration of docker services in a manual fashion. The document also assumes you to be having a valid domain and subdomains with appropriate “ADDRESS” and “CNAME” entries. Values with ${VARIABLE_NAME} should be replaced with intended appropriate values. e.g. ${DOMAIN_NAME} should be replaced with “example.com”

OS Updates

  1. Ubuntu/Debian
  • USER=ubuntu #use your logged in user
  • sudo apt-get update -y && sudo apt-get upgrade -y
  • sudo apt install -y docker && sudo usermod -aG docker ${USER} && sudo chown -R ${USER}:${USER} ~/.docker
  • sudo curl -L "https://github.com/docker/compose/releases/download/1.25.4/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose && sudo chmod +x /usr/local/bin/docker-compose && sudo ln -s /usr/local/bin/docker-compose /usr/bin/docker-compose
  1. CentOS7/RHEL7
  • USER=rhel #use your logged in user
  • sudo yum upgrade -y && sudo yum update -y && sudo yum install git
  • curl -fsSL https://get.docker.com/ | sh && sudo usermod -aG docker ${USER} && sudo systemctl start docker
  • sudo firewall-cmd --add-service=https

Prerequisites

  1. Create directories
  • mkdir -p ~/workspace && mkdir -p ~/workspace/certificates
  1. Clone the “Docker-Services” GitHub repositoryThis directory contains all the required yaml files for “Docker-Services” - use your GIT_USER and GIT_PWD
  • cd ~/workspace && git clone git clone https://${GIT_USER}@github.com/SmartMaaS-Services/2019.smartmaas.services.git && cd
  1. Container “quantumleap_crate” needs a specific “max_map_count” to be in the running state. Perform the following steps
  • sudo bash -c 'echo "vm.max_map_count=262144" > /etc/sysctl.d/10-Docker-Services.conf' && sudo sysctl -p /etc/sysctl.d/10-Docker-Services.conf
  1. Mandatory changes in repository files - domain name and cert path
  • grep -rl 'DOMAIN_NAME' ~/workspace/Docker-Services/* | xargs -i@ sed -i "s/DOMAIN_NAME/${DOMAIN_NAME}/g" @
  • grep -rl 'WSDIR' /workspace/Docker-Services/* | xargs -i@ sed -i "s_WSDIR_/workspace/certificates_g" @

Certificates

1. Ubuntu

  • sudo apt-get update -y && sudo apt-get install software-properties-common -y
  • sudo add-apt-repository universe -y && sudo add-apt-repository ppa:certbot/certbot -y && sudo apt-get update -y && sudo apt-get install certbot python-certbot-nginx -y
  • sudo docker run -it --rm -v ~/workspace/certificates/etc/letsencrypt:/etc/letsencrypt -v ~/workspace/certificates/var/lib/letsencrypt:/var/lib/letsencrypt -v ~/workspace/certificates/website:/data/letsencrypt -v ~/workspace/certificates/var/log/letsencrypt:/var/log/letsencrypt certbot/certbot certonly --webroot --email ${EMAIL} --agree-tos --no-eff-email --webroot-path=/data/letsencrypt -d *.${DOMAIN_NAME} OR
  • certbot certonly -n --webroot --agree-tos --no-eff-email --webroot-path ~/workspace/certificates --email ${EMAIL} --config-dir ~/workspace/certificates --work-dir ~/workspace/certificates --logs-dir ~/workspace/certificates -d *.${DOMAIN_NAME}

**2. CENTOS7/RHEL7 **

  • https://fedoraproject.org/wiki/EPEL#How_can_I_use_these_extra_packages.3F
  • sudo yum install https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm
  • sudo subscription-manager repos --enable "rhel--optional-rpms" --enable "rhel--extras-rpms" --enable "rhel-ha-for-rhel-*-server-rpms"
  • sudo yum install epel-release && sudo yum -y install yum-utils && sudo yum install certbot python2-certbot-nginx
  • sudo docker run -it --rm -v ~/workspace/certificates/etc/letsencrypt:/etc/letsencrypt -v ~/workspace/certificates/var/lib/letsencrypt:/var/lib/letsencrypt -v ~/workspace/certificates/website:/data/letsencrypt -v ~/workspace/certificates/var/log/letsencrypt:/var/log/letsencrypt certbot/certbot certonly --webroot --email ${EMAIL} --agree-tos --no-eff-email --webroot-path=/data/letsencrypt -d *.${DOMAIN}

3. MANUAL INSTALLATION:

  • sudo certbot certonly --manual --preferred-challenges dns-01 --server https://acme-v02.api.letsencrypt.org/directory --email xyz@test.com --manual-public-ip-logging-ok --agree-tos -d *.${DOMAIN_NAME}
  • Deploy a DNS TXT record provided by Let’s Encrypt certbot after running the above command = send stuff to Chandra, this bit: the _acme challenge and the hash. Wait 2 minutes and press enter.

CERTIFICATE RENEWAL

  1. RENEWAL:-
  • sudo docker service rm ${STACK_NAME}_umbrella
  • sudo certbot certonly --force-renew --manual --preferred-challenges dns-01 --server https://acme-v02.api.letsencrypt.org/directory --email xyz@test.com --manual-public-ip-logging-ok --agree-tos -d *.${DOMAIN_NAME}
  • vim ~/workspace/Docker-Services/services/umbrella.yml
    • Change certificate name under “secrets” section
    • OLD:-
      • umbrella.crt:name: umbrella.crt-v9
      • umbrella.key:name: umbrella.key-v9
    • NEW:-
      • umbrella.crt:name: umbrella.crt-v10
      • umbrella.key:name: umbrella.key-v10
  • docker stack deploy -c ~/workspace/Docker-Services/services/umbrella.yml ${STACK_NAME}

Mail Server Setup

  • AUTOMATED (Recommended):- If you own a mail server(Recommended)

    • grep -rl 'SMTP_USER' ~/workspace/Docker-Services/* | xargs -i@ sed -i "s/SMTP_USER/${SMTP_USER}/g" @
    • grep -rl 'SMTP_PASS' ~/workspace/Docker-Services/* | xargs -i@ sed -i "s/SMTP_PASS/${SMTP_PASS}/g" @
    • grep -rl 'SMTP_SERVER' ~/workspace/Docker-Services/* | xargs -i@ sed -i "s/SMTP_SERVER/${SMTP_SERVER}/g" @
  • MANUAL(Deprecated):- If you don’t own a mail server

  • Grab your SMTP credentials: (this is in my case)

    • SMTP hostname: smtp.eu.mailgun.org
    • Port: 587 (recommended)
    • Username: postmaster@${DOMAIN_NAME}
    • Default password: aae653f3afa4f59dd7885085cfa33131-baa55c84-6f3f0f92
  • ManageSMTP credentials - {SHA512-CRYPT}$6$NBX1U6qSoZ1QfpFF$EJfnvJclM/18/adnGJk38Wqcts7eTE/zwVBxb2wrRPvH1.8Om1TWlelBcKLx2i4YDvKpGeYanJnPUYxZ8k0CH.

  • Make changes in services/keyrock.yml & services/ckan.yml & services/apinf.yml

  • Make changes in config/keyrock.js in “config.mail” * host: ‘smtp.eu.mailgun.org’,

Swarm Mode - Part 1

  • Swarm Initialization - docker swarm init
  • Deployment in order docker stack deploy -c ~/workspace/Docker-Services/services/mongo.yml -c ~/workspace/Docker-Services/services/nginx.yml -c ~/workspace/Docker-Services/services/mail.yml -c ~/workspace/Docker-Services/services/ngsiproxy.yml -c ~/workspace/Docker-Services/services/orion.yml -c ~/workspace/Docker-Services/services/quantumleap.yml -c ~/workspace/Docker-Services/services/keyrock.yml -c ~/workspace/Docker-Services/services/umbrella.yml -c ~/workspace/Docker-Services/services/apinf.yml -c ~/workspace/Docker-Services/services/grafana.yml -c ~/workspace/Docker-Services/services/iotagent.yml -c ~/workspace/Docker-Services/services/iotagent-lora.yml -c ~/workspace/Docker-Services/services/kurento.yml -c ~/workspace/Docker-Services/services/nifi.yml -c ~/workspace/Docker-Services/services/orion-ld.yml -c ~/workspace/Docker-Services/services/perseo.yml -c ~/workspace/Docker-Services/services/cosmos.yml -c ~/workspace/Docker-Services/services/cadvisor.yml ${STACK_NAME}

Umbrella Configuration - Part 1

  • Visit “https://umbrella.${DOMAIN_NAME}/admin” and signup and then login
  • Add website backends
  • Configuration -> Website Backends
    • Add Website Backend

      • Frontend Host: ${DOMAIN_NAME}
      • Backend Protocol: http
      • Backend Server: nginx
      • Backend Port: 80
    • SAVE

    • Add Website Backend

      • Frontend Host: accounts.${DOMAIN_NAME}
      • Backend Protocol: http
      • Backend Server: keyrock
      • Backend Port: 3000
    • SAVE

    • Add Website Backend

      • Frontend Host: apis.${DOMAIN_NAME}
      • Backend Protocol: http
      • Backend Server: apinf
      • Backend Port: 3000
    • SAVE

    • Add Website Backend

      • Frontend Host: cadvisor.${DOMAIN_NAME}
      • Backend Protocol: http
      • Backend Server: cadvisor
      • Backend Port: 8085
    • SAVE

    • Add Website Backend

      • Frontend Host: charts.${DOMAIN_NAME}
      • Backend Protocol: http
      • Backend Server: grafana
      • Backend Port: 3000
    • SAVE

    • Add Website Backend

      • Frontend Host: dashboards.${DOMAIN_NAME}
      • Backend Protocol: http
      • Backend Server: wirecloudnginx
      • Backend Port: 80
    • SAVE

    • Add Website Backend

      • Frontend Host: data.${DOMAIN_NAME}
      • Backend Protocol: http
      • Backend Server: ckan
      • Backend Port: 5000
    • SAVE

    • Add Website Backend

      • Frontend Host: knowage.${DOMAIN_NAME}
      • Backend Protocol: http
      • Backend Server: knowage.docker
      • Backend Port: 8083
    • SAVE

    • Add Website Backend

      • Frontend Host: market.${DOMAIN_NAME}
      • Backend Protocol: http
      • Backend Server: bae
      • Backend Port: 8004
    • SAVE

    • Add Website Backend

      • Frontend Host: ngsiproxy.${DOMAIN_NAME}
      • Backend Protocol: http
      • Backend Server: ngsiproxy
      • Backend Port: 3000
    • SAVE

    • Add Website Backend

      • Frontend Host: nifi.${DOMAIN_NAME}
      • Backend Protocol: http
      • Backend Server: nifi
      • Backend Port: 8080
    • SAVE

    • Add Website Backend

      • Frontend Host: perseo.${DOMAIN_NAME}
      • Backend Protocol: http
      • Backend Server: perseo-fe
      • Backend Port: 9090
    • SAVE

    • Add Website Backend

      • Frontend Host: umbrella.${DOMAIN_NAME}
      • Backend Protocol: http
      • Backend Server: nginx
      • Backend Port: 80
    • SAVE

Configuration -> Publish changes