انفراسٹرکچر کو کوڈ اپروچ کے طور پر استعمال کرتے ہوئے Nexus Sonatype کو انسٹال اور کنفیگر کرنا

Sonatype Nexus ایک مربوط پلیٹ فارم ہے جس کے ذریعے ڈویلپر جاوا (Maven) کے انحصار، Docker، Python، Ruby، NPM، Bower امیجز، RPM پیکیجز، gitlfs، Apt، Go، Nuget کو پراکسی، اسٹور اور ان کا نظم کرسکتے ہیں اور اپنی سافٹ ویئر سیکیورٹی کو تقسیم کرسکتے ہیں۔

آپ کو سوناٹائپ گٹھ جوڑ کی ضرورت کیوں ہے؟

  • نجی نمونے کو ذخیرہ کرنے کے لیے؛
  • انٹرنیٹ سے ڈاؤن لوڈ کیے گئے نمونے کیش کرنے کے لیے؛

بنیادی Sonatype Nexus پیکیج میں معاون نمونے:

  • جاوا، ماون (جار)
  • میں Docker
  • ازگر (پائپ)
  • روبی (جواہر)
  • این پی ایم
  • دباؤ
  • یم (rpm)
  • gitlfs
  • خام
  • Apt (deb)
  • Go
  • نوگیٹ

کمیونٹی کے تعاون یافتہ نمونے:

  • تحریر
  • کانن
  • سی پی اے این
  • ELPA
  • پتوار
  • P2
  • R

استعمال کرتے ہوئے Sonatype Nexus انسٹال کرنا https://github.com/ansible-ThoTeam/nexus3-oss

کے تقاضے

  • انٹرنیٹ پر جوابی استعمال کے بارے میں پڑھیں۔
  • قابل قبول انسٹال کریں۔ pip install ansible ورک سٹیشن پر جہاں پلے بک چلتی ہے۔
  • سیٹ کریں geerlingguy.java ورک سٹیشن پر جہاں پلے بک چلتی ہے۔
  • سیٹ کریں geerlingguy.apache ورک سٹیشن پر جہاں پلے بک چلتی ہے۔
  • اس کردار کا تجربہ CentOS 7، Ubuntu Xenial (16.04) اور Bionic (18.04)، Debian Jessie اور Stretch پر کیا گیا ہے۔
  • jmespath لائبریری کو ورک سٹیشن پر انسٹال کرنا چاہیے جہاں پلے بک چل رہی ہے۔ نصب کرنے کے لئے: sudo pip install -r requirements.txt
  • پلے بک فائل (نیچے دی گئی مثال) کو nexus.yml فائل میں محفوظ کریں۔
  • گٹھ جوڑ کی تنصیب چلائیں۔ ansible-playbook -i host nexus.yml

Maven (java)، Docker، Python، Ruby، NPM، Bower، RPM اور gitlfs ریپوزٹری کے ساتھ LDAP کے بغیر گٹھ جوڑ کو انسٹال کرنے کے لیے جوابی پلے بک کی مثال۔

