Установка · 10 min read · Oct 21, 2025

Как установить BookStack с Nginx на Ubuntu 20.04

BookStack — это саморазмещаемая, с открытым исходным кодом, простая в использовании платформа для организации и хранения информации. Она может использоваться для различных целей, таких как вики, веб-сайт документации и приложение для заметок. Она построена с использованием фреймворка Laravel PHP и использует MySQL для хранения данных. Для редактирования она предоставляет вам выбор между использованием WYSIWYG или Markdown редактора. Она поддерживает многофакторную аутентификацию и темный режим, а также является многоязычной.

Этот учебник научит вас, как установить BookStack на сервере на базе Ubuntu 20.04.

Предварительные условия

  1. Сервер с установленным Ubuntu 20.04
  2. Полное доменное имя (FQDN), указывающее на сервер.
  3. Пользователь, не являющийся root, с правами sudo.
  4. Версия PHP 7.3 или выше.
  5. MySQL>=5.6 и MariaDB>=10.0
  6. Git и Composer.

Шаг 1 - Настройка брандмауэра

Первый шаг — настроить брандмауэр. Ubuntu по умолчанию поставляется с ufw (Uncomplicated Firewall).

Проверьте, работает ли брандмауэр.

$ sudo ufw status

Вы должны получить следующий вывод.

Status: inactive

Разрешите порт SSH, чтобы брандмауэр не прервал текущее соединение при его включении.

$ sudo ufw allow OpenSSH

Также разрешите порты HTTP и HTTPS.

$ sudo ufw allow 80
$ sudo ufw allow 443

Включите брандмауэр

$ sudo ufw enable
Команда может нарушить существующие ssh-соединения. Продолжить операцию (y|n)? y
Брандмауэр активен и включен при запуске системы

Проверьте статус брандмауэра снова.

$ sudo ufw status

Вы должны увидеть аналогичный вывод.

Status: active

To                         Action      From
--                         ------      ----
OpenSSH                    ALLOW       Anywhere
80                         ALLOW       Anywhere
443                        ALLOW       Anywhere
OpenSSH (v6)               ALLOW       Anywhere (v6)
80 (v6)                    ALLOW       Anywhere (v6)
443 (v6)                   ALLOW       Anywhere (v6)

Шаг 2 - Установка Git

Первый шаг — установить Git. Он потребуется для загрузки и обновления BookStack. Выполните следующую команду для установки Git.

$ sudo apt install git

Проверьте установку.

$ git --version

Шаг 3 - Установка PHP и расширений

Поскольку BookStack зависит от PHP, вам нужно установить PHP и его расширения.

Ubuntu поставляется с устаревшей версией PHP. Сначала нам нужно добавить репозиторий PHP от Ondrej.

$ sudo add-apt-repository ppa:ondrej/php

Затем установите PHP и его расширения, необходимые для BookStack.

$ sudo apt install php7.4-fpm php7.4-mbstring php7.4-gd php7.4-xml unzip php7.4-bcmath php7.4-curl php7.4-mysql

Проверьте установку.

$ php --version
PHP 7.4.25 (cli) (built: Oct 22 2021 12:34:33) ( NTS )
Copyright (c) The PHP Group
Zend Engine v3.4.0, Copyright (c) Zend Technologies
    with Zend OPcache v7.4.25, Copyright (c), by Zend Technologies

Шаг 4 - Установка и настройка MariaDB

Ubuntu поставляется со старой версией MariaDB. Чтобы установить последнюю версию, добавьте официальный репозиторий MariaDB. Выполните следующие команды, чтобы добавить репозиторий.

$ curl -LsS -O https://downloads.mariadb.com/MariaDB/mariadb_repo_setup
$ sudo bash mariadb_repo_setup --mariadb-server-version=10.6

Выполните следующую команду для установки сервера MariaDB.

$ sudo apt install mariadb-server

Обеспечьте безопасность установки MariaDB.

$ sudo mysql_secure_installation

Вы столкнетесь с различными подсказками. Ответьте на них следующим образом.

Enter current password for root (enter for none): Нажмите Enter
Switch to unix_socket authentication [Y/n] Введите y
Change the root password? [Y/n] Введите n
Remove anonymous users? [Y/n] Введите y
Disallow root login remotely? [Y/n] Введите y
Remove test database and access to it? [Y/n] Введите y
Reload privilege tables now? [Y/n] Введите y

