Déploiement d'application(s) avec Ansible sur AWS (ou autres)

TG
  • Tommy Gingras
    Studio Webux S.E.N.C
    30 Août 2020

Déploiment de mon portfolio web sur AWS

Le script suivant fait plusieurs actions:

  • Installer et configurer le service Docker
  • Installer docker-compose
  • Déployer le Nginx de jwilder et le companion let’s encrypt
  • Puis déployer l’application

Voici le script Ansible utilisé pour faire le déploiement

- name: Deploy portfolio
  hosts: aws
  gather_facts: no
  become: yes

  vars:
    email: "tommy@studiowebux.com"

  tasks:
    - name: Install Docker
      yum:
        name: docker
        state: latest

    - name: Start and Enable Docker
      shell: |
        service docker start
        chkconfig docker on

    - name: Install docker-compose
      shell: |
        curl -L "https://github.com/docker/compose/releases/download/1.26.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
        chmod +x /usr/local/bin/docker-compose
        ln -s /usr/local/bin/docker-compose /usr/bin/docker-compose

    - name: Deploy Nginx using jwilder
      shell: |
        docker run --detach \
        --restart always \
        --name nginx-proxy \
        --publish 80:80 \
        --publish 443:443 \
        --volume /etc/nginx/certs \
        --volume /etc/nginx/vhost.d \
        --volume /usr/share/nginx/html \
        --volume /var/run/docker.sock:/tmp/docker.sock:ro \
        jwilder/nginx-proxy

    - name: Deploy Nginx using jwilder and let's encrypt
      shell: |
        docker run --detach \
        --name nginx-proxy-letsencrypt \
        --restart always \
        --volumes-from nginx-proxy \
        --volume /var/run/docker.sock:/var/run/docker.sock:ro \
        --env "DEFAULT_EMAIL{{ email }}" \
        jrcs/letsencrypt-nginx-proxy-companion

    # Replace this block to fit your application
    - block:
        - name: Create mailer directory
          file:
            path: /opt/mailer/
            state: directory

        - name: Copy the frontend image to the remote machine for mailer demo
          copy:
            src: ./mailer/mailer-frontend.tar
            dest: /opt/mailer/

        - name: Copy the backend image to the remote machine for mailer demo
          copy:
            src: ./mailer/mailer-backend.tar
            dest: /opt/mailer/

        - name: Copy the docker-compose for mailer demo
          copy:
            src: ./mailer/docker-compose.yml
            dest: /opt/mailer/

        - name: Copy the images to the remote machine for mailer demo
          shell: |
            docker load -i mailer-frontend.tar
            docker load -i mailer-backend.tar
          args:
            chdir: /opt/mailer/

        - name: Create log directory
          file:
            path: "/srv/JAFSS/nginx/logs/"
            state: directory

        - name: Launch the mailer demo
          shell: docker-compose up -d
          args:
            chdir: /opt/mailer/

Pour pour déployer l’application web,

ansible-playbook -i inventory main.yml --user ec2-user --private-key ~/Downloads/private.pem

Exemple du fichier inventory/hosts

[aws]
ec2-01-02-03-04.ca-central-1.compute.amazonaws.com

Conclusion

Ce script permet de déployer une/des application(s) avec docker et nginx (de jwilder), vous avez besoins d’une machine EC2 (ou autres) puis l’application sera disponible en quelque clics.