---
- name: Nexus
  hosts: nexus
  become: yes

  vars:
    nexus_timezone: 'Asia/Omsk'
    nexus_admin_password: "admin123"
    nexus_public_hostname: 'apatsev-nexus-playbook'
    httpd_setup_enable: false
    nexus_privileges:
      - name: all-repos-read
        description: 'Read & Browse access to all repos'
        repository: '*'
        actions:
          - read
          - browse
      - name: company-project-deploy
        description: 'Deployments to company-project'
        repository: company-project
        actions:
          - add
          - edit
    nexus_roles:
      - id: Developpers # maps to the LDAP group
        name: developers
        description: All developers
        privileges:
          - nx-search-read
          - all-repos-read
          - company-project-deploy
        roles: []
    nexus_local_users:
      - username: jenkins # used as key to update
        first_name: Jenkins
        last_name: CI
        email: [email protected]
        password: "s3cr3t"
        roles:
          - Developpers # role ID here
    nexus_blobstores:
      - name: company-artifacts
        path: /var/nexus/blobs/company-artifacts
    nexus_scheduled_tasks:
      - name: compact-blobstore
        cron: '0 0 22 * * ?'
        typeId: blobstore.compact
        taskProperties:
          blobstoreName: 'company-artifacts'

    nexus_repos_maven_proxy:
      - name: central
        remote_url: 'https://repo1.maven.org/maven2/'
        layout_policy: permissive
      - name: jboss
        remote_url: 'https://repository.jboss.org/nexus/content/groups/public-jboss/'
      - name: vaadin-addons
        remote_url: 'https://maven.vaadin.com/vaadin-addons/'
      - name: jaspersoft
        remote_url: 'https://jaspersoft.artifactoryonline.com/jaspersoft/jaspersoft-repo/'
        version_policy: mixed
    nexus_repos_maven_hosted:
      - name: company-project
        version_policy: mixed
        write_policy: allow
        blob_store: company-artifacts
    nexus_repos_maven_group:
      - name: public
        member_repos:
          - central
          - jboss
          - vaadin-addons
          - jaspersoft

    # Yum. Change nexus_config_yum to true for create yum repository
    nexus_config_yum: true
    nexus_repos_yum_hosted:
      - name: private_yum_centos_7
        repodata_depth: 1
    nexus_repos_yum_proxy:
      - name: epel_centos_7_x86_64
        remote_url: http://download.fedoraproject.org/pub/epel/7/x86_64
        maximum_component_age: -1
        maximum_metadata_age: -1
        negative_cache_ttl: 60
      - name: centos-7-os-x86_64
        remote_url: http://mirror.centos.org/centos/7/os/x86_64/
        maximum_component_age: -1
        maximum_metadata_age: -1
        negative_cache_ttl: 60
    nexus_repos_yum_group:
      - name: yum_all
        member_repos:
          - private_yum_centos_7
          - epel_centos_7_x86_64

    # NPM. Change nexus_config_npm to true for create npm repository
    nexus_config_npm: true
    nexus_repos_npm_hosted: []
    nexus_repos_npm_group:
      - name: npm-public
        member_repos:
          - npm-registry
    nexus_repos_npm_proxy:
      - name: npm-registry
        remote_url: https://registry.npmjs.org/
        negative_cache_enabled: false

    # Docker. Change nexus_config_docker to true for create docker repository
    nexus_config_docker: true
    nexus_repos_docker_hosted:
      - name: docker-hosted
        http_port: "{{ nexus_docker_hosted_port }}"
        v1_enabled: True
    nexus_repos_docker_proxy:
      - name: docker-proxy
        http_port: "{{ nexus_docker_proxy_port }}"
        v1_enabled: True
        index_type: "HUB"
        remote_url: "https://registry-1.docker.io"
        use_nexus_certificates_to_access_index: false
        maximum_component_age: 1440
        maximum_metadata_age: 1440
        negative_cache_enabled: true
        negative_cache_ttl: 1440
    nexus_repos_docker_group:
      - name: docker-group
        http_port: "{{ nexus_docker_group_port }}"
        v1_enabled: True
        member_repos:
          - docker-hosted
          - docker-proxy

    # Bower. Change nexus_config_bower to true for create bower repository
    nexus_config_bower: true
    nexus_repos_bower_hosted:
      - name: bower-hosted
    nexus_repos_bower_proxy:
      - name: bower-proxy
        index_type: "proxy"
        remote_url: "https://registry.bower.io"
        use_nexus_certificates_to_access_index: false
        maximum_component_age: 1440
        maximum_metadata_age: 1440
        negative_cache_enabled: true
        negative_cache_ttl: 1440
    nexus_repos_bower_group:
      - name: bower-group
        member_repos:
          - bower-hosted
          - bower-proxy

    # Pypi. Change nexus_config_pypi to true for create pypi repository
    nexus_config_pypi: true
    nexus_repos_pypi_hosted:
      - name: pypi-hosted
    nexus_repos_pypi_proxy:
      - name: pypi-proxy
        index_type: "proxy"
        remote_url: "https://pypi.org/"
        use_nexus_certificates_to_access_index: false
        maximum_component_age: 1440
        maximum_metadata_age: 1440
        negative_cache_enabled: true
        negative_cache_ttl: 1440
    nexus_repos_pypi_group:
      - name: pypi-group
        member_repos:
          - pypi-hosted
          - pypi-proxy

    # rubygems. Change nexus_config_rubygems to true for create rubygems repository
    nexus_config_rubygems: true
    nexus_repos_rubygems_hosted:
      - name: rubygems-hosted
    nexus_repos_rubygems_proxy:
      - name: rubygems-proxy
        index_type: "proxy"
        remote_url: "https://rubygems.org"
        use_nexus_certificates_to_access_index: false
        maximum_component_age: 1440
        maximum_metadata_age: 1440
        negative_cache_enabled: true
        negative_cache_ttl: 1440
    nexus_repos_rubygems_group:
      - name: rubygems-group
        member_repos:
          - rubygems-hosted
          - rubygems-proxy

    # gitlfs. Change nexus_config_gitlfs to true for create gitlfs repository
    nexus_config_gitlfs: true
    nexus_repos_gitlfs_hosted:
      - name: gitlfs-hosted

  roles:
    - { role: geerlingguy.java }
    # Debian/Ubuntu only
    # - { role: geerlingguy.apache, apache_create_vhosts: no, apache_mods_enabled: ["proxy_http.load", "headers.load"], apache_remove_default_vhost: true, tags: ["geerlingguy.apache"] }
    # RedHat/CentOS only
    - { role: geerlingguy.apache, apache_create_vhosts: no, apache_remove_default_vhost: true, tags: ["geerlingguy.apache"] }
    - { role: ansible-thoteam.nexus3-oss, tags: ['ansible-thoteam.nexus3-oss'] }

اسکرین شاٹس:

انفراسٹرکچر کو کوڈ اپروچ کے طور پر استعمال کرتے ہوئے Nexus Sonatype کو انسٹال اور کنفیگر کرنا

انفراسٹرکچر کو کوڈ اپروچ کے طور پر استعمال کرتے ہوئے Nexus Sonatype کو انسٹال اور کنفیگر کرنا

متغیر کردار

کردار متغیرات

پہلے سے طے شدہ اقدار کے ساتھ متغیرات (دیکھیں۔ default/main.yml):

عمومی متغیرات

    nexus_version: ''
    nexus_timezone: 'UTC'

بطور ڈیفالٹ، کردار Nexus کا تازہ ترین دستیاب ورژن انسٹال کرے گا۔ آپ متغیر کو تبدیل کر کے ورژن کو ٹھیک کر سکتے ہیں۔ nexus_version. پر دستیاب ورژن دیکھیں https://www.sonatype.com/download-oss-sonatype.

اگر آپ نئے ورژن میں تبدیل ہوتے ہیں، تو کردار آپ کی Nexus انسٹالیشن کو اپ ڈیٹ کرنے کی کوشش کرے گا۔