Подключитесь к оболочке MariaDB, используя следующую команду.

$ sudo mysql

Создайте новую базу данных для Bookstack.

$ create database bookstack;

Создайте нового пользователя базы данных.

$ CREATE USER 'bookstackuser'@'localhost' identified by 'bookstackpassword';

Выберите надежный пароль.

Предоставьте пользователю права на базу данных.

$ grant CREATE,ALTER,SELECT,INSERT,UPDATE,DELETE on `bookstack`.* to 'bookstackuser'@'localhost';

Выйдите из оболочки MySQL.

$ exit

Шаг 5 - Установка Composer

Composer — это инструмент управления зависимостями для PHP и необходим для Laravel, на котором основан BookStack.

Скачайте скрипт установщика Composer.

$ curl -sS https://getcomposer.org/installer -o composer-setup.php

Выполните следующие команды, чтобы проверить установщик.

$ HASH=`curl -sS https://composer.github.io/installer.sig`
$ echo $HASH
$ php -r "if (hash_file('SHA384', 'composer-setup.php') === '$HASH') { echo 'Installer verified'; } else { echo 'Installer corrupt'; unlink('composer-setup.php'); } echo PHP_EOL;"

Вышеуказанные команды получают хеш-значение установщика и сопоставляют его с вашим загруженным скриптом. Вы должны увидеть следующий вывод, если установщик безопасен для запуска.

Installer verified

Установите Composer.

$ sudo php composer-setup.php --install-dir=/usr/local/bin --filename=composer

Проверьте установку, проверив его версию.

$ composer --version
Composer version 2.1.9 2021-10-05 09:47:38

Шаг 6 - Загрузка и установка BookStack

Создайте корневую папку для приложения BookStack.

$ sudo mkdir -p /var/www/bookstack

Измените владельца директории /var/www/bookstack на текущего вошедшего пользователя.

$ sudo chown -R $USER:$USER /var/www/bookstack

Клонируйте ветку релиза репозитория BookStack на GitHub в только что созданную папку.

$ cd /var/www/bookstack
$ git clone https://github.com/BookStackApp/BookStack.git --branch=release --single-branch .

Не пропустите точку в конце команды clone. Это гарантирует, что все файлы загружаются в текущую директорию, а не создается новая.

Запустите установщик Composer из директории /var/www/bookstack.

$ composer install --no-dev

Скопируйте файл .env.example в .env, чтобы сохранить переменные окружения для установки.

$ cp .env.example .env

Откройте файл для редактирования.

$ sudo nano .env

Заполните URL приложения и данные базы данных. Если вы собираетесь использовать функции электронной почты, заполните данные SMTP, иначе удалите их из файла.

APP_URL=https://example.com
DB_HOST=localhost
DB_DATABASE=bookstack
DB_USERNAME=bookstackuser
DB_PASSWORD=bookstackpassword

Сохраните файл, нажав Ctrl + X и введя Y, когда будет предложено. Есть много других настроек, которые вы можете настроить. Чтобы узнать больше о них, откройте файл .env.example.complete и скопируйте нужные вам в ваш файл .env.

Сгенерируйте уникальный ключ приложения. Это значение автоматически заполняется в файле .env. Введите yes, чтобы продолжить выполнение команды.

$ php artisan key:generate
**************************************
*     Приложение в производстве!     *
************************************

 Вы действительно хотите выполнить эту команду? (yes/no) [no]:
 > yes

Ключ приложения успешно установлен.

Обновите базу данных.

$ php artisan migrate
************************************
*     Приложение в производстве!     *
**************************************

 Вы действительно хотите выполнить эту команду? (yes/no) [no]:
 > yes
Таблица миграции успешно создана.
Миграция: 2014_10_12_000000_create_users_table
Мигрировано:  2014_10_12_000000_create_users_table (0.12 seconds)
.......

Шаг 7 - Установка SSL Let’s Encrypt

Чтобы установить SSL-сертификат с использованием Let’s Encrypt, нам нужно установить инструмент Certbot.

Мы будем использовать установщик пакетов Snapd для этого. Большинство серверов Ubuntu не поставляются с инструментом Snap. Чтобы это исправить, установите Snap.

$ sudo apt install snapd

Убедитесь, что ваша версия Snapd обновлена.

$ sudo snap install core 
$ sudo snap refresh core

Установите Certbot.

$ sudo snap install --classic certbot

