Π”Π΅ΠΏΠ»ΠΎΠΉ Π½Π° Docker Image Π½Π° Dokku с ΠΏΠΎΠΌΠΎΡ‰Ρ‚Π° Π½Π° Ansible

Π”Π΅ΠΏΠ»ΠΎΠΉ Π½Π° Docker Image Π½Π° Dokku с ΠΏΠΎΠΌΠΎΡ‰Ρ‚Π° Π½Π° Ansible

ΠŸΡ€ΠΎΠ»ΠΎΠ³

Наскоро Π½Π°ΡƒΡ‡ΠΈΡ… Π·Π° "ΠΊΠ°Ρ€ΠΌΠ°Π½Π΅Π½" PaaS, ΠΏΠΎΠ΄ΠΎΠ±Π΅Π½ Π½Π° Heroku, с доста ΠΎΡ‡Π΅Π²ΠΈΠ΄Π½ΠΎ ΠΈΠΌΠ΅ β€” Dokku. Много ΠΌΠ΅ ΠΏΡ€ΠΈΠ²Π»Π΅Ρ‡Π΅ Π²ΡŠΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚Ρ‚Π° Π·Π° лСсно добавянС Π½Π° сСртификат към ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅Ρ‚ΠΎ ΠΈ vhost ΠΎΡ‚ кутията, Π·Π°Ρ‚ΠΎΠ²Π° Ρ€Π΅ΡˆΠΈΡ… Π΄Π° прСнСса своитС docker изобраТСния Π½Π° Dokku. Π’ΡΡŠΡ‰Π½ΠΎΡΡ‚, бях Ρ€Π°Π·ΠΎΡ‡Π°Ρ€ΠΎΠ²Π°Π½, Ρ‡Π΅ Π² Dokku няма ΠΊΠΎΠΌΠ°Π½Π΄ΠΈ, ΠΏΠΎΠ΄ΠΎΠ±Π½ΠΈ Π½Π° Heroku.

dokku container:push
dokku container:release
// Π‘ΠΈ Π±ΠΈΠ»ΠΎ ΠΌΠ½ΠΎΠ³ΠΎ ΡƒΠ΄ΠΎΠ±Π½ΠΎ, Π½ΠΎ всС ΠΎΡ‰Π΅ няма :(

Π‘ΡŠΡ‰Π΅ΡΡ‚Π²ΡƒΠ²Π° ΠΊΠΎΠΌΠ°Π½Π΄Π° tags която позволява Π΄Π΅ΠΏΠ»ΠΎΠΈΡ€Π°Π½Π΅Ρ‚ΠΎ Π½Π° изобраТСния, Π½ΠΎ самото ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ трябва Π΄Π° бъдС Π²Π΅Ρ‡Π΅ Π½Π° хоста Π² Ρ‚ΠΎΠ·ΠΈ ΠΌΠΎΠΌΠ΅Π½Ρ‚. Π‘ Π΄Ρ€ΡƒΠ³ΠΈ Π΄ΡƒΠΌΠΈ, Π·Π° Π΄Π° ΠΈΠ·ΠΊΠ°Ρ€Π°Ρ‚Π΅ Ρ‚ΠΎΠΊΡƒ-Ρ‰ΠΎ направСния Π»ΠΎΠΊΠ°Π»Π΅Π½ image, first трябва Π΄Π° Π³ΠΎ ΠΊΠΎΠΏΠΈΡ€Π°Ρ‚Π΅ Π½Π° хоста.

tags:create                          # Π”ΠΎΠ±Π°Π²Π΅Ρ‚Π΅ Ρ‚Π°Π³ към Π½Π°ΠΉ-Π½ΠΎΠ²ΠΎΡ‚ΠΎ Ρ€Π°Π±ΠΎΡ‚Π΅Ρ‰ΠΎ ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ Π½Π° ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅Ρ‚ΠΎ
tags:deploy                          # Π”Π΅ΠΏΠ»ΠΎΠΉ Π½Π° Ρ‚Π°Π³Π½Π°Ρ‚ΠΎ ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ Π½Π° ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅Ρ‚ΠΎ
tags:destroy                         # ΠŸΡ€Π΅ΠΌΠ°Ρ…Π½Π΅Ρ‚Π΅ Ρ‚Π°Π³ Π½Π° ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ Π½Π° ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅Ρ‚ΠΎ

Π—Π°ΠΏΠΎΠ·Π½Π°Ρ‚ съм с Ansible ΠΈ Π΄Π°ΠΆΠ΅ съм създавал с Π½Π΅Π³ΠΎΠ²Π° ΠΏΠΎΠΌΠΎΡ‰ прости ΠΏΠ°ΠΉΠΏΠ»Π°ΠΉΠ½ΠΈ Π·Π° доставка Π½Π° Π±Π΅ΠΊΠ΅Π½Π΄Π°, Ρ‚Π°ΠΊΠ° Ρ‡Π΅ ΠΈΠ·Π±ΠΎΡ€ΡŠΡ‚ бСшС прост. Π Π°Π·Π±ΠΈΡ€Π° сС, моТСшС Π΄Π° сС ΠΎΠΏΠΈΡ‚Π°ΠΌ Π΄Π° напиша плъгин Π·Π° dokku, Π½ΠΎ Π½Π΅, Π½Π΅ сСга.

