Как я перенес сайт на DigitalOcean

Как я перенес сайт на DigitalOcean

Konark 23 июня, 2021 Комментариев (0)

Я много лет пользовался услугами хостинга Fozzy. И в целом меня он абсолютно устраивал. Ведь за небольшую плату я получал стабильную работу, сразу настроенный сервер, достаточно ресурсов для содержания проектов даже с относительно большим трафиком и удобную панель управления сервером в виде CPanel.

Но с переходом на Python, у меня начала возникать потребность где-то размещать свои пет проекты, которые, как минимум, требуют базы данных. И здесь мне виртуального хостинга стало мало, я понял что нужно брать сервер. VPS у Fozzy уже не такие привлекательные по цене, как виртуальный хостинг, поэтому я стал искать решения моей проблемы в другом месте.

Давайте сразу напишу какие плюсы перед Fozzy я вижу у DigitalOcean:
+ Облачное решение
+ Приемлемая цена
+ Международная компания
+ Быстрое масштабирование
+ Огромный выбор локаций расположения серверов
+ DO даёт 2 месяца бесплатного использования, для тестирования (ссылка в конце статьи)

Другие хостинги я пытался смотреть, но там или цена выше или сервера в России/Украине, что мне не подходит по очевидным причинам.

Итак, ближе к сути. Я провел над настройкой сервера полдня, пытался по-разному, удалял и заново ставил, так как я не эксперт в данной теме, а толковых, полноценных гайдов я так и не смог найти.

Первое что я сделал, это создал новый Дроплет. Вот примерно с такими настройками:

Создание дроплета



Обратите внимания, я выбрал автоустановку LAMP (Linux + Apache + MySQL + PHP/Perl/Python). Несмотря на некоторые проблемы, это лучшее решение для быстрого развёртывания приложения. По факту, сразу после создания дроплета, Вы имеете почти готовый веб-сервер.

Теперь нужно перенести наш домен (это можно сделать во вкладке Networking). Добавляем домен, создаем две записи типа А для доменов типа: example.com и www.example.com , в качестве IP адреса указываем айпи нашего дроплета. Так же, у регистратора задаем ns-ы ДО:

ns1.digitalocean.com.
ns2.digitalocean.com.
ns3.digitalocean.com.
Добавление домена ДО

Придется подождать 8-48 часов.

На этом с панелью управления ДО мы закончили. Переходим к серверу. Да, Вы можете поставить панель управления сервером (CPanel, ISPManager или бесплатную Vesta). Но, это или платно, или ограниченно в возможностях. Поэтому будем настраивать сервер с помощью терминала. Консоль можно открыть прямо из сайта DO:

Как открыть консоль ДО

Итак, когда у нас домен прикрепился, первое что нам нужно сделать, это «направить» его на папку. Чтобы сервер понимал, где лежат файлы сайта отвечающие определенному домену. Прежде нам нужно создать папку, где будет наш веб-сайт, как пример: var/www/geek-code.ru/public_html

Теперь идем в папку /etc/apache2/sites-available и создаем файл example.com.conf где example.com наш домен.
И прописываем там такое:

<VirtualHost *:80>
ServerName example.com
ServerAlias www.example.com
ServerAdmin admin@example.com
DocumentRoot /var/www/example.com/public_html
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>


Ну, и не забываем про права директории:

sudo chmod -R 755 /var/www


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

sudo a2ensite example.com.conf


Деактивируем конфиг по умолчанию:

sudo a2dissite 000-default.conf


Перезагружаем сервер:

sudo systemctl restart apache2

Или так:

sudo service apache2 restart

Так же, заранее можем внести изменения в /etc/apache2/apache2.conf так как ЧПУ (человекопонятный URL) после переноса у Вас просто откажется работать. По крайней мере, у меня так было и я полчаса убил на поиск ответа. Ищем строку <Directory /var/www/> и меняем там AllowOverride None на AllowOverride All
Все. Теперь переходим к дальнейшей настройке сервера. У нас осталось настроить файл подкачки, создать БД, перенести сайт (я использовал плагин Duplicator) и настроить SSL сертификат. Без него в 2021м году никуда.


Файл подкачки

Начнем с файла подкачки. Зачем он нужен?
Файл подкачки, или виртуальная память — это системный файл на жестком диске компьютера, который система использует, чтобы компенсировать нехватку оперативной памяти, если приложениям ее не хватает.

Предупреждение: Хотя подкачка в целом рекомендуется для систем с использованием традиционных жестких дисков, ее использование с SSD-накопителями может со временем вызывать ухудшение аппаратного обеспечения.

Перед тем как настраивать, давайте проверим, может быть у Вас уже есть файл подкачки (но вряд ли):

sudo swapon --show

Если после этой команды ничего не появляется, в системе сейчас нет области подкачки.

Создание файла подкачки. Размер файла подкачки рекомендуется ставить равный размеру оперативной памяти. У меня 1ГБ, поэтому ставлю 1ГБ.

sudo fallocate -l 1G /swapfile


Проверяем

ls -lh /swapfile

Должно вернуть:

-rw-r--r-- 1 root root 1.0G Apr 25 11:14 /swapfile


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

