Ansible वापरून डॉकर इमेज Dokku वर तैनात करा

Ansible वापरून डॉकर इमेज Dokku वर तैनात करा

प्रस्तावना

मला नुकतेच Heroku सारख्या "पॉकेट" PaaS बद्दल एक स्पष्ट नाव - Dokku बद्दल कळले. अनुप्रयोगात प्रमाणपत्र आणि बॉक्सच्या बाहेर vhost सहज जोडण्याच्या क्षमतेमुळे मी खूप आकर्षित झालो, म्हणून मी माझ्या डॉकर प्रतिमा Dokku वर हस्तांतरित करण्याचा निर्णय घेतला. हे खरे आहे की, Dokku कडे Heroku सारख्या कमांड्स नाहीत म्हणून मी निराश झालो होतो

dokku container:push
dokku container:release
// Очень было бы удобно, но еще нет :(

एक संघ आहे tags जे तुम्हाला प्रतिमा उपयोजित करण्यास अनुमती देते, परंतु या क्षणी प्रतिमा स्वतःच होस्टवर असणे आवश्यक आहे. दुसऱ्या शब्दांत, तुम्ही नुकतीच बनवलेली स्थानिक प्रतिमा रोल आउट करण्यासाठी, तुम्ही प्रथम ती होस्टवर कॉपी करणे आवश्यक आहे.

tags:create <app> <tag>                        # Add tag to latest running app image
tags:deploy <app> <tag>                        # Deploy tagged app image
tags:destroy <app> <tag>                       # Remove app image tag

मी Ansible शी परिचित आहे आणि मी त्याच्यासह साध्या बॅकएंड वितरण पाइपलाइन देखील तयार केल्या आहेत, त्यामुळे निवड करणे सोपे होते. अर्थात, मी कंटाळलो आणि dokku साठी प्लगइन लिहू शकेन, पण नाही, आता नाही.

प्लेबुक

हे प्लेबुक स्थानिक प्रतिमा संग्रहित करते, ती होस्टवर कॉपी करते, पुनर्संचयित करते आणि ती 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"

काही_इन्व्हेंटरी

[dokku_hosts]
your.domain.example

स्त्रोत: www.habr.com

DDoS संरक्षण, VPS VDS सर्व्हर असलेल्या साइटसाठी विश्वसनीय होस्टिंग खरेदी करा 🔥 डीडॉस संरक्षणासह विश्वसनीय वेबसाइट होस्टिंग, व्हीपीएस (VPS) व्हीडीएस (VDS) सर्व्हर्स खरेदी करा | ProHoster