Предлагаю статью, в которой собрано все во едино по настройке выделенного сервера с нуля без панели со всем необходимым. Оставлю это здесь в качестве шпаргалки.

Панели управления — достаточно удобны, но за удобство иногда приходиться платить производительностью, а ещё иногда и это не бесплатная услуга. К тому же в последнее время наблюдается тенденция снижения цен на VDS, к примеру на RUVDS цена стартует от 130 рублей за сервер.

Связка nginx + apache рекомендуется устанавливать на серверы с 1 Гб оперативной памяти, ввиду того, что apache достаточно прожорливый. На меньших объёмах сайт может тормозить ввиду нехватки именно этого ОЗУ.

1. Подготовка и программы для работы с VPS

Собственно давайте приступим. После заказа VPS вы получаете к нему доступ по ssh, рекомендую использовать программу WinSCP — это удобный файловый менеджер, знаменитая PuTTY уже в него встроена. Рекомендую сразу сохранить данные подключения сервера.

С самого начала нам именно PuTTY и понадобится.

В появившееся окно вводим пароль и подключаемся к серверу. Теперь в это окно мы будем водить команды.

2. Установка lAMP

lAmp — это сокращение от «Linux Apache MySQL PHP». То есть это базовые службы веб-сервера. Раньше lAMP можно было установить одной командой типа «apt-get install phpmyadmin» и далее по зависимостям всё само устанавливалось и настраивалось как надо. Но с появлением php 8 версии это стало немного не актуально ввиду того, что не все сайты работают с php 8. Лично мне была нужна php 7 версии. Перед началом обязательно проверяем наличие обновлений:

apt-get update
apt-get upgrade

Далее устанавливаем lAMP:

apt-get install apache2
apt-get install php7.4
apt-get install mariadb-server

Mariadb — это альтернативный сервер базы данных от привычной всем MySQL, полностью с ним совместимый. Дело в том, что MySQL — это детище ORACLE, имеет закрытый код и условно-бесплатную лицензию на использование, плюс были какие-то разборки в результате чего теперь лучше использовать Mariadb. К тому же по заверению разработчиков Mariadb более оптимизирована и имеет 25% превосходство с MySQL по скорости работы.

Теперь можно установить и phpMyAdmin:

apt-get install phpmyadmin

В процессе установки появится табличка, с каким сервером будет использоваться phpMyAdmin — выбрать Apache, по завершении установки будет предложено создать базу данных для phpMyAdmin — разрешите ему такое действие, если ему так хочется. К тому же после этого станут доступны дополнительные функции в phpMyAdmin, которые будут полезны в будущем.

через WinSCP заходим в директорию «/var/www/html», это директория, для веб-сайта по умолчанию. нажимаем правой кнопкой мыши — «новый — файл» и создаём файл «phpinfo.php», в открывшимся окне редактора пишем

<?php phpinfo(); ?>

, сохраняем (WinSCP автоматически передаст обновлённый файл на сервер). Проверяем работоспособность:

http://ваш_IP_адрес/phpinfo.php

3. Настройка root-доступа Mariadb для phpMyAdmin

Сервер базы данных изначально не знает пароль root от сервера да и вообще, они могут быть совершенно разные. Лично мне было удобно, чтобы пароли везде были одинаковые. Для изменения пароля для root в Mariadb переходим в PuTTY, пишем

mysql

в появившейся строке вводим:

ALTER USER 'root'@'localhost' IDENTIFIED BY 'ваш_пароль';
FLUSH PRIVILEGES;
quit;

Всё, пароль для root в базе данных установлен. В дальнейшем подключиться к монитору можно будет командой:

mysql -pваш_пароль

Заметьте, что пароль вводиться вплотную после «-p» без пробелов. Теперь пробуем подключиться к phpMyAdmin:

http://ваш_IP_адрес/phpmyadmin

Теперь через интерфейс можно создавать новых пользователей и наделять их привилегиями.

4. Установка nginx перед Apache

