Создайте подобный сайт на WordPress.com
Начало работы

SaltStack. Основы

SaltStack — система управления конфигурациями и удаленного выполнения операций. Для коммуникации Salt может использовать SSH или собственный протокол, работающий на базе ZeroMQ.

Для работы используются 2 TCP порта 4505 и 4506.

Для работы Salt не нужен SSH

Отличия и сходства с Ansible:

  • Ansible и Salt написаны на Python
  • Ansible работает только через SSH, Salt может работать через SSH или собственный протокол
  • В классической модели работы Salt использует на каждом хосте агенты
  • Асинхронная связь сервера с клиентами (из-за этого параметра Salt работает быстрее чем Ansible)

Ключевые понятия и элементы:

  • Salt master — процесс, который управляет агентами (миньонами)
  • Salt minion — процесс, работающий на управляемых машинах.
  • Salt state (SLS) — конфигурационные файлы, написанные на YAML (аналог Playbook в Ansible)
  • Formulas — множества вызовов к модулям состояний (state modules), организованных таким образом, чтобы достичь определённого результата; они описывают как должна выглядеть система в том случае, когда формула применена. Формулы это заранее приготовленные состояния (salt states).
  • Templates ( шаблоны)
  • Pillars — защищённые хранилища важной информации, собственно salt state’ов.
  • Grains — факты о системах (ОС, ip-адреса, модель процессора и т.д.)
  • Mine – хранилище результатов исполнения команд на миньонах на мастер-сервере. С помощью Mine нельзя откатиться обратно.

Источник — http://xgu.ru/wiki/SaltStack

Установка и настройка

В документации можно посмотреть, как правильно установить Salt Master и Salt Minion.

Для удобства на моём GitHub можно забрать готовый стенд с одним мастером и двумя миньонами. Настроены базово.

Примеры работы команд:

  • Проверка работы Salt на хостах:
salt '*' cmd.run "uname -a"
  • Запуск команды «uname -a» на хосте:
salt minion1 cmd.run "uname -a"
  • Просмотр информации о хосте minion1:
salt minion1 grains.items
  • Пробный запуск (без внесения изменений) файла (/srv/salt/nginx/init.sls) состояния:
sudo salt minion1 state.apply nginx test=True
  • Если проблем не обнаружено, то можно запустить state:
sudo salt minion1 state.apply nginx 

Пример установки nginx на хосте с помощью Salt:

Далее все действия выполняются от root

Создадим каталог nginx /srv/salt/nginx

mkdir -p /srv/salt/nginx

Далее создадим файл /srv/salt/nginx/init.sls со следующим содержимым:

vim /srv/salt/nginx/init.sls

#Установка nginx
nginx:              
  pkg:           
    - installed    

#Запуск службы
  service:            
    - running     

#Отслеживание изменений, при которых будет перезапуск службы
    - watch:      
      - pkg: nginx    
      - file: /etc/nginx/nginx.conf    

#Отправка файла /etc/nginx/nginx.conf на удаленный хост
/etc/nginx/nginx.conf:
  file:
    - managed
    - source: salt://nginx/nginx.conf #путь к файлу на мастер-хосте
    - user: root
    - group: root
    - mode: 644

Создадим файл конфигурации nginx.conf который будет отправлен на удаленный хост:

vim /srv/salt/nginx/nginx.conf

