# Docker

Все про докер

# Документация по восстановлению BookStack + MariaDB (Production)

### Назначение документа

Данный документ описывает полный процесс восстановления  
продакшн-инстанса BookStack, развернутого в Docker с отдельным  
контейнером MariaDB.

Документ предназначен для быстрого восстановления системы в случае: -  
смены домена - удаления контейнера БД - ошибки APP\_KEY - ошибки 500  
Internal Server Error - проблем с Docker-сетями - ошибок подключения к  
базе данных

\------------------------------------------------------------------------

#### Архитектура

Компоненты

> \- BookStack: lscr.io/linuxserver/bookstack  
> \- MariaDB: lscr.io/linuxserver/mariadb  
> \- Сеть: user-defined docker network (bookstack-net)  
> \- Хранение данных: bind mount

#### Пути хранения

```
BookStack config: /home/med1f/docker/bookstack/data
MariaDB data: /home/med1f/docker/bookstack/data/databases
```

\------------------------------------------------------------------------

### Типовые проблемы и решения

\------------------------------------------------------------------------

#### 1. Контейнер MariaDB удалён

Проверка наличия данных

Проверить наличие файлов БД:

```bash
ls -la /home/med1f/docker/bookstack/data/databases
```

Критически важные файлы: **- ibdata1 - ib\_logfile0 - aria\_log\\\* - папка**  
**mysql/ - папка bookstack/**

Если файлы присутствуют --- данные **НЕ** потеряны.

##### Восстановление контейнера MariaDB

```
docker run -d --name sweet_tanthep-main_app-1 -e
MYSQL_ROOT_PASSWORD=ROOT_PASSWORD -v
/home/med1f/docker/bookstack/data/databases:/var/lib/mysql -p 3306:3306
--restart unless-stopped lscr.io/linuxserver/mariadb:latest
```

\------------------------------------------------------------------------

#### 2. Ошибка: APP\_KEY is missing

Причина: linuxserver/bookstack требует APP\_KEY в ENV.

##### Генерация ключа

```
docker run -it --rm --entrypoint /bin/bash
lscr.io/linuxserver/bookstack:latest appkey
```

Скопировать сгенерированный ключ формата: <span style="color:rgb(241,196,15);">***base64:XXXXXXXXXXXXXXXX***</span>

\------------------------------------------------------------------------

#### 3. Ошибка 500 Internal Server Error

Чаще всего причина --- неправильные параметры БД.

##### Проверка файла .env

Файл расположен:

```
/home/med1f/docker/bookstack/data/www/.env
```

Проверить блок БД:

```
DB_HOST=sweet_tanthep-main_app-1 DB_DATABASE=bookstack
DB_USERNAME=bookstack DB_PASSWORD=Passwd55
```

Важно: В .env используется DB\_USERNAME, а НЕ DB\_USER.

После изменений:

```
docker restart bookstack
```

\------------------------------------------------------------------------

#### 4. Ошибка: Name does not resolve

Причина: Контейнеры находятся в default bridge сети. Default bridge НЕ  
поддерживает DNS по именам контейнеров.

##### Решение --- создать user-defined сеть

```
docker network create bookstack-net
```

Подключить MariaDB:

```
docker network connect bookstack-net sweet_tanthep-main_app-1
```

Запускать BookStack в этой сети:

\--network bookstack-net

\------------------------------------------------------------------------

#### 5. Ошибка: Access denied for user

Причина: Пользователь БД создан только для localhost или пароль не  
совпадает.

Проверка:

```
docker exec -it sweet_tanthep-main_app-1 mysql -u root -p

SELECT user, host FROM mysql.user;
```

Если нет **bookstack@%:**

```
CREATE USER 'bookstack'@'%' IDENTIFIED BY 'Passwd55'; GRANT ALL
PRIVILEGES ON bookstack.\* TO 'bookstack'@'%'; FLUSH PRIVILEGES;
```

\------------------------------------------------------------------------

##### Финальная рабочая команда запуска BookStack

```
docker run -d --name bookstack --network bookstack-net -e
APP_URL=https://wiki.anonix.org -e APP_KEY='base64:YOUR_KEY' -e
PUID=1000 -e PGID=1000 -v /home/med1f/docker/bookstack/data:/config -p
6875:80 --restart unless-stopped lscr.io/linuxserver/bookstack:latest
```

\------------------------------------------------------------------------

##### Рекомендации для Production

1\. Использовать docker-compose.  
2\. Использовать отдельную user-defined сеть.  
3\. Регулярно делать бэкап БД.  
4\. Делать бэкап папки /config.  
5\. Не использовать default bridge для production.

\------------------------------------------------------------------------

#### Бэкап

##### Бэкап базы

```
docker exec sweet_tanthep-main_app-1 mysqldump -u bookstack -p bookstack
\> bookstack_backup.sql
```

##### Бэкап config

```
tar -czf bookstack_config_backup.tar.gz
/home/med1f/docker/bookstack/data
```

\------------------------------------------------------------------------

##### Статус

Система полностью восстановлена. Данные сохранены. Сеть корректна.  
Ошибки устранены.