Skip to main content

Сервер документації (+тимчасово для скриптів автоматизації)

Первинні налаштування

Треба створити користувача sudo (щоб не працювати з під root)

adduser oleksandr-d

занести користувача в групу sudo

sudo usermod -aG sudo oleksandr-d

Встановлюю PHP та модулі

sudo apt install -y php-cli php-openssl php-mbstring php-iconv php-tokenizer php-gd php-mysql php-xml php-ldap php-curl php-gd php-simplexml php-dom php-pdo

Встановлюю php-fpm, щоб використовувати nginx, як web-сервер.

sudo apt install php-fpm

Встановлюю MySQL

sudo apt install mysql-server
sudo mysql_secure_installation

# Remove anonymous users? [Y/n]                     Type Y
# Disallow root login remotely? [Y/n]               Type Y
# Remove test database and access to it? [Y/n]      Type Y
# Reload privilege tables now? [Y/n]                Type Y

Налаштовую php-fpm

sudo nano /etc/php/8.3/fpm/php.ini
file_uploads = On
allow_url_fopen = On
memory_limit = 256M
upload_max_filesize = 100M
cgi.fix_pathinfo = 0
max_execution_time = 360
date.timezone = Europe/Kyiv

Встановлюю Composer

Завантажте сценарій інсталятора 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

Створюю базу даних bookstack з користувачем bookstackuser та даю йому повний доступ до цієї бази даних.

sudo mysql
CREATE DATABASE bookstack; 
CREATE USER 'bookstackuser'@'localhost' IDENTIFIED WITH mysql_native_password BY '********************';
GRANT ALL ON bookstack.* TO 'bookstackuser'@'localhost'; FLUSH PRIVILEGES;
exit

Дозволяю доступ по ssh через порт 22

sudo ufw allow ssh

Встановлюємо Nginx  та надаю доступ до портів

sudo apt install nginx
sudo ufw allow 'Nginx Full'

Перевіряємо налаштування брандмауера (необхідні налаштування є в списку відповіді) та потім вмикаємо його

sudo ufw app list

# Available applications:
#   Nginx Full
#   Nginx HTTP
#   Nginx HTTPS
#   OpenSSH

sudo ufw enable

sudo ufw status
# Status: active

# To                         Action      From
# --                         ------      ----
# 22/tcp                     ALLOW       Anywhere
# Nginx Full                 ALLOW       Anywhere
# 22/tcp (v6)                ALLOW       Anywhere (v6)
# Nginx Full (v6)            ALLOW       Anywhere (v6)

Завантажую сам BookStack та налаштовую
Створіть кореневу папку для програми BookStack.

sudo mkdir -p /var/www/bookstack

Роблю власником себе (поточного юзера з якого працюю), щоб не працювати постійно з sudo та для nginx

sudo chown -R oleksandr-d:www-data /var/www/bookstack

Переходжу в створену папку, та клоную репозиторій з BookStack (крапка в кінці треба, щоб розпакувалось в поточну папку. а не створювалась нова).

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

Встановлюємо Composer для bookstack

composer install --no-dev

Копіюю файл, та налаштовую дані для додатку

cp .env.example .env

Відкрийте файл для редагування.

nano .env

Заповніть URL-адресу програми та дані бази даних. Якщо ви збираєтеся використовувати функції електронної пошти, заповніть дані SMTP або видаліть їх із файлу.

APP_URL=https://doc.rtb-system.online

DB_HOST=localhost
DB_DATABASE=bookstack
DB_USERNAME=bookstackuser
DB_PASSWORD=**********************


# Can be 'smtp' or 'sendmail'
MAIL_DRIVER=smtp

MAIL_FROM_NAME="RTB Documentation"
[email protected]


MAIL_HOST=smtp.gmail.com
MAIL_PORT=587
[email protected]
MAIL_PASSWORD="**** **** **** ****"
MAIL_ENCRYPTION=tls

Далі генерую ключ для artisan який запишеться в файл .env

php artisan key:generate

Налаштовую додаткові права для юзера до каталогу з bookstack

sudo chown -R oleksandr-d:www-data /var/www/bookstack
sudo chmod -R 755 /var/www/bookstack
sudo chmod -R 775 /var/www/bookstack/storage /var/www/bookstack/bootstrap/cache /var/www/bookstack/public/uploads
sudo chmod 640 /var/www/bookstack/.env

Роблю artisan міграцію

php artisan migrate

Далі встановимо та налаштуємо certbot та конфігурацію nginx
Спочатку зупинимо nginx

sudo systemctl stop nginx.service

Встановлюємо  Certbot

sudo apt install snapd
sudo snap install core
sudo snap refresh core
sudo snap install --classic certbot
sudo ln -s /snap/bin/certbot /usr/bin/certbot

Перевірити версію

certbot --version

Генеруємо сертифікат

sudo certbot certonly

Тепер запускаю та вмикаю nginx

sudo systemctl start nginx.service
sudo systemctl enable nginx.service

Налаштовую конфігурацію для nginx

sudo nano /etc/nginx/sites-available/bookstack
# HTTP — редірект на HTTPS
server {
    listen 80;
    listen [::]:80;
    server_name notes.bistats.site;

    location / {
        return 301 https://$host$request_uri;
    }
}

# HTTPS — конфігурація SSL
server {
    listen 443 ssl;
    listen [::]:443 ssl;
    server_name notes.bistats.site;

    ssl_certificate /etc/letsencrypt/live/notes.bistats.site/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/notes.bistats.site/privkey.pem;

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

    client_max_body_size 100M;

    location / {
        try_files $uri $uri/ /index.php?$query_string;
    }

    location ~ \.php$ {
        include snippets/fastcgi-php.conf;
        fastcgi_pass unix:/var/run/php/php8.3-fpm.sock;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
    }
}
sudo ln -s /etc/nginx/sites-available/bookstack /etc/nginx/sites-enabled/
sudo systemctl restart nginx.service

Була помилка додав ще раз права на необхідні папки.