Технический сайт linuxgik.ru

rsync

Должен быть установлен на обеих машинах: на локальной и на сервере.
Порядок аргументов: сначала источник (что копируем), потом назначение (куда копируем).
Перед каждым прогоном — пробный запуск с -n. rsync может натворить много бед, если что-то указать неверно.

Завершающий слеш "/" у источника

Без слеша копируется сам каталог, со слешем — только его содержимое:

~]$ rsync -a /path/dir user@host:/dest/ → /dest/dir/...
~]$ rsync -a /path/dir/ user@host:/dest/ → /dest/...

Слеш в конце назначения ни на что не влияет. Путь назначения без начального / (user@host:html/) считается от домашнего каталога.

Деплой сайта

У обычного пользователя нет прав записи в /var/www/html/, поэтому деплой в два шага: через домашний каталог сервера.

  1. Локальная машина → домашний каталог сервера:
    ~]$ rsync -nva --delete -e "ssh -p 2222" html/ user@host:html/ — проверка
    ~]$ rsync -a --delete -e "ssh -p 2222" html/ user@host:html/ — выполнение

  2. На сервере → каталог веб-сервера:
    ~]$ sudo rsync -nva --delete ~/html/ /var/www/html/ — проверка
    ~]$ sudo rsync -a --delete ~/html/ /var/www/html/ — выполнение

    Другой владелец файлов — добавить --chown=apache:apache (на Debian/Ubuntu www-data).

Параметры

Подробный разбор: Основы rsync.
Мануал: man rsync, онлайн-версия — rsync(1).

Команда scp

scp — копирует файлы между хостами по SSH. Работает подобно команде cp: сначала источник, потом назначение. Удалённый путь записывается как user@host:путь. Относительный путь считается от домашнего каталога, а user@host: — это сам домашний каталог.

Примеры:

Внимание:

Мануал: man scp, онлайн-версия — scp(1).

Инструкция по настройке и запуску веб-сервера

Для AlmaLinux 8 и Debian. Команды для Debian собраны по документации и пока не проверены.

Порядок: DNS → пользователь → SSH (ключи → конфиг → SELinux → firewall → только потом применить) → веб-сервер → сертификат.
Новый порт SSH применяем после открытия его в firewall, иначе потеряем доступ к серверу.

Обозначения: your_domain.com, your_username, host, порт SSH — 2222.

1. DNS

Важно: DNS должен работать до получения сертификата.


2. Пользователь с sudo

Под root в консоли хостера (VNC):

AlmaLinux 8
  • ~]# useradd your_username
  • ~]# passwd your_username
  • ~]# usermod -aG wheel your_username
Debian
  • ~]# apt install sudo — если sudo не установлен
  • ~]# adduser your_username — создаёт домашний каталог и спрашивает пароль
  • ~]# usermod -aG sudo your_username

Проверка: ~]# su - your_username, затем ~]$ sudo whoami → root. Дальше работаем по SSH под новым пользователем.


3. Настройка SSH

Для Windows 11: Настройка OpenSSH в Windows 11

3.1 Ключи

Внимание: перед отключением паролей проверьте вход по ключу в новой сессии.

3.2 Конфигурация sshd

~]$ sudo cp /etc/ssh/sshd_config /etc/ssh/sshd_config.bak
~]$ sudo nano /etc/ssh/sshd_config