اگر آپ Nexus کا تازہ ترین سے پرانا ورژن استعمال کر رہے ہیں، تو آپ کو یہ یقینی بنانا چاہیے کہ آپ ایسی خصوصیات استعمال نہیں کر رہے ہیں جو انسٹال کردہ ریلیز میں دستیاب نہیں ہیں (مثال کے طور پر، yum repositories کی میزبانی 3.8.0 سے زیادہ نیکسس کے لیے دستیاب ہے، git lfs repo 3.3.0 وغیرہ سے زیادہ گٹھ جوڑ کے لیے)

nexus timezone جاوا ٹائم زون کا نام ہے، جو nexus_scheduled کاموں کے لیے درج ذیل کرون اظہار کے ساتھ مل کر مفید ہو سکتا ہے۔

Nexus پورٹ اور سیاق و سباق کا راستہ

    nexus_default_port: 8081
    nexus_default_context_path: '/'

جاوا کنکشن کے عمل کا پورٹ اور سیاق و سباق کا راستہ۔ nexus_default_context_path سیٹ ہونے پر فارورڈ سلیش پر مشتمل ہونا چاہیے، جیسے: nexus_default_context_path: '/nexus/'.

Nexus OS صارف اور گروپ

    nexus_os_group: 'nexus'
    nexus_os_user: 'nexus'

صارف اور گروپ جو Nexus فائلوں کے مالک ہیں اور سروس چلاتے ہیں اگر کوئی غائب ہے تو کردار کے ذریعہ بنایا جائے گا۔

    nexus_os_user_home_dir: '/home/nexus'

گٹھ جوڑ صارف کے لیے ڈیفالٹ ہوم ڈائرکٹری کو تبدیل کرنے کی اجازت دیں۔

Nexus مثال کی ڈائریکٹریز

    nexus_installation_dir: '/opt'
    nexus_data_dir: '/var/nexus'
    nexus_tmp_dir: "{{ (ansible_os_family == 'RedHat') | ternary('/var/nexus-tmp', '/tmp/nexus') }}"

Nexus کیٹلاگ۔

  • nexus_installation_dir نصب قابل عمل فائلوں پر مشتمل ہے۔
  • nexus_data_dir تمام کنفیگریشن، ریپوزٹریز اور ڈاؤن لوڈ کردہ نمونے پر مشتمل ہے۔ اپنی مرضی کے مطابق بلاب اسٹور کے راستے nexus_data_dir اپنی مرضی کے مطابق کیا جا سکتا ہے، ذیل میں دیکھیں nexus_blobstores.
  • nexus_tmp_dir تمام عارضی فائلوں پر مشتمل ہے۔ redhat کے لیے پہلے سے طے شدہ راستہ سے منتقل کر دیا گیا ہے۔ /tmp خودکار صفائی کے طریقہ کار کے ساتھ ممکنہ مسائل پر قابو پانے کے لیے۔ دیکھیں نمبر 168۔

Nexus JVM میموری کے استعمال کو ترتیب دینا

    nexus_min_heap_size: "1200M"
    nexus_max_heap_size: "{{ nexus_min_heap_size }}"
    nexus_max_direct_memory: "2G"

یہ Nexus کے لیے پہلے سے طے شدہ ترتیبات ہیں۔ براہ کرم ان اقدار کو تبدیل نہ کریں۔ اگر آپ نے نہیں پڑھا ہے۔ گٹھ جوڑ کے نظام کی ضروریات میموری سیکشن اور سمجھ میں نہیں آتا کہ وہ کیا کر رہے ہیں۔

دوسری وارننگ کے طور پر، مندرجہ بالا دستاویز کا ایک اقتباس یہ ہے:

کارکردگی کو بہتر بنانے کی کوشش میں JVM ہیپ میموری کو تجویز کردہ اقدار سے زیادہ بڑھانے کی سفارش نہیں کی جاتی ہے۔ اس کا اصل میں الٹا اثر ہو سکتا ہے، جس کے نتیجے میں آپریٹنگ سسٹم کے لیے غیر ضروری کام ہو سکتا ہے۔

ایڈمنسٹریٹر پاس ورڈ

    nexus_admin_password: 'changeme'

