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
```
Була помилка додав ще раз права на необхідні папки.