Используйте следующую команду, чтобы убедиться, что команду Certbot можно запустить, создав символическую ссылку на директорию /usr/bin.

$ sudo ln -s /snap/bin/certbot /usr/bin/certbot

Проверьте установку.

$ certbot --version
certbot 1.20.0

Сгенерируйте SSL-сертификат.

$ sudo certbot certonly --standalone --agree-tos --preferred-challenges http -m [email protected] -d example.com

Вышеуказанная команда загрузит сертификат в директорию /etc/letsencrypt/live/etherpad.example.com на вашем сервере.

Сгенерируйте сертификат группы Диффи-Хеллмана.

$ sudo openssl dhparam -out /etc/ssl/certs/dhparam.pem 2048

Создайте корневую директорию для веб-челленджей для автоматического обновления Let’s Encrypt.

$ sudo mkdir -p /var/lib/letsencrypt

Создайте задачу Cron для обновления SSL. Она будет запускаться каждый день, чтобы проверить сертификат и обновить его при необходимости. Для этого сначала создайте файл /etc/cron.daily/certbot-renew и откройте его для редактирования.

$ sudo nano /etc/cron.daily/certbot-renew

Вставьте следующий код.

#!/bin/sh
certbot renew --cert-name bookstack.example.com --webroot -w /var/lib/letsencrypt/ --post-hook "systemctl reload nginx"

Сохраните файл, нажав Ctrl + X и введя Y, когда будет предложено.

Измените разрешения на файл задачи, чтобы сделать его исполняемым.

$ sudo chmod +x /etc/cron.daily/certbot-renew

Шаг 8 - Установка и настройка Nginx

Ubuntu поставляется со старой версией Nginx. Чтобы установить последнюю версию, вам нужно загрузить официальный репозиторий Nginx.

Добавьте репозиторий для стабильной версии Nginx.

$ echo "deb [signed-by=/usr/share/keyrings/nginx-archive-keyring.gpg arch=amd64] \
http://nginx.org/packages/ubuntu `lsb_release -cs` nginx" \
    | sudo tee /etc/apt/sources.list.d/nginx.list

Установите Nginx.

$ sudo apt install nginx

Проверьте установку.

$ nginx -v
nginx version: nginx/1.20.1

Включите службу Nginx.

$ sudo systemctl enable nginx

Настройка PHP-FPM

Откройте файл /etc/php/7.4/fpm/pool.d/www.conf.

$ sudo nano /etc/php/7.4/fpm/pool.d/www.conf

Нам нужно установить Unix пользователя/группу процессов PHP на nginx. Найдите строки user=www-data и group=www-data в файле и измените их на nginx.

...
; Unix user/group of processes
; Note: The user is mandatory. If the group is not set, the default user's group
;       will be used.
user = nginx
group = nginx
...

Также найдите строки listen.owner=www-data и listen.group=www-data в файле и измените их на nginx.

listen.owner = nginx
listen.group = nginx

Сохраните файл, нажав Ctrl + X и введя Y, когда будет предложено.

Перезапустите процесс PHP-fpm.

$ sudo systemctl restart php7.4-fpm

Настройка Nginx

Создайте и откройте файл /etc/nginx/conf.d/bookstack.conf для редактирования.

$ sudo nano /etc/nginx/conf.d/bookstack.conf

Вставьте следующий код в него.

server {
    listen       443 ssl http2;
    listen       [::]:443 ssl http2;
    server_name  bookstack.example.com;

    access_log  /var/log/nginx/bookstack.access.log;
    error_log   /var/log/nginx/bookstack.error.log;
    
    ssl_certificate      /etc/letsencrypt/live/bookstack.example.com/fullchain.pem;
    ssl_certificate_key  /etc/letsencrypt/live/bookstack.example.com/privkey.pem;
    ssl_trusted_certificate /etc/letsencrypt/live/bookstack.example.com/chain.pem;

    ssl_session_timeout  5m;
    ssl_session_cache shared:MozSSL:10m;
    ssl_session_tickets off;

    ssl_protocols TLSv1.2 TLSv1.3;
    ssl_prefer_server_ciphers on;
    ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384;
    ssl_ecdh_curve X25519:prime256v1:secp384r1:secp521r1;
    ssl_stapling on;
    ssl_stapling_verify on;
    ssl_dhparam /etc/ssl/certs/dhparam.pem;

    root /var/www/bookstack/public;
    index index.php index.html;

    location / {
      try_files $uri $uri/ /index.php?$query_string;
    }
  
    location ~ \.php$ {
      fastcgi_split_path_info ^(.+\.php)(/.+)$;
      include fastcgi_params;
      fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
      fastcgi_param PATH_INFO $fastcgi_path_info;
      fastcgi_pass unix:/run/php/php7.4-fpm.sock;
    }
}