На Debian в начале sshd_config подключается sshd_config.d/*.conf, и там действует первое найденное значение директивы. Если sshd -T показывает не то, что вы задали, ищите в этом каталоге.

⚠️ Пока не применяем: сначала 3.3 и 3.4.

3.3 SELinux: разрешить новый порт (только AlmaLinux)

Debian: для sshd AppArmor ничего делать не нужно.

3.4 Firewall: открыть новый порт

AlmaLinux 8 (firewalld)
  • ~]$ sudo firewall-cmd --permanent --add-port=2222/tcp
  • ~]$ sudo firewall-cmd --reload
  • ~]$ sudo firewall-cmd --list-ports
Debian (ufw)
  • ~]$ sudo apt install ufw
  • ~]$ sudo ufw allow 22/tcp — пока SSH на 22, иначе включение ufw оборвёт сессию
  • ~]$ sudo ufw allow 2222/tcp
  • ~]$ sudo ufw enable, затем ~]$ sudo ufw status

Сервер в облаке — откройте порт ещё и в сетевом экране (security group) провайдера.

3.5 Применить и проверить

Не закрывая старую сессию, в новом окне терминала:

3.6 Закрыть порт 22

Только после успешной проверки порта 2222.

Чтобы не вводить порт, на локальной машине в ~/.ssh/config:

Host myserver
    HostName host
    User your_username
    Port 2222

4. Установка и запуск веб-сервера

Выберите один: Apache или Nginx.

4.1 Установка

AlmaLinux 8
  • Apache — ~]$ sudo dnf install -y httpd, затем ~]$ sudo systemctl enable --now httpd
  • Nginx — ~]$ sudo dnf install -y nginx, затем ~]$ sudo systemctl enable --now nginx
Debian (запускается и включается автоматически)
  • Apache — ~]$ sudo apt install -y apache2
  • Nginx — ~]$ sudo apt install -y nginx

4.2 Порты 80 и 443

AlmaLinux 8
  • ~]$ sudo firewall-cmd --zone=public --permanent --add-service=http
  • ~]$ sudo firewall-cmd --zone=public --permanent --add-service=https
  • ~]$ sudo firewall-cmd --reload
  • ~]$ sudo firewall-cmd --zone=public --list-all — проверка. Подробнее: Open a Port or Service
Debian
  • ~]$ sudo ufw allow 80/tcp, ~]$ sudo ufw allow 443/tcp

Примечание: на моём сервере AlmaLinux 8 порты были открыты заранее (вероятно, образом хостера). Всегда проверяйте --list-all.

Проверка — с локальной машины, не с сервера: ~]$ curl -I http://your_domain.com

4.3 Виртуальный хост (Apache)

AlmaLinux: файл /etc/httpd/conf.d/your_domain.com.conf

<VirtualHost *:80>
    ServerName your_domain.com
    ServerAlias www.your_domain.com
    DocumentRoot /var/www/html

    ErrorLog /var/log/httpd/your_domain.com-error.log
    CustomLog /var/log/httpd/your_domain.com-access.log combined

    <Directory "/var/www/html">
        Options -Indexes +FollowSymLinks
        AllowOverride None
        Require all granted
    </Directory>
</VirtualHost>

Debian: файл в /etc/apache2/sites-available/your_domain.com.conf, в путях логов ${APACHE_LOG_DIR}/. Затем ~]$ sudo a2ensite your_domain.com.conf, ~]$ sudo a2dissite 000-default.conf, ~]$ sudo apache2ctl configtest, ~]$ sudo systemctl reload apache2

Nginx: файл в /etc/nginx/conf.d/ (Alma) или sites-available/ + ссылка в sites-enabled/ (Debian). Проверка — ~]$ sudo nginx -t. Пример конфигурации — в посте.

Тест: ~]$ echo '<h1>It works</h1>' | sudo tee /var/www/html/index.html

AlmaLinux: если после mv файлов в /var/www/html сайт отвечает 403 — ~]$ sudo restorecon -Rv /var/www/html


5. Сертификат Let's Encrypt

Нужно: DNS указывает на сервер, порт 80 открыт, виртуальный хост с вашим доменом работает.

5.1 Установка certbot

# AlmaLinux 8
sudo dnf install -y epel-release
sudo dnf install -y certbot python3-certbot-apache mod_ssl   # Apache
sudo dnf install -y certbot python3-certbot-nginx            # Nginx

# Debian
sudo apt install -y certbot python3-certbot-apache           # Apache
sudo apt install -y certbot python3-certbot-nginx            # Nginx

5.2 AlmaLinux + Apache: ssl.conf

Пакет mod_ssl создаёт /etc/httpd/conf.d/ssl.conf с хостом на 443 и самоподписанным сертификатом localhost.crt. Он может мешать certbot, поэтому убираем с копией:

~]$ sudo mv /etc/httpd/conf.d/ssl.conf /etc/httpd/conf.d/ssl.conf.bak, затем ~]$ sudo systemctl reload httpd

5.3 Получение сертификата

5.4 Автоматическое продление


6. Рекомендации по безопасности и эксплуатации

Типичные проблемы и подробный разбор: Настройка и запуск веб-сервера.
Мануалы: man sshd_config, man firewall-cmd, man ufw; онлайн — sshd_config(5).