sudo chmod 600 /swapfile

Проверяем права

ls -lh /swapfile

Должно быть:

-rw------- 1 root root 1.0G Apr 25 11:14 /swapfile


Отмечаем файл как пространство подкачки:

sudo mkswap /swapfile

Активируем:

sudo swapon /swapfile

Проверяем:

sudo swapon --show


Делаем файл подкачки постоянным, так как наши предыдущие настройки работают только до перезагрузки сервера. Добавьте информацию о файле подкачки в конец файла /etc/fstab, введя следующее:

echo '/swapfile none swap sw 0 0' | sudo tee -a /etc/fstab

Меняем настройки. Начнем с Swappiness.
Параметр swappiness определяет, как часто система выгружает данные из оперативной памяти в пространство подкачки. Его значение выражается числом от 0 до 100 процентов.

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

sudo sysctl vm.swappiness=10

Но опять, это значение будет работать только до перезагрузки сервера, поэтому добавив строку в файл /etc/sysctl.conf:

vm.swappiness=10


Следующее значение vfs_cache_pressure. Эта настройка определяет, насколько система будет кэшировать данные inode и dentry по сравнению с другими данными. Можно задать консервативное значение — например, 50 — введя следующее:

sudo sysctl vm.vfs_cache_pressure=50

И опять добавляем строку в /etc/sysctl.conf:

vm.vfs_cache_pressure=50

На этом настройку файла подкачки мы закончили. Но, не рекомендую злоупотреблять с этим. Если Вам не хватает мощности сервера, ДО легко масштабируется и вы сможете в один клик докупить себе оперативную память.


База данных

Переходим к базе данных. Сейчас напишу как создать базу данных в Ubuntu. Так как нам нужно куда-то импортировать нашу БД, которую мы экспортировали со старого сайта. Заходим в mysql:

mysql -u root -p

Сервер запросит пароль от базы данных, он может совпадать с паролем сервера, если мы говорим про рут пользователя. Или, если вы не установили пароль для своего рутового пользователя MySQL, вы можете пропустить опцию -p.
Создать БД можно одной командой:

CREATE DATABASE database_name;

или

CREATE DATABASE IF NOT EXISTS database_name;

Должны получить ответ:

Query OK, 1 row affected (0.00 sec)


Теперь создаем юзера:

CREATE USER 'user' IDENTIFIED BY 'pass';


И даем ему права:

GRANT ALL PRIVILEGES ON database_name . * TO 'user';


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

FLUSH PRIVILEGES;


Необязательно задавать все права, всего существуют такие типы прав (спасибо ДО коммьюнити за справку):
ALL PRIVILEGES — как мы уже увидели ранее, данный набор прав предоставляет пользователю MySQL полный доступ к определенной базе данных (если не выбрана ни одна база данных, предоставляется глобальный доступ к системе)
CREATE — позволяет пользователю создавать новые таблицы или базы данных
DROP — позволяет пользователю удалять таблицы или базы данных
DELETE — позволяет пользователю удалять строки из таблиц
INSERT — позволяет пользователю вставлять строки в таблицы
SELECT — позволяет пользователю выполнять команду SELECT для чтения данных из базы
UPDATE — позволяет пользователю обновлять строки таблицы
GRANT OPTION — позволяет пользователю предоставлять или отзывать права других пользователей

Теперь импортируем сайт с помощью стандартного установщика Duplicator, для этого нужно перейти на example.com/installer.php и после успешной установки, переходим к установке сертификата.

Как установить SSL сертификат Ubuntu (Apache)

Мы будем использовать бесплатный сертификат Let’s Encrypt. Устанавливать мы будем с помощью Certbot, он же будет автоматически обновлять сертификат.
Добавим репозиторий:

sudo add-apt-repository ppa:certbot/certbot


Устанавливаем:

sudo apt install python-certbot-apache

Или если выбьет ошибку «Unable to locate package python-certbot-apache», то

sudo apt install -y certbot python3-certbot-apache


Для того чтобы разрешить трафик HTTPS, разрешим профиль Apache Full и удалим избыточный профиль Apache:

sudo ufw allow 'Apache Full'
sudo ufw delete allow 'Apache'


Проверим внесённые изменения:

sudo ufw status


Получаем SSL сертификат

sudo certbot --apache -d example.com -d www.example.com

Если всё прошло успешно, certbot спросит, как вы хотите настроить конфигурацию HTTPS.
Выбираем 1 или 2, я выбрал 2, так как хочу чтобы весь трафик редиректился на https.
Пробуем перезагрузить сайт, и посмотреть, доступен ли он с https:// и можете проверить свой сайт сервисом SSLLabs. Ваш сайт, в идеале, должен получить оценку «А» по итогам тестирования.
Тестирование может занять пару минут.


Проверяем автоматическое обновление сертификата

sudo certbot renew --dry-run

Если вы не видите каких-либо ошибок в результате выполнения этой команды, то всё в полном порядке.

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

Получить 100$ на счет в DigitalOcean.

Просмотров: 55

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

Ваш e-mail не будет опубликован. Имя и e-mail обязательны для заполнения.