# Сопровождение системы

## Отладка развёрнутых приложений

В первую очередь нужно подключиться к серверу, где развёрнуто приложение, по SSH. Для подключения потребуется авторизация.

### **Данные авторизации**

Чтобы получить данные авторизации откройте репозиторий сайта (там, где находятся .env, configuration.dockerfile, docker-compose.yml и т.д.) и найдите следующие значения:

* адрес сервера, находится в файле _hosts_, в поле _hosting_;
* порт сервера, находится в файле _group_vars/hosting_, в поле _ansible_port_;
* логин, находится в файле _group_vars/hosting_, в поле _ansible_user_;
* пароль, находится в файле _group_vars/hosting_, в поле _ansible_password_.

### **Подключение по SSH в Windows**

Есть несколько способов подключения к серверу по SSH в Windows.

**ssh**

В Windows 10 и выше встроена команда ssh. Она работает аналогично соответствующей команде в Linux. Чтобы подключиться по SSH, в командной строке нужно ввести команду ssh, указав логин и адрес сервера:

```
ssh <логин>@<адрес сервера>
```

Или так, если нужно также указать порт:
```
ssh -p<порт сервера> <логин>@<адрес сервера>
```

После ввода команды и нажатия на Enter, нужно будет ввести пароль:

```
<логин>@<адрес сервера>'s password:
```

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

**PuTTY**

Скачать PuTTY можно [отсюда](https://www.putty.org)

Чтобы подключиться с помощью PuTTY, для начала нужно сделать следующее. В поле _Host Name (or IP address)_ ввести адрес сервера. Если нужно ввести порт, заменить его значением «22» в поле _Port_. Затем нажать кнопку _Open_.

PuTTY выведет новое окно, представляющая собой командную оболочку. Сначала нужно будет ввести логин:

```
login as:
```

Затем нужно будет ввести пароль:

```
<логин>@<адрес сервера>'s password:
```

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

![PuTTY](media/PuTTY.png)
![ssh](media/sshPutty.png)
![Успешное подключение](media/sshUspeh.png)

## Работа в SSH

При успешном подключении вас встретит Linux с командной оболочкой bash.

**Поиск сайта**

В Лексеме большинство папок сайтов находятся в папке «sites». Чтобы перейти в эту папку, нужно ввести команду `cd`:

```
~$ cd sites
```

Аналогично с помощью этой команды можно перейти в любую другую папку:

```
~/sites$ cd desk.dev.lan
```

Обращайте внимание на то, что перед долларом отображается папка, в которой вы находитесь.

Команда `cd` принимает не только название папки, но и путь к ней. Например, достаточно написать следующее, чтобы перейти к папке сайта:

```
~$ cd sites/desk.dev.lan
```

Чтобы посмотреть содержимое папки, нужно ввести команду `ls`. Вывод этой команды будет выглядеть следующим образом:

```
~/sites/desk.dev.lan$ ls
clearing.sh  docker-compose.yml
```

Если указать параметр `-a`, команда также выведет скрытые файлы:

```
~/sites/desk.dev.lan$ ls -a
.  ..  clearing.sh  docker-compose.yml  .env
```

**Отслеживание состояния сайта**

Убедитесь, что в папке вашего сайта есть файл «docker-compose.yml», иначе команда `docker-compose` работать не будет.

Проекты на платформе Lexema 8.4 собираются в docker-образы: образ приложения, которое содержит ядро и библиотеки, и образы сервисов, которые использует приложение. При развёртывании сайта эти docker-образы скачиваются и запускаются.

Так вот, чтобы посмотреть запущены ли до сих пор все эти образы или нет, нужно ввести команду `docker-compose ps`:

```
~/sites/desk.dev.lan$ docker-compose ps
```
Краткая сводка по столбцам таблицы:

* Name — имя docker-образа;
* State — состояние docker-образа, может иметь одно из следующих значений:
    * Up означает, что docker-образ продолжает работать;
    * Exited означает, что при запуске docker-образа или в момент его выполнения возникла ошибка.
* Ports — порт docker-образа, на котором он работает. Основное, что нужно знать, это то, что у каждого docker-образа порт должен быть уникальным.

Имена сервисов обычно соответствуют шаблону:

```
<адрес сайта>_<имя сервиса или app>_1_<уникальный номер>
```

Под словом «app» подразумевается docker-образ приложения.

**Логи сайта**

Для того, чтобы посмотреть логи docker-образов в процессе работы, нужно ввести команду `docker-compose logs`:

```
~/sites/desk.dev.lan$ docker-compose logs
```

Однако это команда выводит слишком много информации, иногда вразнобой, соответственно трудно эту информацию разобрать. Для решения этой проблемы можно воспользоваться командой `grep`. Она фильтрует выводимую информацию по переданному шаблону.

Вводить команду `grep` нужно следующим образом, указав шаблон:

```
~/sites/desk.dev.lan$ docker-compose logs | grep <шаблон>
```

Пример:

```
~/sites/desk.dev.lan$ docker-compose logs | grep app_1_
```

Если шаблон содержит пробелы, его нужно обернуть в ординарные кавычки.

Для того, чтобы посмотреть логи не всех docker-образов, а только одного, нужно ввести команду `docker logs`, указав имя docker-образа:

```
~/sites/desk.dev.lan$ docker logs <имя docker-образа>
```

Пример:

```
~/sites/desk.dev.lan$ docker logs desk_dev_lan_app_1_91a354797cea
```

**Работа в docker-образе**

Docker позволяет выполнять команды внутри docker-образов, такие как `cd`, `ls`, `grep` и т.д., с помощью команды `docker exec`:

~/sites/desk.dev.lan$ docker exec <имя docker-образа> <команда> [аргументы...]

Пример:

```
~/sites/desk.dev.lan$ docker exec desk_dev_lan_app_1_91a354797cea ls -a
```

Можно даже запустить bash внутри bash:

```
~/sites/desk.dev.lan$ docker exec -it <имя docker-образа> bash
```

Пример:

```
~/sites/desk.dev.lan$ docker exec -it desk_dev_lan_app_1_91a354797cea bash
/sites/app.lexema.ru# ls
```

Последняя команда особенно полезна для docker-образа приложения, так как этот docker-образ содержит в себе внутренние сервисы, такие как `gate`, `data` и `file`.