Такая связка призвана разгрузить Apache от отправки статических файлов и сохранить работоспособность файлов «.htaccess». Считается, что Apache имеет проблемы с буферизацией и очень плохо справляется со статикой, расходуя огромное количество ресурсов. Для этого был специально создан nginx. Для начала отредактируем файл конфигурации Apache. Переходим в директорию «/etc/apache2/sites-available» открываем «000-default.conf» в самом начале заменяем:

<VirtualHost *:80>

на

<VirtualHost *:8080>

Или любой другой порт, отличный от «80». Восьмидесятый порт — это порт по умолчанию для протокола «http», его теперь будет использовать nginx.

Кстати, попутно рекомендую отредактировать файл «apache2.conf» в директории «/etc/apache2», найти секцию:

<Directory /var/www/>
Options Indexes FollowSymLinks
AllowOverride None
Require all granted
</Directory>

и заменить в ней «AllowOverride None» на «AllowOverride All». Без этого изменения Apache не будет обрабатывать файлы .htaccess!

Сохраняем изменения и в PuTTY вводим

systemctl restart apache2

Пробуем наши изменения, открываем в обозревателе:

http://ваш_IP_адрес:8080

Работает, замечательно. Переходим обратно в PuTTY, устанавливаем nginx:

apt-get install nginx

После установки пробуем перейти

http://ваш_IP_адрес

Видим другую начальную страницу. Значит nginx работает. Однако попытка вызвать «http://ваш_IP_адрес/phpmyadmin» или «http://ваш_IP_адрес/phpinfo.php» оканчивается неудачей. Содержимой файлов просто выводится в обозревателе. Теперь осталось настроить обработку php файлов через Apache, все статические файлы оставим для nginx. Переходим в директорию «/etc/nginx/sites-available» и открываем для редактирования файл «default». Вписываем в него содержимое:

# Default server configuration
#
server {
listen 80 default_server;
listen [::]:80 default_server;
 
root /var/www/html;
 
# Add index.php to the list if you are using PHP
index index.html index.htm index.nginx-debian.html index.php;
 
server_name _;
 
location / {
location ~ [^/]\.ph(p\d*|tml)$ {
try_files /does_not_exists @apache;
}
location ~* ^.+\.(jpe?g|gif|png|svg|js|css|mp3|ogg|mpe?g|avi|zip|gz|bz2?|rar|swf)$ {
expires max;
try_files $uri $uri/ @apache;
}
location /phpmyadmin {
try_files $uri $uri/ @apache;
}
location / {
try_files /does_not_exists @apache;
}
}
 
location ~ /\.ht {
deny all;
}
 
location @apache {
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header X-Forwarded-Port $server_port;
proxy_pass http://127.0.0.1:8000;
}
}

Отдельно хочется отметить секцию «@apache». Все необходимые заголовки должны быть отправлены ДО команды «proxy_pass». Кроме этого, адрес должен быть указан именно «127.0.0.1», а не «localhost». Это необходимо для корректной работы модуля «remoteip» у Apache, чтобы корректно определять удалённый IP-адрес пользователя.

Сохраняем изменения, перезагружаем nginx

systemctl restart nginx

Проверяем наши адреса:

http://ваш_IP_адрес/phpmyadmin
http://ваш_IP_адрес/phpinfo.php

Теперь всё должно заработать.

Подключим модуль «remoteip». Нам необходимо перейти в директорию «/etc/apache2/mods-available» и создать файл «remoteip.conf» со следующим содержимым:

RemoteIPHeader X-Forwarded-For
RemoteIPTrustedProxy 127.0.0.1

Сохраним конфигурацию, теперь в PuTTY вводим:

a2enmod remoteip
systemctl restart apache2

Теперь Apache сможет получать корректный внешний адрес от nginx.

5. Создание виртуальных хостов

Виртуальный хост — это так называемый «сайт», то есть подключённое доменное имя к серверу. Создадим виртуальный хост «example.ru». Нам будет необходимо создать директорию для файлов сайта, базу данных для сайта и 2 файла конфигурации. Начнём.

Создадим файл конфигурации для nginx, переходим в директорию «/etc/nginx/sites-available», создадим файл «example.ru»:

server {
 
root /var/www/example.ru;
 
# Add index.php to the list if you are using PHP
index index.html index.htm index.php;
 
server_name example.ru www.example.ru;
 
location / {
location ~ [^/]\.ph(p\d*|tml)$ {
try_files /does_not_exists @apache;
}
location ~* ^.+\.(jpe?g|gif|png|svg|js|css|mp3|ogg|mpe?g|avi|zip|gz|bz2?|rar|swf)$ {
expires max;
try_files $uri $uri/ @apache;
}
location / {
try_files /does_not_exists @apache;
}
}
 
location ~ /\.ht {
deny all;
}
 
location @apache {
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header X-Forwarded-Port $server_port;
proxy_pass http://127.0.0.1:8000;
}
}

Важно! Оставьте пустую строку в конце файла конфигурации.

Создадим файл конфигурации для Apache, переходим в директорию «/etc/apache2/sites-available», создаём файл «example.ru.conf»:

<VirtualHost *:8080>
ServerName example.ru
ServerAlias www.example.ru
 
SetEnvIf X-Forwarded-Proto https HTTPS=on
 
ServerAdmin admin@example.ru
DocumentRoot /var/www/example.ru
 
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>

Теперь осталось только создать директорию для сайта «/var/www/example.ru». В неё можно загрузить «index.html» с любым содержимым или наш «phpinfo.php»

Включаем сайты и перезагружаем серверы:

ln -s /etc/nginx/sites-available/example.ru /etc/nginx/sites-enabled/
a2ensite example.ru
systemctl restart nginx
systemctl restart apache2

Пробуем наш сайт в обозревателе:

http://example.ru
http://example.ru/phpinfo.php

6. Установка сертификата от Let’s Encrypt

Достаточно простая процедура, для этого есть специальное приложение, которое нужно будет скачать и установить. Для начала нам нужно установить «snapd», так как сам серт-бот работает через него:

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

Теперь можно запускать приложение для получения сертификатов командой

certbot --nginx

Останется выбрать только домены для получения сертификата. Важно! мы прописывали наш «example.ru» и с «www», но по сути — это один домен. При получении сертификата нужно будет указать через запятую оба, к примеру: 1,2. К слову приложение само получит и установит сертификат, внесёт все необходимые изменения в файлы конфигурации nginx и создаст задачу в планировщике для автоматического обновления сертификата.

7. Настройка sendmail для отправки почты

Для отправки почты через php проще всего использовать «sendmail», для начала установим его:

apt-get install sendmail

Проверим, работает ли он:

/usr/sbin/sendmail -q

Если ошибок нет, переходим в настройки php, переходим в директорию «/etc/php/7.4/apache2», находим файл «php.ini», выполним поиск «sendmail_path». Заменяем строку на

sendmail_path = /usr/sbin/sendmail -t -i

Сохраняем и перезапускаем Apache:

systemctl restart apache2

Для проверки в каталоге «/var/www/html» создадим файл «mail.php» с содержимым:

<?php
$to = "ВАШ_EMAIL_АДРЕС";
$subject = "This is a test HTML email";
 
$message = "
<html>
<head>
<title>This is a test HTML email</title>
</head>
<body>
<p>Test email. Please ignore.</p>
</body>
</html>
";
 
// It is mandatory to set the content-type when sending HTML email
$headers = "MIME-Version: 1.0" . "\r\n";
$headers .= "Content-type:text/html;charset=UTF-8" . "\r\n";
 
// More headers. From is required, rest other headers are optional
$headers .= 'From: <info@example.com>' . "\r\n";
$headers .= 'Cc: sales@example.com' . "\r\n";
 
if (mail($to,$subject,$message,$headers)) {
	echo 'Mail Sent';
} else {
	echo 'Error Sending Email';
}
?>

Сохраняем, пробуем обратиться к файлу

http://ваш_IP_адрес/mail.php

В ответ получаем «Mail Sent», проверяем почтовый ящик. Некоторые почтовые серверы могут отправить такое письмо в спам.

Добавить комментарий

Включите изображения, чтобы увидеть вопрос *