VPS-хостинг – услуга, в рамках которой предоставляется виртуальный сервер с root-доступом и гарантированными ресурсами.
VPS обладает всеми возможностями выделенного сервера, но гораздо более доступен по цене.
Популярным вариантом является VPS с установленной Ubuntu 24.04
В этом случае часто необходимы дополнительные настройки.
Вот некоторые моменты, которые могут пригодиться





Модуль Apache под названием mod_rewrite позволяет переписывать URL-адреса, превращать человекочитаемые пути в удобные для кода строки запросов. Он также позволяет переписывать URL-адреса согласно заданным условиям.
Файл .htaccess позволяет создавать и применять правила перезаписи без необходимости менять конфигурации сервера. Поместив файл .htaccess в корневой каталог сайта, вы можете управлять перезаписью адресов для каждого сайта или каталога.

1: Включение mod_rewrite


Чтобы Apache понимал правила перезаписи, сначала нужно включить mod_rewrite. Он уже установлен, но в установке Apache по умолчанию он отключен. Используйте команду a2enmod для включения модуля:
sudo a2enmod rewrite
Эта команда включит модуль. Если модуль был включен ранее, она сообщит вам об этом. Чтобы обновить настройки веб-сервера, перезапустите его:
sudo systemctl restart apache2
Итак, модуль mod_rewrite включен. Теперь мы должны подготовить файл .htaccess, в котором будут храниться правила перезаписи.

2: Создание файла .htaccess


Файл .htaccess позволяет настраивать редирект вне конфигурационного файла сервера.
Этот файл не требует перезагрузки сервера.
Прежде чем приступить к работе над .htaccess, нужно добавить несколько параметров в настройки сервера.
По умолчанию Apache не поддерживает .htaccess. Чтобы изменить это, откройте конфигурационный файл в текстовом редакторе (например, в nano).
sudo nano /etc/apache2/sites-available/000-default.conf
Найдите блок <VirtualHost *:80>. Добавьте в него следующие настройки:
<VirtualHost *:80>
<Directory /var/www/html>

Options Indexes FollowSymLinks


AllowOverride All


Require all granted


</Directory>

. . .
</VirtualHost>

Сохраните и закройте файл. Перезапустите Apache:
sudo systemctl restart apache2
Теперь создайте .htaccess в корневом каталоге веб-сервера.
sudo nano /var/www/html/.htaccess
Поместите следующую строку в начало файла, чтобы включить механизм перезаписи:
RewriteEngine on
Сохраните и закройте файл.



3: Права на файлы и папки


### 1. Права на файлы и папки
- **Папки**: `755` (`drwxr-xr-x`)
- Владелец может читать, писать, заходить в директорию
- Группа и другие — только читать и заходить
- **Файлы**: `644` (`-rw-r--r--`)
- Владелец может читать и писать
- Группа и другие — только читать

### 2. Владелец и группа
- `www-data:www-data` — верный выбор для Debian/Ubuntu
- Для CentOS/RHEL обычно `apache:apache` или `nginx:nginx`

### 3. Особые случаи
- **Загрузочные директории** (куда PHP пишет файлы): `775` + `chmod g+s`
(чтобы новые файлы наследовали группу)
- **Конфиги с паролями**: `600` или `640` (только владелец/группа могут читать)
- **PHP-сессии**: папка `/var/lib/php/sessions` обычно `733` или `1733` (sticky bit)

### 4. Рекомендуемая команда (если корневая директория /var/www/html)
```bash
# Для директорий
find /var/www/html -type d -exec chmod 755 {} \;

# Для файлов
find /var/www/html -type f -exec chmod 644 {} \;

# Изменение владельца/группы
chown -R www-data:www-data /var/www/html
```


4: Для управления устройствами из страницы используйте `php-ssh2`


Установите модуль:
```bash
sudo apt install libssh2-1-dev php-ssh2
```

Пример кода:


```php
$connection = ssh2_connect('ip_камеры', 22);
ssh2_auth_password($connection, 'пользователь', 'пароль');
$stream = ssh2_exec($connection, 'команда');

Пример 2:



// Настройки подключения
$CAMERA_HOST = 'здесь IP камеры';
$CAMERA_USER = 'pi';
$CAMERA_PASS = 'здесь пароль'; // пароль
$REMOTE_PHOTO = '/home/pi/photo9.jpg';
$LOCAL_PHOTO = '/share/photo9.jpg';

// Обработка кнопок
$status = '';
if ($_SERVER['REQUEST_METHOD'] == 'POST') {
try {
$conn = ssh2_connect($CAMERA_HOST, 22);
if (!$conn) throw new Exception("Не удалось подключиться к камере");
if (!ssh2_auth_password($conn, $CAMERA_USER, $CAMERA_PASS)) {
throw new Exception("Ошибка входа на камеру");
}

// Выбираем команду в зависимости от нажатой кнопки
if (isset($_POST['day_capture'])) {
$command = "raspistill -o $REMOTE_PHOTO -w 800 -h 600 -t 500 -n";
$status = "Дневное фото сделано!";
} elseif (isset($_POST['vecher_capture'])) {
$command = "raspistill -o $REMOTE_PHOTO -w 640 -h 480 -t 500 -n -ss 1000000 -ISO 800";
$status = "Сумеречное фото сделано!";
} elseif (isset($_POST['night_capture'])) {
$command = "raspistill -o $REMOTE_PHOTO -w 640 -h 480 -t 500 -n -ss 6000000 -ISO 800";
$status = "Ночное фото сделано!";
}

// Выполняем команду
$stream = ssh2_exec($conn, $command);
stream_set_blocking($stream, true);
stream_get_contents($stream); // Ожидаем завершения

// Копируем фото
if (!ssh2_scp_recv($conn, $REMOTE_PHOTO, $LOCAL_PHOTO)) {
throw new Exception("Ошибка копирования фото");
}

} catch (Exception $e) {
$status = "Ошибка: " . $e->getMessage();
}
}
?>


<form method="POST">
<button type="submit" name="day_capture" class="btn">Дневной снимок</button>
<button type="submit" name="vecher_capture" class="btn">Сумеречный снимок</button>
<button type="submit" name="night_capture" class="btn btn-night">Ночной снимок</button>
</form>

5. Укажите альтернативные DNS-серверы в Ubuntu


Отредактируйте `/etc/resolv.conf`:
```bash
sudo nano /etc/resolv.conf
```
Добавьте:
```ini
nameserver 8.8.8.8 # Google DNS
nameserver 1.1.1.1 # Cloudflare DNS
```
Сохраните (`Ctrl+O`) и перезапустите сеть:
```bash
sudo systemctl restart systemd-resolved
```

- Для автоматического применения DNS после перезагрузки сети можно прописать
их в NetPlan (актуально для Ubuntu 20.04+):
```bash
sudo nano /etc/netplan/01-netcfg.yaml
```
Добавьте блок:
```yaml
nameservers:
addresses: [8.8.8.8, 1.1.1.1]
```
Затем примените:
```bash
sudo netplan apply
```