Linux: настройка сайта на VPS
В данной статье будет показано, как шаг за гагом настроить работу сайта на арендованном виртуальном персональном сервере (VPS), включая самостоятельное генерирование SSL сертификата для вашего сайта. Предполагается, что ваш VPS работает на Ubuntu и что вы умеете самостоятельно залить файлы сайта (каталог с сайтом) на VPS.
Представим что задача такая:
перенести сайт it-storm.ru с виртуального хостинга, на VPS с уже установленной Ubuntu 20.04.
При аренде VPS хостер предоставляет логин и пароль для SSH подключения к вашему VPS. А также FTP фаил-менеджер.
Решение:
Подключаемся по SSH:
ssh root@22.222.333.444- будет запрошен пароль - вводим
22.222.333.444 - это IP вашего VPS, предоставляется хостером, у которого вы арендуете VPS
После успешного подключения к серверу я первым делом проверил установленную там версию PHP
php -v
Оказалось что версия 8.1, а мне нужен 7.4. Поэтому сделал downgrade версии. Если версия PHP установленная на вашем VPS вас устраивает, то пролистайте этот мой шаг:
PHP downgrade
Подключаю PPA для PHP 7.4 в системе и устанавливаю его:
sudo add-apt-repository ppa:ondrej/php sudo apt-get updateУстановка PHP и его модулей, которые необходимы CMS моего сайта:
sudo apt-get install php7.4 php7.4-cli php7.4-common php7.4-json php7.4-opcache php7.4-mysql php7.4-mbstring php7.4-zip php7.4-fpm php7.4-intl php7.4-simplexml php7.4-curl php7.4-gda2dismod отключает модуль php8.0, удаляя его символические ссылки:
sudo a2dismod php8.1a2enmod подключает php7.4 модуль к конфигурации вебсервера apache2:
sudo a2enmod php7.4Перезагружаем apache2
sudo service apache2 restart
Настройка вебсервера apache2
Выполняем следующие комманды:
sudo a2enmod rewrite sudo a2enmod sslНастройка хоста
Создаю фаил конфигурации моего сайта:
sudo nano /etc/apache2/sites-available/it-storm.ru.confКопирую в этот фаил следующее:
<VirtualHost *:443> ServerName it-storm.ru ServerAlias www.it-storm.ru DocumentRoot /var/www/it-storm.ru ErrorLog ${APACHE_LOG_DIR}/error.log CustomLog ${APACHE_LOG_DIR}/access.log combined <Directory /var/www/it-storm.ru/> Options All -Indexes AllowOverride All </Directory> RewriteEngine on RewriteCond %{SERVER_NAME} =www.it-storm.ru [OR] RewriteCond %{SERVER_NAME} =it-storm.ru RewriteRule ^ https://%{SERVER_NAME}%{REQUEST_URI} [END,NE,R=permanent] </VirtualHost> <VirtualHost *:80> ServerName it-storm.ru ServerAlias www.it-storm.ru DocumentRoot /var/www/it-storm.ru ErrorLog ${APACHE_LOG_DIR}/error.log CustomLog ${APACHE_LOG_DIR}/access.log combined <Directory /var/www/it-storm.ru/> Options All -Indexes AllowOverride All </Directory> </VirtualHost>Подключаем сайт и перезагружаем Apache2:
a2ensite it-storm.ru.conf systemctl reload apache2
Если понадобится отключить сайт, выполнить:
a2dissite t-storm.ru.conf
systemctl reload apache2
Фаил .htaccess
Фаил .htaccess мне менять не пришлось. Вам скорее всего тоже не придётся. Хотя если возникнут проблемы достука к сайту, ошибка 403 например, то возможно вам придется дописать в файле .htaccess следующее:
Order allow,deny Allow from all Require all granted
Установка и настройка MySQL
На моём VPS не было установлено системы управления базами данных. Мне подходит MySQL (mariadb-server), устанавливаю и настраиваю её.
Устанавливаю MariaDB:
sudo apt-get -y install mariadb-serverУстанавливаю пароль рут пользователю (желательно в последствии или сразу указать надёжный пароль):
mysql -e "SET PASSWORD FOR root@localhost = PASSWORD('1')" mysql -e "FLUSH PRIVILEGES"Далее, мне нужно залить дамп базу данных сайта на MariaDB сервер
Если у вас ещё нет дампа - сделайте его, находясь в системе, где на данный момент работает ваш сайт:
Создаём дамп базы данных имя которой, предположим, "my_site_db":
mysqldump -u root -p1 my_site_db > ./my_site_db_dump.sqlпосле выполнение данной комманды в вашем текущем каталоге должен появится фаил дампа
my_site_db_dump.sql
Тперь, созданный дамп базы данных, необходимо залить на ваш VPS. Здесь я не буду объяснять как это делается, так как у моего хостера, с которого я переносил сайт, в админке был доступен FTP файловый менеджер с графическим интерфейсом. Поэтому там было всё интуитивно понятно. Но если у вас таких плюшек не оказалось, загуглите "Как залить фаил на VPS по FTP" или спросите это в службе поддержки вашего VPS.
Итак, фаил дампа БД у меня уже на сервере VPS и я всё-ещё подключен к нему по SSH. Теперь, создаю новую, пустую базу данных my_site_db для того чтобы залить в неё мой дамп. Выполняю:
mysql -u root -p1 CREATE DATABASE my_site_db; exit;Заливаю дамп. Находясь в каталоге с дампом, выполняю:
mysql -u root -p1 my_site_db < ./my_site_db_dump.sqlСоздаю нового пользователя БД и его пароль, которые буду прописывать в DB конфиге своего сайта:
mysql -u root -p1 CREATE USER 'itstorm_itstorm'@'localhost' IDENTIFIED BY 'your-password';Предоставляю этому полдьзователю все привелегии над базой данных my_site_db
GRANT ALL PRIVILEGES ON my_site_db.* TO 'itstorm_itstorm'@'localhost'; FLUSH PRIVILEGES;
Если вы переносите несколько сайтов, и у каждого сайта соответсвенно отдельная БД. То аналогично, создаём для них пустые БД. Заливаем в них соответствующие дампы и создаём в MariaDB отдельных пользоватей для каждого сайта.
Убеждаемся что наш пользователь успешно создан:
mysql> use mysql; Database changed. mysql> SELECT user FROM user;Если нужно, открыть доступ для удалённых подключений к БД (например для бекапов через терминал с удалённого компьютера), нужно внести некоторый поправки в фаил настройки mariadb:
sudo nano /etc/mysql/mariadb.conf.d/50-server.cnfИзмените значение адреса привязки с 127.0.0.1 на 0.0.0.0, чтобы сервер MariaDB принимал подключения на всех интерфейсах хоста IPv4:
bind-address = 0.0.0.0Сохраните и закройте файл, когда закончите. Затем перезапустите службу MariaDB, чтобы применить изменения:
sudo systemctl restart mariadbТеперь вы можете проверить статус прослушивания MariaDB с помощью следующей команды:
netstat -ant | grep 3306Если все в порядке, вы должны получить следующий вывод:
tcp 0 0 0.0.0.0:3306 0.0.0.0:* LISTENТеперь сервер MariaDB настроен на прослушивание всех IP-адресов.
Если вы хотите предоставить доступ всем удаленным IP-адресам к базе данных my_site_db от пользователя itstorm_itstorm, используйте % вместо IP-адреса, как показано ниже:
GRANT ALL ON my_site_db.* to 'itstorm_itstorm'@'%' IDENTIFIED BY 'your-password' WITH GRANT OPTION;
Установка Composer
curl -sS https://getcomposer.org/installer | php mv composer.phar /usr/local/bin/composer
Настройка сайта
Создаю для сайта каталог, в каталоге www:
mkdir /var/www/it-storm.ruТак, как Composer не рекомендует запускать его "под рутом" - создаю нового пользователя vasya и добавляю его в группы sudo и www-data. После этого, дальнейшую настройку VPS продолжу под этим пользователем.
Добавляю нового пользователя в систему
(в процессе будет запрошен пароль для нового пользователя, придумайте и введите его):
adduser vasya usermod -aG sudo vasya usermod -aG www-data vasyaЛогинюсь как новый пользователь:
ssh vasya@62.217.182.147
22.222.333.444 - это IP вашего VPS, предоставляется хостером, у которого вы арендуете VPS
Устанавливаю права для всех каталогов с сайтами:
sudo chown -R www-data:www-data /var/www sudo chmod -R 0775 /var/www/ find /var/www/it-storm.ru/ -type d -exec chmod 750 {} \; find /var/www/it-storm.ru/ -type f -exec chmod 640 {} \;Далее, мне нужно развернуть файлы сайта из моего репозитория в катаог
/var/www/it-storm.ru
который я создал ранее.Для этого, сначала копирую свой SSH pivate key в каталог
.ssh
, который расположен в домашнем каталоге пользователя vasya. Для этого вам сначала понадобится залить свой фаил ключа id_rsa
на VPS аналогично тому, как вы залили дабп базы данных.Итак, заливаем ваш
id_rsa
на VPS и копируем его в /home/vasya/.ssh
. После того как залили фаил id_rsa
, находясь в том же каталоге где и фаил, выпольняю:
sudo cp id_rsa /home/vasya/.ssh/id_rsaДалее, перехожу в уже созданный, пустой каталог сайта:
cd /var/www/it-storm.ruКлонирую проект (файлы сайта из репозитория в каталог)
git --version git clone git@bitbucket.org:my-projects/it-storm.git .если после этого git status выдаёт ошибку: fatal: detected dubious ownership in repository at '/var/www/it-storm.ru' Выполнить:
git config --global --add safe.directory '*'
Если у вас нет репозитория а файлы сайта просто хранятся в архиве - залейте этот архив в папку сайта и распакуйте его там
Теперь установим приложение (появится каталог vendor):
composer installУстанавливаю владельца и группу каталогу vendor:
sudo chown -R www-data:www-data /var/www/it-storm.ru/vendorКопирую "media" (например картинки) сайта в соответствующий каталог например в
/var/www/it-storm.ru/my/upload
У разных CMS и фреймворков - разные каталоги, в которой хранится "media", так что с этим думаю разберётесь самостоятельно
Каталог с медиа, как и дамп БД, предварительно залил по FTP на виртуальный сервер
Устанавливаю владельца и группу каталогу с "media"
Из корня сайта, выполняю:
sudo chown -R www-data:www-data ./my/upload/
sudo chmod -R 0775 ./my/upload/