Ссылки
1 2 |
https://digital.ai/periodic-table-of-devops-tools - периодическая таблица DevOps https://git-scm.com/book/ru/v2 - документация по git на русском языке |
В начале было слово \ КОД \ git
1 2 3 4 5 6 |
SCM - Source Control Management - важнейший компонент инфраструктуры как код Поскольку написание кода занимает у разработчиков(код) и современного инженера(средства автоматизации) большую часть рабочего времени. Все сделанные изменения кода нуждаются в отслеживании. Разработчики и инженеры используют SCM что бы отслеживать изменения по отдельности и в случаи необходимости объединить эти изменения в основную ветку кода. Средства автоматизации и Continus integration будут получать код из SCM. SCM будет уведомлять CI сервер, когда появится новый код и потребуется собрать новую версию программы. |
Git — одна из SCM
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 |
https://git-scm.com/downloads apt-get install git -y yum install git -y Первичная настройка. git config --global user.name "Vasya Pupkin" git config --global user.email "ваш@почтовый.ящик" git config --global push.default simple - позволяет использовать простой push, где находимся туда и push Генерация ключей ssh-keygen -t rsa -b 4096 - команда для генерации связки открытого-закрытого ключа (~/.shh/id_rsa.pub - публичный ключ) cat ~/.ssh/id_rsa.pub - посмотреть сгенерированный публичный ключ ssh-copy-id user_name@hostname.zzz - скопировать публичный ключ на ПК user_name@hostname.zzz Подключение репозитория: git clone <repozitory url> - выполняем в случае если у нас есть уже репозиторий например на github git unit - выполняем если у нас еще нет репозитория, репозиторий будет создан локально, новый репозиторий Внесение изменений в репозиторий индексация кода, первая стадия (git add .) staged - commit - добавление в commit, вторя стадия (git commit -m "add new file") branch - какую ветку мы используем () git status - покажет состояние нашего репозитория(ожидание commit, текущая ветка, и т.д.) Индексация: git add <file> - добавить файл в индексацию git add . - добавить все файлы в индексацию (текущий каталог) git add -A - добавить все файлы в индексацию (текущий каталог) Фиксируем изменения в git git commit -m "<ваше описание>" - при commit старайтесь писать подробней что было сделано. Отправка изменений на внешний репозиторий git git push - загрузить изменения на репозиторий git !!! push по умолчанию загружает изменения на удаленный репозиторий ассоциированный с текущей локальной ветки git push -u <remoute name, обычно origin> <branch name> - загрузить изменения на репозиторий git Переключение веток(branch) git checkout <branch> Лог git log --pretty=format:\"%h %ad | %s%d[%an]\" --graph --date-short Создание новой ветки git checkout -b <new branch> Указатели git tag Запрос pull, загрузка ветки Запрос merges, объединение веток |
Виртуализация:
1 2 3 4 |
host - система предоставляющая ресурсы ВМ (реальное железо) guest - виртуальная машина (ВМ) Гипервизоры - host - KVM, XEN, VMware, VirtuakBox, Parallels and etc |
Vagrant
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 |
Vagrant - свободное и открытое программное обеспечение для создания и конфигурирования виртуальной среды разработки. Является обёрткой для программного обеспечения виртуализации, например VirtualBox, и средств управления конфигурациями, таких как Chef, Salt и Puppet. Используется для развертывания ВМ. https://www.vagrantup.com/ - сайт разработчиков vagrant https://www.vagrantup.com/docs - документацияvagrant https://github.com/hashicorp - главный репозиторий vagrant https://github.com/hashicorp/vagrant/wiki/Available-Vagrant-Plugins - все возможные плагины https://github.com/vagrant-libvirt/vagrant-libvirt - плагин для KVM https://www.turnkeylinux.org/ - образы https://app.vagrantup.com/boxes/search - золотые образы - box - golden image Установка на debian apt-get build-dep vagrant ruby-libvirt apt-get install qemu libvirt-daemon-system libvirt-clients ebtables dnsmasq-base apt-get install libxslt-dev libxml2-dev libvirt-dev zlib1g-dev ruby-dev vagrant plugin install PLUGIN - установка плагина vagrant plugin update PLUGIN - обновление плагина vagrant plugin license LICENSE-FILE - установка лицензии для дополнительного функционала (например для плагина vmware) vagrant plugin uninstall PLUGIN - удалить плагине vagrant plugin install vagrant-aws - установить плагин vagrant-aws vagrant plugin install vagrant-libvirt - установить плагин vagrant-libvirt box - (golden image) Cоздадим первый образ mkdir vagrant - создаем каталог где у нас будут хранится проекты cd vagrant - перейдем в каталог mkdir project1-test - создадим каталог для первого проекта cd project1-test - перейдем в каталог проекта vagrant init - произведем инициализацию проекта (будет создан файл Vagrantfile) https://www.vagrantup.com/docs/vagrantfile/machine_settings - документация по настройке вм в конфиге https://app.vagrantup.com/boxes/search - золотые образы nano Vagrantfile - редактируем файл проекта ---------------- Vagrant.configure("2") do |config| config.vm.box = "debian/jessie64" end ---------------- vagrant validate - проверяем конфиг vagrant up - запускаем проект (будет произведена загрузка и установка образа, сгенерированы открытый/закрытый ключ) Управление текущим образом vagrant ssh - подключение к ВМ vagrant ssh-config - посмотреть текущие настройки vagrant halt - выключить ВМ vagrant suspend - приостановить ВМ vagrant resume - возобновить работу ВМ vagrant reload - перезагрузка ВМ vagrant snapshot save name_snapshot - создать снимок ВМ и назвать его name_snapshot vagrant snapshot list - показать список снимков vagrant snapshot restore name_snapshot - восстановить ВМ из снимка name_snapshot vagrant list - показать все ВМ (в libertv нет такой команды, все управления осуществляются входя в каталог проекта, но мы можем воспользоваться командами virsh, например "virsh list --all") vagrant upload [options] <source> [destination] [name|id] - копирование файлов vagrant upload /root/1.txt /home/vagrant/ - скопировали файл /root/1.txt на удаленный ПК(проект project1-test) в каталог /home/vagrant/ vagrant status - команда покажет все проекты, их имена, состояние vagrant global-status - команда покажет все проекты, их имена, состояние vagrant destroy name_vm - удалить ВМ При развертывании есть возможность добавить копирование/синхронизацию каталога ---------------- Vagrant.configure("2") do |config| config.vm.box = "debian/jessie64" config.vm.synced_folder "app/", "/var/www/app" end ---------------- При развертывании есть возможность настроить сеть например проброс портов ---------------- Vagrant.configure("2") do |config| config.vm.box = "debian/jessie64" config.vm.synced_folder "app/", "/var/www/app" config.vm.network "forward_port", guest: 8080, host:8081 end ---------------- Запуск программ и скриптов 1 ---------------------------- Vagrant.configure("2") do |config| config.vm.box = "debian/jessie64" config.vm.synced_folder "app/", "/var/www/app" config.vm.network "forward_port", guest: 8080, host:8081 config.vm.define "app" do |app| app.vm.provision "shell", line: "apt-get install -y nodejs npm" end end ---------------------------- Запуск программ и скриптов 2 ---------------------------- Vagrant.configure("2") do |config| config.vm.box = "debian/jessie64" config.vm.synced_folder "app/", "/var/www/app" config.vm.network "forward_port", guest: 8080, host:8081 config.vm.define "app" do |app| app.vm.provision "shell", line: "apt-get install -y nodejs npm" end $script - <<-SCRIPT apt-get install nodejs npm -y SCRIPT app.vm.provision "shell", inline: $script app.vm.provision "shell", path: "scripts/pre.sh" end ---------------------------- Запуск программ и скриптов 3 ---------------------------- Vagrant.configure("2") do |config| config.vm.box = "debian/jessie64" config.vm.synced_folder "app/", "/var/www/app" config.vm.network "forward_port", guest: 8080, host:8081 config.vm.define "app" do |app| app.vm.provision "shell", line: "apt-get install -y nodejs npm" end $script - <<-SCRIPT apt-get install nodejs npm -y SCRIPT app.vm.provision "shell", inline: $script app.vm.provision "shell", path: "scripts/pre.sh" end ---------------------------- Для настройки ВМ поддерживаются конфигурационные менеджеры, такие как Ansible, Chef, Puppet, Salt Использование ansible ---------------------------- Vagrant.configure("2") do |config| config.vm.box = "debian/jessie64" app.vm.provision "ansible_local" do |ansible| ansible.playbook = "playbooks/node.yaml" ansible.become = true ansible.become_user = "root" end ---------------------------- |
gitLab установка с помощью vagrant на CentOS7
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 |
0. Готовимся к установке gitlab vagrant box add centos/7 - этой командой мы скачаем "золотой образ" для дальнейшего развертывания ВМ mkdir gitlab - в каталоге vagrant создаем каталог gitlab cd gitlab/ - переходим в каталог gitlab vagrant init - и выполняем инициализацию (будет создан файл Vagrantfile) (или vagrant init centos/7 узнав тут https://app.vagrantup.com/centos/boxes/7) 1.Смотрим инструкцию про установку gitlab на centos7 https://about.gitlab.com/install/#centos-7 по инструкции нам нужно будет выполнить следующие команды sudo yum install -y curl policycoreutils-python openssh-server perl sudo systemctl enable sshd sudo systemctl start sshd sudo firewall-cmd --permanent --add-service=http sudo firewall-cmd --permanent --add-service=https sudo systemctl reload firewalld sudo yum install postfix sudo systemctl enable postfix sudo systemctl start postfix Все команды в инструкции начинающиеся с "sudo" мы в vagrand выполняем без sudo так как там команды выполняются от root curl https://packages.gitlab.com/install/repositories/gitlab/gitlab-ee/script.rpm.sh | sudo bash - в этой команде нам нужно будет изменить "gitlab-ee" на "gitlab-ce" (ee - Enterprise Edition - платное, ce - Community Edition - бесплатное) sudo EXTERNAL_URL="https://gitlab.example.com" yum install -y gitlab-ee - в этой команде нам нужно будет изменить "gitlab-ee" на "gitlab-ce" (ee - Enterprise Edition - платное, ce - Community Edition - бесплатное) 2. Редактируем файл Vagrantfile vim Vagrantfile ---------------------------------- Vagrant.configure("2") do |config| config.vm.box = "centos/7" config.vm.hostname = "gitlab" config.vm.provider "libvirt" do |domain| domain.memory = "4096" domain.cpus = "4" end config.vm.provision "shell", inline: <<-SHELL yum -y update yum install -y curl policycoreutils-python openssh-server perl systemctl enable sshd systemctl start sshd firewall-cmd --permanent --add-service=http firewall-cmd --permanent --add-service=https systemctl reload firewalld yum install postfix systemctl enable postfix systemctl start postfix curl https://packages.gitlab.com/install/repositories/gitlab/gitlab-ce/script.rpm.sh | sudo bash EXTERNAL_URL="https://gitlab.linux.local" yum install -y gitlab-ce SHELL end ---------------------------------- 3. Проверим все ли правильно с конфигом Vagrantfile vagrant validate 4. Если с пунктом три все ок то запустили установку vagrant up |
Vagrand bridge
1 2 3 4 5 |
config.vm.network "public_network", :dev => "br0", :mode => "bridge", :type => "bridge", :ip => "192.168.1.200" |
Vagrant итог:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 |
https://help.ubuntu.ru/wiki/vagrant - краткая документация https://kevin.thecorams.net/posts/2020/08/libvirt-bridging/ - настройка bridge Основные понятия Provider — используемая система для виртуализации (VirtualBox, VMWare, LXC). По умолчанию используется VirtualBox. Vagrant Box — это сохраненный образ ВМ, для быстрого клонирования виртуальных машин. Брать можно тут: https://app.vagrantup.com/boxes/search http://www.vagrantbox.es/ На основе бокса будут создаваться виртуальные машины. Сами боксы при этом не изменяются. Размер боксов варьируется от 200 Мб до 2,5 Гб. Когда вы архивируете состояние вашей ВМ, на выходе также получаете бокс. Vagrantfile — это файл конфигурации виртуальной машины, расположен в директории проекта. Он описывает настройки виртуальной машины, форвардинг портов, установку приложений, прочее. Содержимое файла это код на языке Ruby. Желательно держать этот файл в Git-репозитории. Пример использования -------------------- Заходим в директорию проекта, добавляем “бокс” с Ubuntu, инициализируем Vagrant, правим при необходимости Vagrantfile с настройками и выполняем vagrant up для запуска виртуалки. Если все готово, подключаемся по ssh. cd your_project vagrant box add ubuntu/trusty64 vagrant init ubuntu/trusty64 vagrant up vagrant ssh Эти команды необходимы для запуска виртуальной машины с помощью Vagrant. Будет запущена полнофункциональная виртуальная машина на операционной системе Ubuntu с выделенным объемом памяти по умолчанию в 512 Мб. ------------------- Основные команды Vagrant vagrant box list — cписок доступных (уже добавленных) боксов, на основе которых мы можем запускать нашу виртуалку vagrant box add — добавление бокса, указываем название и ссылку для скачивания vagrant init — инициализация, в текущем каталоге будет создан файл Vagrantfile, а сама виртуальная машина будет располагаться в дефолтном для VirtualBox каталоге vagrant up — запускаем виртулаку, в том числе выполняются необходимы инструкции по настройке из конфига при первом запуске vagrant ssh — подключение по SSH к виртуалке vagrant package — создание пакета текущего виртуального окружения готового к развертыванию на другом компьютере vagrant reload — перезагрузить виртуалку vagrant suspend — уход в спящий режим с сохранением текущего состояния, возобновление работы происходит очень быстро но требуется место на диске vagrant resume — возобновления работы из спящего режима vagrant halt — выключить виртуалку, обычное завершение работы; состояние системы не сохраняется, запуск через vagrant up vagrant destroy — завершение работы с очисткой места на диске, которое занимало запущенное виртуальное окружение (обычно не рекомендуется использовать) vagrant provision — подготовить окружение виртуальной машины (“provision” — обеспечение), запустить необходимые инструкции по установке и настройке ПО с помощью инструкций Ansible, Chef или Puppet; эта команда зачастую используется при внесенных изменениях в конфигурацию. !!! Vagrant в основном применяется для первоначальной установки, а дальнейшая настройка и конфигурирование выполняется с помощью Ansible(Chef или Puppet) |
Ansible — конфигурирование
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 |
https://docs.ansible.com/ansible/latest/index.html Используется для конфигурирования ВМ, сетевых устройств, серверов, и т.д. Работает через SSH. Главное отличие от других конфиг менеджеров в том что для работы не требуется "устанавливать демоны и вспомогательное ПО" на устройства которыми управляет ansible YAML - язык разметки Плюсы 1. Понятность YAML 2. Быстрота обучения 3. Завершённость 4. Эффективность 5. Безопасность (работает через ssh) 1. Установка apt install ansible - установим ansible (на любом ПК с которого будем управлять) adduser ansible - создадим пользователя su - ansible - зайдем под пользователем ansible ssh-keygen - генерируем открытый и закрыты ключ для пользователя ansible 2. Что бы не мучится с DNS в тестовых целях можно отредактировать файл /etc/hosts nano /etc/hosts - редактируем, добавим записи --------------------------- 10.0.0.24 node1.linux.local node1 10.0.0.25 node2.linux.local node2 192.168.15.128 hsrv2.linux.local hsrv2 192.168.121.192 gitlab.linux.local gitlab 192.168.121.174 test.linux.local test --------------------------- 3. Приводим имена хостов в порядок hostnamectl set-hostname node1.linux.local - изменить имя хоста 4. Добавляем пользователя ansible на все хосты которыми будем управлять adduser ansible passwd ansible 5. Для работы Ansible потребуется отредактировать файл /etc/sudoers на всех хостах которыми будем управлять cat /etc/sudoers - посмотреть содержимое файла /etc/sudoers !!!nano /etc/sudoers - не рекомендуется использовать обычные редакторы visudo - добавляем привилегии в файл /etc/sudoers рекомендуется использовать эту программу ------------------------------- ansible ALL=(ALL) NOPASSWD: ALL -------------------------------- |