سیٹ اپ کے لیے "ایڈمن" اکاؤنٹ کا پاس ورڈ۔ یہ صرف پہلی ڈیفالٹ انسٹالیشن پر کام کرتا ہے۔. براہ کرم دیکھیں [پہلی انسٹالیشن کے بعد ایڈمن پاس ورڈ تبدیل کریں](# change-admin-password-after-first-install) اگر آپ بعد میں کسی کردار کا استعمال کرتے ہوئے اسے تبدیل کرنا چاہتے ہیں۔

اس کی سختی سے سفارش کی جاتی ہے کہ آپ اپنے پاس ورڈ کو پلے بک میں واضح متن میں محفوظ نہ کریں، بلکہ [انسیبل والٹ انکرپشن] استعمال کریں۔https://docs.ansible.com/ansible/latest/user_guide/vault.html) (یا تو ان لائن یا ایک علیحدہ فائل میں جس میں بھری ہوئی ہے جیسے شامل_وار)

ڈیفالٹ کے ذریعے گمنام رسائی

    nexus_anonymous_access: false

گمنام رسائی بطور ڈیفالٹ غیر فعال ہے۔ کے بارے میں مزید پڑھیں گمنام رسائی.

عوامی میزبان نام

    nexus_public_hostname: 'nexus.vm'
    nexus_public_scheme: https

مکمل طور پر اہل ڈومین نام اور اسکیم (https یا HTTP) جس کے تحت Nexus مثال اس کے کلائنٹس کے لیے دستیاب ہوگی۔

اس کردار کے لیے API رسائی

    nexus_api_hostname: localhost
    nexus_api_scheme: http
    nexus_api_validate_certs: "{{ nexus_api_scheme == 'https' }}"
    nexus_api_context_path: "{{ nexus_default_context_path }}"
    nexus_api_port: "{{ nexus_default_port }}"

یہ متغیرات کنٹرول کرتے ہیں کہ کردار کس طرح Nexus API سے پروویژننگ کے لیے جڑتا ہے۔
صرف اعلی درجے کے صارفین کے لیے۔ آپ شاید ان ڈیفالٹ ترتیبات کو تبدیل نہیں کرنا چاہتے

ایک ریورس پراکسی ترتیب دینا

    httpd_setup_enable: false
    httpd_server_name: "{{ nexus_public_hostname }}"
    httpd_default_admin_email: "[email protected]"
    httpd_ssl_certificate_file: 'files/nexus.vm.crt'
    httpd_ssl_certificate_key_file: 'files/nexus.vm.key'
    # httpd_ssl_certificate_chain_file: "{{ httpd_ssl_certificate_file }}"
    httpd_copy_ssl_files: true

سیٹ کریں SSL ریورس پراکسی.
ایسا کرنے کے لیے آپ کو httpd انسٹال کرنا ہوگا۔ نوٹ: کب کے لیے httpd_setup_enable قیمت مقرر کریںtrue, Nexus رابطے 127.0.0.1:8081، اس طرح کوئی بیرونی IP ایڈریس سے HTTP پورٹ 8081 کے ذریعے براہ راست قابل رسائی ہونا۔

پہلے سے طے شدہ میزبان نام استعمال کیا جاتا ہے۔ nexus_public_hostname. اگر آپ کو کسی وجہ سے مختلف ناموں کی ضرورت ہو تو آپ سیٹ کر سکتے ہیں۔ httpd_server_name ایک مختلف معنی کے ساتھ۔

С httpd_copy_ssl_files: true (بطور ڈیفالٹ) مندرجہ بالا سرٹیفکیٹس آپ کی پلے بک ڈائرکٹری میں موجود ہونے چاہئیں اور سرور پر کاپی کر کے اپاچی میں کنفیگر کیے جائیں گے۔

اگر آپ سرور پر موجود سرٹیفکیٹ استعمال کرنا چاہتے ہیں تو انسٹال کریں۔ httpd_copy_ssl_files: false اور درج ذیل متغیرات فراہم کریں:

    # These specifies to the vhost where to find on the remote server file
    # system the certificate files.
    httpd_ssl_cert_file_location: "/etc/pki/tls/certs/wildcard.vm.crt"
    httpd_ssl_cert_key_location: "/etc/pki/tls/private/wildcard.vm.key"
    # httpd_ssl_cert_chain_file_location: "{{ httpd_ssl_cert_file_location }}"

httpd_ssl_cert_chain_file_location اختیاری ہے اور اگر آپ چین فائل کو اپنی مرضی کے مطابق نہیں بنانا چاہتے ہیں تو اسے سیٹ کیے بغیر چھوڑ دیا جانا چاہیے۔

    httpd_default_admin_email: "[email protected]"

ڈیفالٹ ایڈمن ای میل ایڈریس سیٹ کریں۔

LDAP کنفیگریشن

LDAP کنکشنز اور سیکورٹی کے دائرے کو بطور ڈیفالٹ غیر فعال کر دیا جاتا ہے۔

    nexus_ldap_realm: false
    ldap_connections: []

LDAP کنکشنز، ہر عنصر اس طرح لگتا ہے:

    nexus_ldap_realm: true
    ldap_connections:
      - ldap_name: 'My Company LDAP' # used as a key to update the ldap config
        ldap_protocol: 'ldaps' # ldap or ldaps
        ldap_hostname: 'ldap.mycompany.com'
        ldap_port: 636
        ldap_use_trust_store: false # Wether or not to use certs in the nexus trust store
        ldap_search_base: 'dc=mycompany,dc=net'
        ldap_auth: 'none' # or simple
        ldap_auth_username: 'username' # if auth = simple
        ldap_auth_password: 'password' # if auth = simple
        ldap_user_base_dn: 'ou=users'
        ldap_user_filter: '(cn=*)' # (optional)
        ldap_user_object_class: 'inetOrgPerson'
        ldap_user_id_attribute: 'uid'
        ldap_user_real_name_attribute: 'cn'
        ldap_user_email_attribute: 'mail'
        ldap_user_subtree: false
        ldap_map_groups_as_roles: false
        ldap_group_base_dn: 'ou=groups'
        ldap_group_object_class: 'posixGroup'
        ldap_group_id_attribute: 'cn'
        ldap_group_member_attribute: 'memberUid'
        ldap_group_member_format: '${username}'
        ldap_group_subtree: false

مثال کے طور پر LDAP کنفیگریشن برائے گمنام تصدیق (گمنام پابند)، یہ بھی ایک "کم سے کم" ترتیب ہے:

    nexus_ldap_realm: true
    ldap_connection:
      - ldap_name: 'Simplest LDAP config'
        ldap_protocol: 'ldaps'
        ldap_hostname: 'annuaire.mycompany.com'
        ldap_search_base: 'dc=mycompany,dc=net'
        ldap_port: 636
        ldap_use_trust_store: false
        ldap_user_id_attribute: 'uid'
        ldap_user_real_name_attribute: 'cn'
        ldap_user_email_attribute: 'mail'
        ldap_user_object_class: 'inetOrgPerson'

سادہ تصدیق کے لیے LDAP کنفیگریشن کی مثال (DSA اکاؤنٹ کا استعمال کرتے ہوئے):

    nexus_ldap_realm: true
    ldap_connections:
      - ldap_name: 'LDAP config with DSA'
        ldap_protocol: 'ldaps'
        ldap_hostname: 'annuaire.mycompany.com'
        ldap_port: 636
        ldap_use_trust_store: false
        ldap_auth: 'simple'
        ldap_auth_username: 'cn=mynexus,ou=dsa,dc=mycompany,dc=net'
        ldap_auth_password: "{{ vault_ldap_dsa_password }}" # better keep passwords in an ansible vault
        ldap_search_base: 'dc=mycompany,dc=net'
        ldap_user_base_dn: 'ou=users'
        ldap_user_object_class: 'inetOrgPerson'
        ldap_user_id_attribute: 'uid'
        ldap_user_real_name_attribute: 'cn'
        ldap_user_email_attribute: 'mail'
        ldap_user_subtree: false

مثال کے طور پر سادہ توثیق کے لیے LDAP ترتیب (DSA اکاؤنٹ کا استعمال کرتے ہوئے) + کرداروں کے طور پر نقش کردہ گروپس:

    nexus_ldap_realm: true
    ldap_connections
      - ldap_name: 'LDAP config with DSA'
        ldap_protocol: 'ldaps'
        ldap_hostname: 'annuaire.mycompany.com'
        ldap_port: 636
        ldap_use_trust_store: false
        ldap_auth: 'simple'
        ldap_auth_username: 'cn=mynexus,ou=dsa,dc=mycompany,dc=net'
        ldap_auth_password: "{{ vault_ldap_dsa_password }}" # better keep passwords in an ansible vault
        ldap_search_base: 'dc=mycompany,dc=net'
        ldap_user_base_dn: 'ou=users'
        ldap_user_object_class: 'inetOrgPerson'
        ldap_user_id_attribute: 'uid'
        ldap_user_real_name_attribute: 'cn'
        ldap_user_email_attribute: 'mail'
        ldap_map_groups_as_roles: true
        ldap_group_base_dn: 'ou=groups'
        ldap_group_object_class: 'groupOfNames'
        ldap_group_id_attribute: 'cn'
        ldap_group_member_attribute: 'member'
        ldap_group_member_format: 'uid=${username},ou=users,dc=mycompany,dc=net'
        ldap_group_subtree: false

سادہ تصدیق (DSA اکاؤنٹ کا استعمال کرتے ہوئے) کے لیے LDAP کنفیگریشن کی مثال + گروپس کو کردار کے طور پر متحرک طور پر نقشہ بنایا گیا ہے:

    nexus_ldap_realm: true
    ldap_connections:
      - ldap_name: 'LDAP config with DSA'
        ldap_protocol: 'ldaps'
        ldap_hostname: 'annuaire.mycompany.com'
        ldap_port: 636
        ldap_use_trust_store: false
        ldap_auth: 'simple'
        ldap_auth_username: 'cn=mynexus,ou=dsa,dc=mycompany,dc=net'
        ldap_auth_password: "{{ vault_ldap_dsa_password }}" # better keep passwords in an ansible vault
        ldap_search_base: 'dc=mycompany,dc=net'
        ldap_user_base_dn: 'ou=users'
        ldap_user_object_class: 'inetOrgPerson'
        ldap_user_id_attribute: 'uid'
        ldap_user_real_name_attribute: 'cn'
        ldap_user_email_attribute: 'mail'
        ldap_map_groups_as_roles: true
        ldap_map_groups_as_roles_type: 'dynamic'
        ldap_user_memberof_attribute: 'memberOf'

مراعات

    nexus_privileges:
      - name: all-repos-read # used as key to update a privilege
        # type: <one of application, repository-admin, repository-content-selector, repository-view, script or wildcard>
        description: 'Read & Browse access to all repos'
        repository: '*'
        actions: # can be add, browse, create, delete, edit, read or  * (all)
          - read
          - browse
        # pattern: pattern
        # domain: domain
        # script_name: name

RЎRїReSЃRѕRє مراعات ترتیبات کے لئے. دستاویزات اور GUI کو دیکھیں کہ کون سے متغیرات کو استحقاق کی قسم کے لحاظ سے سیٹ کرنے کی ضرورت ہے۔

ان عناصر کو درج ذیل ڈیفالٹ اقدار کے ساتھ ملایا گیا ہے۔

    _nexus_privilege_defaults:
      type: repository-view
      format: maven2
      actions:
        - read

کردار (Nexus کے اندر اس کا مطلب ہے)

    nexus_roles:
      - id: Developpers # can map to a LDAP group id, also used as a key to update a role
        name: developers
        description: All developers
        privileges:
          - nx-search-read
          - all-repos-read
        roles: [] # references to other role names

RЎRїReSЃRѕRє کردار ترتیبات کے لئے.

صارفین

    nexus_local_users: []
      # - username: jenkins # used as key to update
      #   state: present # default value if ommited, use 'absent' to remove user
      #   first_name: Jenkins
      #   last_name: CI
      #   email: [email protected]
      #   password: "s3cr3t"
      #   roles:
      #     - developers # role ID

گٹھ جوڑ میں بنانے کے لیے مقامی (غیر LDAP) صارفین/اکاؤنٹس کی فہرست۔

Nexus میں بنانے کے لیے مقامی (غیر LDAP) صارفین/اکاؤنٹس کی فہرست۔

      nexus_ldap_users: []
      # - username: j.doe
      #   state: present
      #   roles:
      #     - "nx-admin"

صارفین/ کرداروں کی Ldap میپنگ۔ حالت absent اگر کوئی پہلے سے موجود ہے تو موجودہ صارف سے کردار ہٹا دے گا۔
Ldap صارفین کو حذف نہیں کیا گیا ہے۔ غیر موجود صارف کے لیے کردار متعین کرنے کی کوشش کرنے سے غلطی ہو جائے گی۔

مواد کا انتخاب کرنے والے

  nexus_content_selectors:
  - name: docker-login
    description: Selector for docker login privilege
    search_expression: format=="docker" and path=~"/v2/"

مواد کے انتخاب کنندہ کے بارے میں مزید معلومات کے لیے، دیکھیں دستاویزی.

مواد سلیکٹر استعمال کرنے کے لیے، اس کے ساتھ ایک نیا استحقاق شامل کریں۔ type: repository-content-selector اور متعلقہcontentSelector

- name: docker-login-privilege
  type: repository-content-selector
  contentSelector: docker-login
  description: 'Login to Docker registry'
  repository: '*'
  actions:
  - read
  - browse

بلب اسٹورز اور ریپوزٹریز

    nexus_delete_default_repos: false

گٹھ جوڑ سے ریپوزٹریز کو حذف کریں ابتدائی ڈیفالٹ کنفیگریشن انسٹال کریں۔ یہ مرحلہ صرف پہلی بار انسٹال کرنے پر عمل میں لایا جاتا ہے (جب nexus_data_dir خالی پایا گیا ہے)۔

Nexus کے لیے ڈیفالٹ ڈیفالٹ کنفیگریشن سے ریپوزٹری کو ہٹانا۔ یہ قدم صرف پہلی تنصیب کے دوران انجام دیا جاتا ہے (جب nexus_data_dir خالی)۔

    nexus_delete_default_blobstore: false

Nexus install ابتدائی ڈیفالٹ کنفیگریشن سے ڈیفالٹ blobstore کو حذف کریں۔ یہ صرف اس صورت میں کیا جاسکتا ہے۔ nexus_delete_default_repos: true اور تمام کنفیگر شدہ ریپوزٹریز (نیچے دیکھیں) میں واضح ہے۔ blob_store: custom. یہ مرحلہ صرف پہلی بار انسٹال کرنے پر عمل میں لایا جاتا ہے (جب nexus_data_dir خالی پایا گیا ہے)۔

بلاب اسٹوریج (بائنری آرٹفیکٹس) کو ہٹانا ابتدائی کنفیگریشن سے بطور ڈیفالٹ غیر فعال ہے۔ بلاب اسٹوریج (بائنری نمونے) کو ہٹانے کے لیے، آف کریں۔ nexus_delete_default_repos: true. یہ قدم صرف پہلی تنصیب کے دوران انجام دیا جاتا ہے (جب nexus_data_dir خالی)۔

    nexus_blobstores: []
    # example blobstore item :
    # - name: separate-storage
    #   type: file
    #   path: /mnt/custom/path
    # - name: s3-blobstore
    #   type: S3
    #   config:
    #     bucket: s3-blobstore
    #     accessKeyId: "{{ VAULT_ENCRYPTED_KEY_ID }}"
    #     secretAccessKey: "{{ VAULT_ENCRYPTED_ACCESS_KEY }}"

بلاب اسٹورز بنانا. ابتدائی تخلیق کے بعد ایک بلاب اسٹور پاتھ اور ریپوزٹری بلاب اسٹور کو اپ ڈیٹ نہیں کیا جا سکتا (یہاں کسی بھی اپ ڈیٹ کو دوبارہ پروویژننگ پر نظر انداز کر دیا جائے گا)۔

S3 پر بلاب اسٹور کو ترتیب دینا ایک سہولت کے طور پر فراہم کیا گیا ہے اور یہ ان خودکار ٹیسٹوں کا حصہ نہیں ہے جو ہم ٹریوس پر چلاتے ہیں۔ براہ کرم نوٹ کریں کہ S3 پر ذخیرہ کرنے کی سفارش صرف AWS پر تعینات مثالوں کے لیے کی جاتی ہے۔

تخلیق بلاب اسٹورز. اسٹوریج پاتھ اور اسٹوریج ریپوزٹری کو ابتدائی تخلیق کے بعد اپ ڈیٹ نہیں کیا جا سکتا (دوبارہ انسٹال ہونے پر یہاں کسی بھی اپ ڈیٹ کو نظر انداز کر دیا جائے گا)۔

S3 پر بلاب سٹوریج ترتیب دینا ایک سہولت کے طور پر فراہم کیا گیا ہے۔ براہ کرم نوٹ کریں کہ S3 اسٹوریج کی سفارش صرف AWS پر تعینات مثالوں کے لیے کی جاتی ہے۔

    nexus_repos_maven_proxy:
      - name: central
        remote_url: 'https://repo1.maven.org/maven2/'
        layout_policy: permissive
        # maximum_component_age: -1
        # maximum_metadata_age: 1440
        # negative_cache_enabled: true
        # negative_cache_ttl: 1440
      - name: jboss
        remote_url: 'https://repository.jboss.org/nexus/content/groups/public-jboss/'
        # maximum_component_age: -1
        # maximum_metadata_age: 1440
        # negative_cache_enabled: true
        # negative_cache_ttl: 1440
    # example with a login/password :
    # - name: secret-remote-repo
    #   remote_url: 'https://company.com/repo/secure/private/go/away'
    #   remote_username: 'username'
    #   remote_password: 'secret'
    #   # maximum_component_age: -1
    #   # maximum_metadata_age: 1440
    #   # negative_cache_enabled: true
    #   # negative_cache_ttl: 1440

اوپر ایک مثال کنفیگریشن ہے۔ پراکسی سرور ماون۔

    nexus_repos_maven_hosted:
      - name: private-release
        version_policy: release
        write_policy: allow_once  # one of "allow", "allow_once" or "deny"

میون میزبانی کے ذخیرے ترتیب منفی کیشے کی تشکیل اختیاری ہے اور اگر اسے چھوڑ دیا جائے تو یہ اوپر کی اقدار پر ڈیفالٹ ہو جائے گا۔

تشکیل میزبانی کے ذخیرے ماوین منفی کیش کنفیگریشن (-1) اختیاری ہے اور اگر متعین نہ کی گئی ہو تو یہ اوپر کی اقدار پر ڈیفالٹ ہو جائے گی۔

    nexus_repos_maven_group:
      - name: public
        member_repos:
          - central
          - jboss

تشکیل گروپوں ماون۔

ذخیرے کی تینوں اقسام کو درج ذیل ڈیفالٹ اقدار کے ساتھ ملایا گیا ہے۔

    _nexus_repos_maven_defaults:
      blob_store: default # Note : cannot be updated once the repo has been created
      strict_content_validation: true
      version_policy: release # release, snapshot or mixed
      layout_policy: strict # strict or permissive
      write_policy: allow_once # one of "allow", "allow_once" or "deny"
      maximum_component_age: -1  # Nexus gui default. For proxies only
      maximum_metadata_age: 1440  # Nexus gui default. For proxies only
      negative_cache_enabled: true # Nexus gui default. For proxies only
      negative_cache_ttl: 1440 # Nexus gui default. For proxies only

Docker، Pypi، Raw، Rubygems، Bower، NPM، Git-LFS اور yum ذخیرہ کی اقسام:
دیکھنا defaults/main.yml ان اختیارات کے لیے:

Docker، Pypi، Raw، Rubygems، Bower، NPM، Git-LFS اور yum repositories بطور ڈیفالٹ غیر فعال ہیں:
ملاحظہ کریں defaults/main.yml ان اختیارات کے لیے:

      nexus_config_pypi: false
      nexus_config_docker: false
      nexus_config_raw: false
      nexus_config_rubygems: false
      nexus_config_bower: false
      nexus_config_npm: false
      nexus_config_gitlfs: false
      nexus_config_yum: false

براہ کرم نوٹ کریں کہ اگر آپ ماون کے علاوہ دیگر اقسام کے ذخیروں کو استعمال کرنا چاہتے ہیں تو آپ کو کچھ حفاظتی دائرہ کار کو فعال کرنے کی ضرورت پڑ سکتی ہے۔ یہ بطور ڈیفالٹ غلط ہے۔

nexus_nuget_api_key_realm: false
nexus_npm_bearer_token_realm: false
nexus_docker_bearer_token_realm: false  # required for docker anonymous access

ریموٹ یوزر ریئلم کا استعمال کرتے ہوئے بھی فعال کیا جا سکتا ہے۔

nexus_rut_auth_realm: true

اور عنوان کی وضاحت کرکے اپنی مرضی کے مطابق کیا جاسکتا ہے۔

nexus_rut_auth_header: "CUSTOM_HEADER"

طے شدہ کام

    nexus_scheduled_tasks: []
    #  #  Example task to compact blobstore :
    #  - name: compact-docker-blobstore
    #    cron: '0 0 22 * * ?'
    #    typeId: blobstore.compact
    #    task_alert_email: [email protected]  # optional
    #    taskProperties:
    #      blobstoreName: {{ nexus_blob_names.docker.blob }} # all task attributes are stored as strings by nexus internally
    #  #  Example task to purge maven snapshots
    #  - name: Purge-maven-snapshots
    #    cron: '0 50 23 * * ?'
    #    typeId: repository.maven.remove-snapshots
    #    task_alert_email: [email protected]  # optional
    #    taskProperties:
    #      repositoryName: "*"  # * for all repos. Change to a repository name if you only want a specific one
    #      minimumRetained: "2"
    #      snapshotRetentionDays: "2"
    #      gracePeriodInDays: "2"
    #    booleanTaskProperties:
    #      removeIfReleased: true
    #  #  Example task to purge unused docker manifest and images
    #  - name: Purge unused docker manifests and images
    #    cron: '0 55 23 * * ?'
    #    typeId: "repository.docker.gc"
    #    task_alert_email: [email protected]  # optional
    #    taskProperties:
    #      repositoryName: "*"  # * for all repos. Change to a repository name if you only want a specific one
    #  #  Example task to purge incomplete docker uploads
    #  - name: Purge incomplete docker uploads
    #    cron: '0 0 0 * * ?'
    #    typeId: "repository.docker.upload-purge"
    #    task_alert_email: [email protected]  # optional
    #    taskProperties:
    #      age: "24"

طے شدہ کام ترتیبات کے لئے. typeId اور مخصوص کامtaskProperties/booleanTaskProperties آپ یا تو اندازہ لگا سکتے ہیں:

  • جاوا قسم کے درجہ بندی سے org.sonatype.nexus.scheduling.TaskDescriptorSupport
  • اپنے براؤزر میں ایچ ٹی ایم ایل ٹاسک تخلیق فارم کو چیک کرنا
  • براؤزر میں AJAX کی درخواستیں دیکھنے سے جب دستی طور پر کوئی کام ترتیب دیتے ہیں۔

ٹاسک کی خصوصیات کو ان کی قسم کے لحاظ سے صحیح یامل بلاک میں اعلان کرنا ضروری ہے۔:

  • taskProperties تمام سٹرنگ پراپرٹیز کے لیے (یعنی ریپوزٹری کے نام، مخزن کے نام، ٹائم پیریڈ...)
  • booleanTaskProperties تمام منطقی خصوصیات کے لیے (یعنی بنیادی طور پر گٹھ جوڑ بنانے کے کام کے GUI میں چیک باکسز)۔

بیک اپس

      nexus_backup_configure: false
      nexus_backup_cron: '0 0 21 * * ?'  # See cron expressions definition in nexus create task gui
      nexus_backup_dir: '/var/nexus-backup'
      nexus_restore_log: '{{ nexus_backup_dir }}/nexus-restore.log'
      nexus_backup_rotate: false
      nexus_backup_rotate_first: false
      nexus_backup_keep_rotations: 4  # Keep 4 backup rotation by default (current + last 3)

جب تک آپ سوئچ نہیں کرتے بیک اپ کو کنفیگر نہیں کیا جائے گا۔ nexus_backup_configure в true.
اس صورت میں، طے شدہ اسکرپٹ ٹاسک کو Nexus پر چلانے کے لیے ترتیب دیا جائے گا۔
میں متعین وقفہ پر nexus_backup_cron (پہلے سے طے شدہ 21:00 ہر دن)۔
تفصیلات کے لیے [اس کام کے لیے گرووی ٹیمپلیٹ](templates/backup.groovy.j2) دیکھیں۔
یہ طے شدہ کام دوسروں سے آزاد ہے۔ nexus_scheduled_tasksجو کہ تم
اپنی پلے بک میں اعلان کریں۔

اگر آپ بیک اپ کو گھمانا/ڈیلیٹ کرنا چاہتے ہیں تو انسٹال کریں۔ nexus_backup_rotate: true اور بیک اپ کی تعداد کو ترتیب دیں جو آپ استعمال کرکے محفوظ کرنا چاہتے ہیں۔ nexus_backup_keep_rotations (پہلے سے طے شدہ 4)۔

گردش کا استعمال کرتے وقت، اگر آپ بیک اپ کے عمل کے دوران اضافی ڈسک کی جگہ بچانا چاہتے ہیں،
آپ انسٹال کر سکتے ہیں۔ nexus_backup_rotate_first: true. یہ بیک اپ سے پہلے پری روٹیشن/ڈیلیٹ کو ترتیب دے گا۔ پہلے سے طے شدہ طور پر، بیک اپ بننے کے بعد گردش ہوتی ہے۔ براہ کرم نوٹ کریں کہ اس معاملے میں پرانے بیک اپ
موجودہ بیک اپ بننے سے پہلے حذف کر دیا جائے گا۔

بازیابی کا طریقہ کار

پیرامیٹر کے ساتھ پلے بک چلائیں۔ -e nexus_restore_point=<YYYY-MM-dd-HH-mm-ss>
(مثال کے طور پر، 2017-12-17-21-00-00 17 دسمبر 2017 کو 21:00 بجے

گٹھ جوڑ کو ہٹانا

انتباہ: اس سے آپ کا موجودہ ڈیٹا مکمل طور پر حذف ہو جائے گا۔ اگر ضروری ہو تو پہلے بیک اپ بنانا یقینی بنائیں

متغیر استعمال کریں۔ nexus_purgeاگر آپ کو شروع سے دوبارہ شروع کرنے کی ضرورت ہے اور تمام ڈیٹا ہٹانے کے ساتھ گٹھ جوڑ مثال کو دوبارہ انسٹال کریں۔

ansible-playbook -i your/inventory.ini your_nexus_playbook.yml -e nexus_purge=true

پہلی انسٹالیشن کے بعد ایڈمنسٹریٹر کا پاس ورڈ تبدیل کریں۔

    nexus_default_admin_password: 'admin123'

اسے آپ کی پلے بک میں تبدیل نہیں کیا جانا چاہیے۔. یہ متغیر پہلے سے انسٹال ہونے پر ڈیفالٹ Nexus ایڈمن پاس ورڈ کے ساتھ آباد ہوتا ہے اور اس بات کو یقینی بناتا ہے کہ ہم ایڈمن پاس ورڈ کو تبدیل کر سکتے ہیں۔ nexus_admin_password.

اگر آپ پہلی انسٹالیشن کے بعد ایڈمنسٹریٹر کا پاس ورڈ تبدیل کرنا چاہتے ہیں تو آپ اسے عارضی طور پر کمانڈ لائن سے پرانے پاس ورڈ میں تبدیل کر سکتے ہیں۔ تبدیلی کے بعد nexus_admin_password آپ اپنی پلے بک میں چلا سکتے ہیں:

ansible-playbook -i your/inventory.ini your_playbook.yml -e nexus_default_admin_password=oldPassword

Nexus Sonatype پر ٹیلیگرام چینل: https://t.me/ru_nexus_sonatype

سروے میں صرف رجسٹرڈ صارفین ہی حصہ لے سکتے ہیں۔ سائن ان، برائے مہربانی.

آپ کون سے نمونے کے ذخیرے استعمال کرتے ہیں؟

  • Sonatype Nexus مفت ہے۔

  • سوناٹائپ گٹھ جوڑ ادا کیا

  • آرٹفیکٹری مفت ہے۔

  • آرٹفیکٹری ادا کی گئی۔

  • ہاربر

  • پلپ

9 صارفین نے ووٹ دیا۔ 3 صارفین غیر حاضر رہے۔

ماخذ: www.habr.com

نیا تبصرہ شامل کریں