IT-Storm

Easy things should be easy and hard things should be possible

Menu

Linux: настройка сайта на VPS

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-gd
a2dismod отключает модуль php8.0, удаляя его символические ссылки:
sudo a2dismod php8.1
a2enmod подключает 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/

Linux