user www-data;
worker_processes auto;
pid /run/nginx.pid;
include /etc/nginx/modules-enabled/*.conf;

events {
        worker_connections 512;
}

http {

        sendfile on;
        tcp_nopush on;
        tcp_nodelay on;
        keepalive_timeout 65;
        types_hash_max_size 2048;

        include /etc/nginx/mime.types;
        default_type application/octet-stream;

        ssl_protocols TLSv1 TLSv1.1 TLSv1.2 TLSv1.3; # Dropping SSLv3, ref: POODLE
        ssl_prefer_server_ciphers on;

        access_log /var/log/nginx/access.log;
        error_log /var/log/nginx/error.log;

        gzip on;

        include /etc/nginx/conf.d/*.conf;
        include /etc/nginx/sites-enabled/*;
}

Далее создадим файл top.sls который будет запускать файл init.sls из каталога nginx:

vim /srv/salt/top.sls

base:
  'minion1':      #'*' - установка на всех хостах
    - nginx

Проверим как отработает тестовый запуск:

root@master:/srv/salt# salt '*' state.highstate test=True

minion2:
----------
          ID: states
    Function: no.None
      Result: False
     Comment: No Top file or master_tops data matches found. Please see master log for details.
     Changes:   

Summary for minion2
------------
Succeeded: 0
Failed:    1
------------
Total states run:     1
Total run time:   0.000 ms
minion1:
----------
          ID: nginx
    Function: pkg.installed
      Result: None
     Comment: The following packages would be installed/updated: nginx
     Started: 15:18:32.250134
    Duration: 164.761 ms
     Changes:   
              ----------
              installed:
                  ----------
                  nginx:
                      ----------
                      new:
                          installed
                      old:
----------
          ID: /etc/nginx/nginx.conf
    Function: file.managed
      Result: None
     Comment: The file /etc/nginx/nginx.conf is set to be changed
              Note: No changes made, actual changes may
              be different due to other states.
     Started: 15:18:32.428594
    Duration: 36.336 ms
     Changes:   
              ----------
              newfile:
                  /etc/nginx/nginx.conf
----------
          ID: nginx
    Function: service.running
      Result: None
     Comment: Service is set to be started
     Started: 15:18:32.491839
    Duration: 15.134 ms
     Changes:   

Summary for minion1
------------
Succeeded: 3 (unchanged=3, changed=2)
Failed:    0
------------
Total states run:     3
Total run time: 216.231 ms
ERROR: Minions returned with non-zero exit code
root@master:/srv/salt# 

Сначала мы увидим ошибку, в ошибке будет написано, что по хосту minion2 не найдено изменений. Так и должно быть, по хосту minion1 проблем не найдено, можем запустить state:

salt '*' state.highstate

После установки, можно проверить, был ли установлен nginx, указав в адресной строке адрес сервер minion1:

Если у нас получается зайти на веб-интерфейс, значит установка прошла успешно.

Docker. Часть 2. Dockerfile и Docker-compose

Как мы уже знаем, Docker-контейнер разворачивается из Docker-образа, а настройки Docker-образа хранятся в Dockerfile.

Создание Docker-контейнера на основе Dockerfile

  1. Создаём отдельную папку и переходим в неё: mkdir docker && cd docker
  2. Создаём Dockerfile: vi Dockerfile
#Укажем базовый образ ОС (будет поиск по DockerHub)
FROM ubuntu

#Указываем свои учётные данные при создании образа
MAINTAINER ALEXEY <ваш адрес почты>

#Укажем команды (устанавливаем cowsay и добавляем её в быстрый запуск)
RUN apt-get update && apt-get install -y cowsay && ln -s /usr/games/cowsay /usr/bin/cowsay

#Команда cowsay будет автоматически запускаться при обращении к контейнеру
ENTRYPOINT ["cowsay"]

3. Создаём Docker Image на основе Dockerfile: docker build -t tv1n94/ubuntu-cows-file .

4. Отправляем наш Docker Image в реестр DockerHub: docker push tv1n94/ubuntu-cows-file

5. Запускаем Docker контейнер на основе образа с DockerHub: docker run tv1n94/ubuntu-cows cowsay «WHATSAPP, BRO!»

vagrant@d10:~/docker$  docker run tv1n94/ubuntu-cows cowsay "WHATSAPP, BRO!"
Unable to find image 'tv1n94/ubuntu-cows:latest' locally
latest: Pulling from tv1n94/ubuntu-cows
e6ca3592b144: Already exists
534a5505201d: Already exists
990916bd23bb: Already exists
e1948d9d9063: Already exists
Digest: sha256:730e0ff5d4c1f0f97dec0cf0acd39c2e7ed2c75dea6a0ad4d80e2d2890445944
Status: Downloaded newer image for tv1n94/ubuntu-cows:latest
 ________________
< WHATSAPP, BRO! >
 ----------------
        \   ^__^
         \  (oo)\_______
            (__)\       )\/\
                ||----w |
                ||     ||
vagrant@d10:~/docker$

Соединение контейнеров между собой

Допустим у нас есть контейнер с базой данных и отдельный контейнер с СУБД управления. Давайте свяжем между собой 2 контейнера:

  1. Запускаем контейнер с БД (Через параметр -e можно указывать переменные контейнера. Укажем пароль root к MYSQL): docker run —name mariadb -e MYSQL_ROOT_PASSWORD=pass123456 -d mariadb

2. Запускаем контейнер Adminer и указываем, что БД находится в другом контейнере: docker run —link mariadb:db -p 1234:8080 -d adminer

Параметр —link отвечает за соединение с другим контейнером.

Для более удобного объединения контейнеров между собой используют Docker-compose.

Dokcer-compose — инструмент для создания и запуска многоконтейнерных приложений. В Compose контейнеры описываются специальным файлом docker-compose.yml (или .yaml)

Давайте создадим отдельную папку и добавим туда файл docker-compose.yml:

mkdir mydocker && cd mydocker

vi docker-compose.yml

# Use root/example as user/password credentials
#Версия файла. Нужно проверить, какая версия поддерживается докером
version: '3.1'


services:
  #имя контейнера
  db:
    #Образ из которого будет разворачиваться контейнер
    image: mariadb
    #Функция автоматическокго рестарта (no - никогда, on-failure - после
    #критической ошибки, always - рестарт в любом случае)
    restart: always
    #Дополнительные значения переменных (например пароль)
    environment:
      MYSQL_ROOT_PASSWORD: 123456
    #Указываем папку, смонтированную из ОС (папка в ОС:папка в контейнере)
    volumes:
       - ./db:/var/lib/mysql

  adminer:
    image: adminer
    restart: always
	#проброс порта (порт снаружи:порт внутри)
    ports:
      - 1234:8080

Параметр version отвечает за версию Docker-compose. С версией нужно быть внимательным, иногда в новой версии нет каких-то функций или добавляются новые. Проверить работу docker с версиями можно на официальном сайте docker, предварительно поняв, какая версия Docker установлена на вашем компьютере:

vagrant@d10-sysops:~/mydocker$ docker -v
Docker version 19.03.8, build afacb8b7f0
vagrant@d10-sysops:~/mydocker$ docker-compose -v
docker-compose version 1.25.5, build 8a1c60f6
vagrant@d10-sysops:~/mydocker$

В Docker-compose не должно быть TABов, можно использовать только пробелы.

Из Docker-compose можно ссылаться не только на образ, но и на Dockerfile, тогда вместо параметра IMAGE надо указать параметр BUILD. Одновременно нельзя использовать оба параметра для одного сервиса!

services:
  db:    
    build: ./db
    restart: always
    environment:
      MYSQL_ROOT_PASSWORD: 123456

В разделе build указана папка db, в ней должен быть файл docker-compose.yml. Файл описания может быть назван другим именем, но тогда в разделе build ещё нужно указать имя файла.

Тома Docker (volumes) — это папки операционной системы, которые смонтированы в Docker-контейнер. Могут быть смонтированы как отдельные файловые системы внутри контейнера. Если выключить контейнер, то данные в папке не пропадут.

Добавить volumes можно при запуске контейнера, например docker run -v /data ubuntu или в Dockerfile, указав параметр VOLUME /data

Основные команды docker-compose

Запуск образа на основе Docker-composedocker-compose up
Запуск образа Docker-compose в интерактивном режиме:docker-compose up -d
Просмотр запущенных контейнеровdocker-compose ps
Запрос адреса виртуальной машины на которой работает Docker (Работает только на Windows)docker-machine ip default
Останавливаем рабочий проектdocker-compose stop
Удаление образа dbdocker-copose rm db
Выполнение перестройки проекта (применение изменений)docker-copose build

UnionFS

Каждый образ состоит из нескольких слоёв. UnionFS объединяет все слои в контейнер. До запуска контейнера все слои находятся в режиме чтения.
При запуске контейнера появляется дополнительный слой чтение/запись, чтобы можно было вносить изменения. Если остановить контейнер, то слой чтение\запись удалится. Если нужно чтобы изменения сохранились, то необходимо сделать docker commit

Посмотреть историю изменения слоёв можно с помощью команды: docker history ubuntu-cows:latest

Самый простой способ уменьшить размер образа — это удалить ненужные слои(Сделать меньше шагов при формировании инструкций). Также если во время создания образа есть какие-то инструкции, который распаковывают архивы, то архив потом лучше удалять…

Docker. Часть 1. Основы основ

Все чаще я стал слышать про Docker, но пока не могу понять, где я смогу применять его в своей работе. Поэтому я решил разобраться с ним, чтобы улучшить свой скилл и написать ещё одно умное слово в своём резюме))

Попробую объяснить простыми словами то, что я понял про Docker:

Docker — маленькая виртуальная машина. Обычно цель данной машины поддерживать работу одного приложения или проекта…

Официальный сайт проекта — docker.com

Изучая Docker, надо знать немного терминов-компонентов:

  • Docker Engine — ПО Docker, установленное на сервер или компьютер
  • Docker Container — отдельный контейнер Docker. Работает независимо от других контейнеров. Создаётся из Docker Image, имеет свою директорию.
  • Docker Image — образ (шаблон), из которого можно развернуть Docker Container.
  • Docker Registers — место, где располагаются образы и откуда их можно скачать или залить туда собственный образ. Регистры бывают публичными и приватными. Публичный регистр — DockerHub (hub.docker.com).
  • Dockerfile — YAML-файл, который описывает Docker Image (конфиг образа).

Как примерно работает Docker и его контейнеры?

  1. Устанавливаем Docker Engine и создаём или скачиваем Dockerfile
  2. Запускаем Build Dockerfile и получаем из него Docker Image
  3. Выполняем Run Docker Image и получаем Docker Container

Установка и настройка Docker Engine на linux (Debian 10):

  1. Выполняем обновление репозиториев и ставим пакет apt-transport-https:
sudo apt update 
sudo apt install apt-transport-https

2. Устанавливаем gpg-ключ от репозитория download.docker.com

curl -fsSL https://download.docker.com/linux/debian/gpg | sudo apt-key add -

3. Указываем в параметрах репозитория, что планируем скачивать только стабильные версии

sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/debian $(lsb_release -cs) stable"

4. Далее, снова обновляем список пакетов и устанавливаем docker-ce. CE — community edition — бесплатная версия от Docker.

sudo apt update
sudo apt install docker-ce

5. Проверить, что docker установлен можно командами docker —v или systemctl status docker

vagrant@d10-sysops:~$ docker -v
Docker version 19.03.8, build afacb8b7f0
vagrant@d10-sysops:~$ systemctl status docker
● docker.service - Docker Application Container Engine
   Loaded: loaded (/lib/systemd/system/docker.service; enabled; vendor preset: enabled)
   Active: active (running) since Sun 2020-09-13 17:50:37 GMT; 1min 43s ago
     Docs: https://docs.docker.com
 Main PID: 336 (dockerd)
    Tasks: 13
   Memory: 137.7M
   CGroup: /system.slice/docker.service
           └─336 /usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock
vagrant@d10-sysops:~$

6. На этом установка Docker Engine завершена. Нужно понимать, что Docker, почти на все свои команды требует права администратора, чтобы перед каждой командой не вводить sudo, можно добавить пользователя (с которого вы работаете) в группу Docker. Обратите внимание: пользователь получит права Администратора.

sudo usermod -aG docker $USER

Базовые команды Docker

Самая первая команда для новичков — это docker run hello-world

vagrant@d10-sysops:~$ docker run hello-world
Unable to find image 'hello-world:latest' locally
latest: Pulling from library/hello-world
0e03bdcc26d7: Pull complete
Digest: sha256:4cf9c47f86df71d48364001ede3a4fcd85ae80ce02ebad74156906caff5378bc
Status: Downloaded newer image for hello-world:latest

Hello from Docker!
This message shows that your installation appears to be working correctly.

To generate this message, Docker took the following steps:
 1. The Docker client contacted the Docker daemon.
 2. The Docker daemon pulled the "hello-world" image from the Docker Hub.
    (amd64)
 3. The Docker daemon created a new container from that image which runs the
    executable that produces the output you are currently reading.
 4. The Docker daemon streamed that output to the Docker client, which sent it
    to your terminal.

To try something more ambitious, you can run an Ubuntu container with:
 $ docker run -it ubuntu bash

Share images, automate workflows, and more with a free Docker ID:
 https://hub.docker.com/

For more examples and ideas, visit:
 https://docs.docker.com/get-started/

vagrant@d10-sysops:~$

После ввода данной команды Docker начнёт искать Dockerfile с именем hello-world, если файл с таким именем будет не найден, то Docker начнём искать на DockerHub Docker Image с именем hello-world.

Просмотр всех Docker Images:docker images
Поиск на dockerhub образа с именем tomcat:docker search tomcat
Скачать образ tomcat:docker pull tomcat
Показать запущенные Docker-контейнерыdocker ps
Показать все Вocker-контейнерыdocker ps -a
Удалить Docker Imagedocker rmi <image name>
Удалить Docker Containerdocker rm <container id>
Запустить Docker Containerdocker start <container id>
Остановить Docker Containerdocker stop <container id>

Практический пример

Задача: развернуть веб-сервер nginx через docker, настроить, чтобы веб-страница открывалась на порту 1234, внести изменения на главную страницу, потом, на основе данного контейнера создать новый образ, удалить старый образ и удалить сам контейнер.

  1. Находим Docker Image c помощью команды (выведем только 4 самых популярных образа и шапку таблицы): docker search nginx | head -n 5
Первым в списке как раз будет официальный Docker Image от nginx

2. Скачаем Docker Image nginx к нам: docker pull nginx

Начнётся скачивание Docker Image nginx

3. Далее нам нужно запустить Docker контейнер. Предварительно пробросим порт, по которому будет доступна веб-страница, в нашем случае это порт 1234. Вводим команду для фонового запуска контейнера на основе образа: docker run -d -p 1234:80 nginx

Помимо запуска контейнера в фоновом режиме, его можно запустить в интерактивном (вместо параметра -d указываем параметр -it), тогда в терминале вы увидите много служебной информации, а при нажатии клавиш ctrl+c у вас остановится контейнер.

Для проверки можно ввести команду просмотра всех активны контейнеров: docker ps
Теперь самое время проверить, как работает Docker Container. Зайдём на веб-страницу и посмотрим результат. Отлично, nginx заработал.

4. Если потребуется, то мы можем зайти внутрь Docker контейнера и внести там изменения:

vagrant@d10-sysops:~$ docker ps
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                  NAMES
74350aa9180c        nginx               "/docker-entrypoint.…"   15 minutes ago      Up 15 minutes       0.0.0.0:1234->80/tcp   quirky_einstein
vagrant@d10-sysops:~$ docker exec -it 74350aa9180c /bin/bash
root@74350aa9180c:/#

5. Изменим содержимое веб-страницы внутри контейнера и перезапустим контейнер:

root@74350aa9180c:~# echo "TEST DOCKER CONTAINER" > /usr/share/nginx/html/index.html
root@74350aa9180c:~# exit
vagrant@d10-sysops:~$
vagrant@d10-sysops:~$ docker stop 74350aa9180c
vagrant@d10-sysops:~$ docker start 74350aa9180c
Проверяем, что страница поменялась.

6. Допустим мы внесли много изменений в контейнер и не хотим его заново настраивать. В таком случае можно просто сохранить изменения в отдельный Docker Image командой: docker commit <container id> <repositiry>:<tag>

vvagrant@d10-sysops:~$ docker commit 74350aa9180c testnginx:v1
ssha256:8d98f8491f4d7b56030f910f3992466f4e83b1ca0312c20c4847d4218e98c07a
vvagrant@d10-sysops:~$ docker images
RREPOSITORY              TAG                 IMAGE ID            CREATED             
ttestnginx               v1                  8d98f8491f4d        8 seconds ago       
nnginx                   latest              7e4d58f0e5f3        4 days ago          1

Теперь, на основе этого образа мы можем сделать ещё несколько независимых контейнеров, которые будут работать на других портах:

vagrant@d10-sysops:~$ docker run -d -p 1235:80 testnginx:v1
362e605e7f9e1ec00837825bdc5d3fe4a6f7f9e5a892283fa617c137ebcbc65b
vagrant@d10-sysops:~$ docker run -d -p 1236:80 testnginx:v1
fe2e1e5d054fd0f3de6cbf9f174c45853c10b9c5b172097ebb266641ddcc34de

На этом основы Dokcer заканчиваются, спасибо, за внимание.

Большую часть информации для этой статьи я взял из данного видео — https://www.youtube.com/watch?v=I18TNwZ2Nqg&t=1931s&ab_channel=ADV-IT

Vagrant. Описание и простые команды

Vagrant — ПО для создания и настройки виртуальной среды. Vagrant является надстройкой для VirtualBox, vmWare, Hyper-V и т.д.

Основные элементы Vagrant:

  • Boxes — сжатые образы виртуальных машин. Один образ можно использовать несколько раз (аналог iso- файла)
  • cli — консольные команды для управления средой
  • VagrantFile — файл с описанием конфигурации
  • Plugins — отдельные компоненты, которые упростят работу. Например можно поставить надстройку над vmWare и управлять машинами через Vagrant

Установка VirtualBox и Vagrant у меня не вызвала проблем, кроме той, что я ставил их рядом с vmWare, как получилось установить я рассказывал тут.

Попробуем развернуть простую виртуальную машину c CentOS 7. Для этого сначала проверим что vagrant работает корректно, а потом запросим VagrantFile

vagrant status
vagrant init centos/7

После инициализации centos/7 в текущий каталог загружается VagrantFile, который содержит настройки виртуальной машины. Для загрузки VagrantFile с популярными ОС надо вписать следующие команды:

  • Debian 10 Buster — vagrant init debian/buster64
  • CentOS 6 — vagrant init centos/6
  • CentOS 7 — vagrant init centos/7
  • CentOs 8 — vagrant init centos/8
  • Ubuntu 20.04 — vagrant init ubuntu/bionic64
  • Ubuntu 18.04 — vagrant init bento/Ubuntu-18.04
  • Ubuntu 16.04 — vagrant init ubuntu/xenial64

После того, как VagrantFile находится у нас в каталоге, необходимо запустить среду командой vagrant up. При первом запуске будет загружен Box c ОС. Далее эта команда будет просто включать ВМ.

При успешном старте в VirtualBox мы увидим новую включенную машину

Далее мы можем подключиться к виртуальной машине через SSH с помощью команды vagrant ssh. Подключение происходит по ssh-ключу логина и пароля нет

Подключившись по SSH, мы увидели версию CentOS 7 и базовые характеристики ВМ. Также виртуальной машиной можно управлять с помощью следующих команд:

  • vagrant halt — выключить ВМ
  • vagrant suspend — приостановить ВМ
  • vagrant reload — перезагрузить ВМ и применить конфигурацию из VagrantFile
  • vagrant destroy <имя машины> — удалить ВМ (Если ВМ одна можно писать просто vagrant destroy)
  • vagrant destroy -f — удалить все виртуальные машины

Если нас не устраивает базовая конфигурация виртуальной машины, то нам необходимо изменить VagrantFile следующим образом:

Vagrant.configure("2") do |config|
 
  #Указываем ОС и версию виртулаьной машины
  config.vm.box = "centos/7"
  
  #Запрещаем проверку обновлений с сервера
  config.vm.box_check_update = false
  
  #Пробрасываем Web-порт виртуальной машины на loacalhost:8080
  config.vm.network "forwarded_port", guest: 80, host: 8088

  #При запуске ВМ будет открываться VirtualBox
  # config.vm.provider "virtualbox" do |vb|
  #   vb.gui = true
  # end
   
   #Указываем имя, отображаемое в VirtualBox
    config.vm.provider "virtualbox" do |v|
     v.name = "C7-vagrant"
    end
   
   
  #Изменяем параметры виртуальной машины
   config.vm.provider "virtualbox" do |v|
    v.memory = 1024
    v.cpus = 2
   end
 
  #Выполнить следующий скрипт при старте вм
   config.vm.provision "shell", inline: <<-SHELL
     yum update
     yum install -y nginx
     setenforce 0
     service firewalld stop
   SHELL
   
end

После изменения VagrantFile необходимо проверить файл на наличие ошибок командой vagrant status, и, если нет ошибок перезапустить ВМ с применением настроек vagrant reload

Изучаем Git и GitHub

Git — это система контроля версий. Позволяет отслеживать изменения в файле от откатить файл к предыдущим значениям.

Git сохраняет только изменения, для хранения изменений используются хэш-суммы, которые записываются в БД Git.

Установка и первоначальная настройка Git

sudo apt install git   
git config --global user.name "Alex"  
git config --global user.email "aliesha1994@rambler.ru"   

Далее необходимо создать собственный git-репозиторий и выполнить инициализацию

mkdir project
cd project
git init

Команда git init инициализирует репозиторий и создаёт папку .git в которой будет храниться структура репозитория. Далее, можно создать файл, добавить его в git внести изменения и сделать commit.

vim document
git status

После добавления файла, можно проверить статус командой git status

В данный момент, команда сообщает что найден один файл (document), который не будет отслеживаться. Далее, добавляем этот файл в git и проверяем статус.

git add document
git status

Добавить одновременно все изменённые файлы: git add -u

Теперь статус файла отслеживаемый, можно сделать commit (сохранение версии)

git commit -m "Add document file"

Commit файла завершен, если далее понадобится опять внести в него изменения, то необходимо снова добавить его в git и сделать commit

vim document
git add document
git commit -m "Edit document file"

Посмотреть историю изменений файла: git log

Если потребуется восстановить файл к одной из предыдущих версий, необходимо воспользоваться командой git revert <хэш-функция изменения>. Если в версии будет несколько файлов, то они вернутся в исходное состояние одновременно!

Проверка несохраненных изменений: git diff

В Git есть понятие веток, их используют если git-проект большой и с ним работает несколько человек. Если проект простой, то работа идёт только в главной ветке master.

Создание новой ветки (line) и переход в неё:

git branch line
git checkout line

Созданные файлы, к которым был применён commit будут отображаться только в данной ветке:

Работа с GitHub

Для начала работы с GitHub, необходимо создать учётную запись и сделать первый репозиторий, далее к нему можно будет подключаться из терминала.

GitHub поддерживает те же самые команды что и Git, но добавляются команды работы с удалённым репозиторием.

Скачиваем репозиторий себе в ОС, переходим в скаченную папку, заходим в требуемую ветку (если есть несколько веток) и проверяем содержимое:

git clone https://github.com/tv1n94/infrastructure.git
cd infrastructure
git checkout scripts
ls -l

Далее можно создать файл или изменить существующий, после чего необходимо добавить файл в git, сделать commit и отправить файлы обратно на сервер(потребуется логин и пароль от GitHub), после чего выйдет сообщение об успешной загрузки:

nano README.md
git add README.md
git commit -m "Edit README.md"
git push

Повторно забрать изменения с сервера можно с помощью команды git pull

Использование Vagrant при одновременно установленных vmWare Workstation и VirtualBox

Недавно я решил посмотреть, как работает Vagrant. Vagrant — это инструмент для быстрого развёртывания виртуальных машин, как для vmWare, так и для VirtualBox. Я установил VirtualBox и Vagrant (установка не составила труда: далее, далее… ок, готово!) после чего столкнулся с интересной ошибкой:

При вводе любой команды вылетает ошибка лицензии vmWare provaiders

Я погуглил, оказалось, что для использования провайдера vmware необходимо купить лицензию. Это в мои планы не входило, и тогда я попробовал запустить среду принудительно, указав ей бесплатного провайдера VirtualBox.

Данная манипуляция тоже не решила мою проблему

Далее, я просто начал пытаться вводить различные команды, и нашёл команду просмотра установленных плагинов: vagrant plugin list

Данная команда вывела мне два плагина vmWare, из-за которых я не мог запустить тестовую среду. Это были плагины: vagrant-vmware-fusion и vagrant-vmware-desktop

Далее я просто удалил эти плагины с помощью команды vagrant plugin uninstall <имя плагина>

Просмотр оставшихся плагинов и удаление плагина vagrant-vmware-desktop

После данных манипуляций Vagrant заработал в связке с VirtualBox:

Старт тестовой виртуальной машины

Обратите, пожалуйста, внимание на то, что пока Vagrant может работать с VirtualBox версии 6.0, более новые версии пока не поддерживаются программой.