Skip to main content

New Page

# Hetzner dedicated

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

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

```bash
adduser oleksandr-d
```

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

```bash
sudo usermod -aG sudo oleksandr-d
```

---

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

```bash
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-сервер.

```bash
sudo apt install php-fpm
```

Встановлюю MySQL

```bash
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

```bash
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.

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

Виконайте наведені нижче команди, щоб перевірити інсталятор.

```bash
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.

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

Перевірте інсталяцію, перевіривши її версію.

```bash
composer --version
```

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

```bash
sudo mysql
```

```sql
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

```bash
sudo ufw allow ssh
```

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

```bash
sudo apt install nginx
sudo ufw allow 'Nginx Full'
```

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

```bash
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.

```bash
sudo mkdir -p /var/www/bookstack
```

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

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

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

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

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

```bash
composer install --no-dev
```

<div class="result-frame svelte-1a37brm" id="bkmrk--1"></div><div class="result-frame svelte-1a37brm" id="bkmrk--2"></div>Копіюю файл, та налаштовую дані для додатку

```bash
cp .env.example .env
```

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

```bash
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"


MAIL_HOST=smtp.gmail.com
MAIL_PORT=587
MAIL_PASSWORD="**** **** **** ****"
MAIL_ENCRYPTION=tls
```

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

```bash
php artisan key:generate
```

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

```bash
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 міграцію

```bash
php artisan migrate
```

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

```bash
sudo systemctl stop nginx.service
```

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

```bash
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
```

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

```bash
certbot --version
```

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

```bash
sudo certbot certonly
```

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

```bash
sudo systemctl start nginx.service
sudo systemctl enable nginx.service
```

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

```bash
sudo nano /etc/nginx/sites-available/bookstack
```

```nginx
# 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;
    }
}
```

```bash
sudo ln -s /etc/nginx/sites-available/bookstack /etc/nginx/sites-enabled/
```

```bash
sudo systemctl restart nginx.service
```

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