## doctor.sh
Описание: ...

###  Использование:
`doctor.sh -d teamdo.example.ru -p 'asd%wDv' [-опция  значение]`
  Опции:
ключ  по умолчанию  описание
  -a  /teamdo       Директория приложения
  -d  -             Адрес сайта (example.ru)
  -w  10003         Порт websocket
  -h  127.0.0.1     Адрес хоста сервера БД
  -u  teamdo        Имя пользователя БД
  -n  teamdo        Имя БД
  -p  -             Пароль пользователя БД
  -i  [ no ]        Разрешение имени домена во внешний адрес сервера (yes)
! опции -d и -p не имеют дефолтных значений и должны быть указаны в любом случае.

### Проверки:
- Проверка необходимого софта
Цель:      Проверяет установлен ли необходимый софт и утилиты.
Если нет:  Установить пакеты с необходимым софтом

- Проверка синхронизации времени
Цель:      Проверяет статус службы синхронизации времени.
Если нет:  Настроить синхронизацию времени согласно документации к вашей ОС.
Пояснения: `timedatectl` должен выдавать `System clock synchronized: yes`.
  Если синхронизация времени настроена каким-нибудь другим способом, просто проигнорируйте эту проверку.

- Проверка ДНС
Цель:      Проверить разрешение доменных имён
Если нет:  Настроить разрешение доменных имён на хосте
Пояснения: Проверяется командой `dig`
  `dig +noall +answer A <Домен>`

- Проверка доступности сайта указанного с ключом `-d`.
Цель:      Проверить настройку вебсервера, сертификатов ssl, доступности портов вебсервера.
Если нет:  Настроить вебсервер, ssl, пробросить необходимые порты.
Пояснения: Проверяется командой `curl`
  `curl http://<Domain.example.ru>/ping/` - 80 порт, ответ должен быть `pong`
  `curl https://<Domain.example.ru>/ping/` - 443 порт и ssl,ответ должен быть `pong`
  `curl http://<Domain.example.ru>:<WSS_port>/ping/` - wss порт и ssl, ответ должен быть `pong`

- Проверка доступности hub.teamdo.ru
Цель:      Проверить доступность регистра докер и сайта teamdo.ru
Если нет:  Настроить доступ с хоста к указанным ресурсам
Пояснения: Проверяется командой `curl`
  `curl -w "\n%{http_code}" https://hub.teamdo.ru/v2/` - 443 порт, ssl, вывод должен быть
```
{"errors":[{"code":"UNAUTHORIZED","message":"authentication required","detail":null}]}
401
```
  `curl -w "\n%{http_code}" https://app.teamdo.ru/go/docker-registry/auth/` - 443 порт, ssl, вывод должен быть
```
"Unauthorized"
401
```
- Проверка пользователя
Цель:      Проверить что необходимый для работы приложения пользователь существует
Если нет:  Создать или скорректировать пользователя
Пояснения: Пользователь `teamdo`, id `1000`, пользователь должен находиться в группе `docker`

- Проверка директории приложения
Цель:      Проверить что директория для приложения существует и имеет нужные разрешения
Если нет:  Создать или скорректировать разрешения для директории
Пояснения: Директория задаётся ключом `-a` по умолчанию `/teamdo`, владелец `teamdo:teamdo`, права `2771`
  `chown teamdo:teamdo /teamdo && chmod 2771 /teamdo`

- Проверка базы данных
Цель:      Проверить, что у приложения будет доступ к БД.
Если нет:  Настроить сервер БД
Пояснения: Проверяется командой `mariadb -h<DB_Host> -u<DB_User> -p -e "USE <DB_Name>;"`
  Значения задаются опциями:
ключ  по умолчанию  описание
  -h  127.0.0.1     Адрес хоста сервера БД   <DB_Host>
  -u  teamdo        Имя пользователя БД      <DB_User>
  -n  teamdo        Имя БД                   <DB_Name>
  -p  -             Пароль пользователя БД