Playbook

Π’ΠΎΠ·ΠΈ playbook Π°Ρ€Ρ…ΠΈΠ²ΠΈΡ€Π° ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΎ Π»ΠΎΠΊΠ°Π»Π½ΠΎ ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅, ΠΊΠΎΠΏΠΈΡ€Π° Π³ΠΎ Π½Π° хоста, Π²ΡŠΠ·ΡΡ‚Π°Π½ΠΎΠ²ΡΠ²Π° ΠΈ Π΄Π΅ΠΏΠ»ΠΎΠΉΠ²Π° Π² dokku. ΠŸΡƒΠ±Π»ΠΈΠΊΡƒΠ²Π°Π½ Π΅ Π² Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠΉ Π² Gitlab. Има ΠΌΠ½ΠΎΠ³ΠΎ Π²ΡŠΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΠΈ Π·Π° ΠΏΠΎΠ΄ΠΎΠ±Ρ€Π΅Π½ΠΈΠ΅.

push-image.dokku.yml

push-image.dokku.yml

---
  - name: "DEPLOY APP '{{ appname }}' TO DOKKU"
    hosts: dokku_hosts
    remote_user: root
    gather_facts: false
    vars:
      tarname: "{{ appname }}__{{ image }}.tar"
      upload_dir: "/usr/local/src"
      upload_path: "{{ upload_dir }}/{{ tarname }}"
      apptag: "{{ upload_tag | default('latest') }}"
      dokku_image: "dokku/{{ appname }}:{{ apptag }}"

    tasks:
      - name: "Archive '{{ image }}' to upload"
        register: env
        delegate_to: localhost
        shell: 
          cmd: docker image save -o "./{{ tarname }}" {{ image }}

      - name: "Upload image '{{ image }}' to dokku at '{{ inventory_hostname }}'"
        register: upload
        copy:
          src: "./{{ tarname }}"
          dest: "{{ upload_path }}"

      - name: "Log - Upload result"
        debug:
          var: upload.dest

      - name: "Restore uploaded docker image"
        register: restore
        shell:
          cmd: docker image load -i "{{ upload_path }}"

      - name: "Log - Restore image"
        debug:
          var: restore.stdout_lines

      - name: "Retag image to '{{ dokku_image }}'"
        shell: 
          cmd: docker tag "{{ image }}" "{{ dokku_image }}"

      - name: "Create dokku tag for '{{ dokku_image }}'"
        shell: 
          cmd: dokku tags:create "{{ appname }}" "{{ apptag }}"

      - name: "Release '{{ appname }}'"
        register: release
        shell: 
          cmd: dokku tags:deploy "{{ appname }}" "{{ apptag }}"  

      - name: "Log - Release"
        debug:
          var: release.stdout_lines  

ΠΏΡ€Π΅Π΄ΠΏΠΎΠ»Π°Π³Π° сС, Ρ‡Π΅ ansible Π½Π° Π»ΠΎΠΊΠ°Π»Π½Π°Ρ‚Π° машина ΠΈ dokku Π½Π° хоста Π²Π΅Ρ‡Π΅ са инсталирани

Π˜Π·ΠΏΠΎΠ»Π·Π²Π°ΠΉΡ‚Π΅ Ρ‚Π°ΠΊΠ°

ansible-playbook push-image.dokku.yml -i some_inventory -e "appname=DOKKU_APP_NAME image=DOCKER_IMAGE"

some_inventory

[dokku_hosts]
your.domain.example

Π˜Π·Ρ‚ΠΎΡ‡Π½ΠΈΠΊ: habr.com

ΠšΡƒΠΏΠ΅Ρ‚Π΅ Π½Π°Π΄Π΅ΠΆΠ΄Π΅Π½ хостинг Π·Π° сайтовС с Π·Π°Ρ‰ΠΈΡ‚Π° ΠΎΡ‚ DDoS, VPS VDS ΡΡŠΡ€Π²ΡŠΡ€ΠΈ πŸ”₯ ΠšΡƒΠΏΠ΅Ρ‚Π΅ Π½Π°Π΄Π΅ΠΆΠ΄Π΅Π½ хостинг Π·Π° сайтовС с Π·Π°Ρ‰ΠΈΡ‚Π° ΠΎΡ‚ DDoS, VPS VDS ΡΡŠΡ€Π²ΡŠΡ€ΠΈ | ProHoster