# enforce HTTPS
server {
    listen       80;
    listen       [::]:80;
    server_name  bookstack.example.com;
    return 301   https://$host$request_uri;
}

Сохраните файл, нажав Ctrl + X и введя Y, когда будет предложено после завершения.

Откройте файл /etc/nginx/nginx.conf для редактирования.

$ sudo nano /etc/nginx/nginx.conf

Добавьте следующую строку перед строкой include /etc/nginx/conf.d/*.conf;.

server_names_hash_bucket_size  64;

Сохраните файл, нажав Ctrl + X и введя Y, когда будет предложено. Снова проверьте Nginx.

Проверьте синтаксис конфигурационного файла Nginx.

$ sudo nginx -t
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful

Наконец, запустите службу Nginx, чтобы включить новую конфигурацию.

$ sudo systemctl start nginx

Измените владельца директории на пользователя nginx, чтобы веб-сервер мог получить доступ и записывать в папку.

$ sudo chown -R nginx:nginx /var/www/bookstack

Шаг 9 - Запуск BookStack

Ваш Bookstack готов к использованию. Откройте URL https://bookstack.example.com в вашем браузере, и вы увидите страницу входа.

Страница входа BookStack

Войдите, используя учетную запись администратора по умолчанию [email protected] с паролем password. Откройте страницу Настройки >> Пользователи и нажмите кнопку ДОБАВИТЬ НОВОГО ПОЛЬЗОВАТЕЛЯ.

Добавить нового пользователя BookStack

Заполните данные пользователя, установите галочку в поле Администратор под Роли пользователей и снимите галочку с Отправить приглашение пользователю по электронной почте, так как мы не настроили данные SMTP. Выберите надежный пароль. Нажмите Сохранить, когда закончите.

Страница нового пользователя BookStack

Затем нажмите на пользователя по умолчанию Admin и удалите пользователя, нажав кнопку Удалить пользователя.

Удалить пользователя Admin

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

Подтверждение удаления пользователя

Резервное копирование и восстановление BookStack

Резервное копирование BookStack

Вам нужно отдельно создать резервную копию базы данных и файлов. Чтобы создать резервную копию базы данных, используйте инструмент mysqldump.

$ sudo mysqldump -u bookstackuser bookstack > bookstack.backup.sql

Вам также нужно создать резервные копии следующих файлов и папок.

  1. .env - файл, содержащий важную конфигурацию.
  2. public/uploads - папка, содержащая загруженные изображения.
  3. storage/uploads - папка, содержащая загруженные вложения страниц.

Выполните следующую команду, чтобы создать сжатый архив вышеуказанных файлов и папок.

$ sudo tar -czvf bookstack-files-backup.tar.gz .env public/uploads storage/uploads

Восстановление BookStack

Выполните следующую команду для восстановления базы данных.

$ sudo mysql -u bookstack < bookstack.backup.sql

Если вы восстанавливаете на новую версию BookStack, вам нужно будет выполнить команду sudo php artisan migrate.

Чтобы восстановить сжатые файлы, созданные выше, используйте следующую команду.

$ sudo tar -xvzf bookstack-files-backup.tar.gz

Вам также нужно будет изменить разрешения.

Обновление BookStack

Перед обновлением BookStack убедитесь, что вы сделали правильную резервную копию, используя ранее описанный процесс.

Чтобы обновить BookStack, извлеките оригинальные файлы из его репозитория Git.

$ cd /var/www/bookstack
$ sudo git pull origin release

Выполните следующие команды, чтобы продолжить установку.

$ sudo composer install --no-dev
$ sudo php artisan migrate

Вам также нужно будет выполнить следующие команды, чтобы очистить кэш.

$ sudo php artisan cache:clear
$ sudo php artisan config:clear
$ sudo php artisan view:clear

Заключение

Это завершает наш учебник по установке BookStack на сервере Ubuntu 20.04. Если у вас есть какие-либо вопросы, оставьте их в комментариях ниже.

Share: X/Twitter LinkedIn

Get new posts in your inbox

No spam. Unsubscribe anytime.