Перенос django проекта на сервер linux

Обновлено: 05.07.2024

Django - NGINX - это популярная и хорошо протестированная комбинация, используемая для развертывания веб-приложений в продакшене. В этом посте я объясню шаги, необходимые для развертывания вашего проекта Django на сервере с использованием Ubuntu 18.04.

Чтобы развернуть Django - NGINX на вашем сервере, выполните следующие простые шаги.

1. Установите необходимые пакеты, используя apt

Зачем вам нужен UWSGI ? Проще говоря, NGINX сам по себе не может запустить процесс Python для размещения вашего приложения, для этого вам понадобится так называемый сервер приложений, на котором будет размещен процесс Python, выполняющий ваш проект Django. NGINX и uWSGI будут «общаться» друг с другом по протоколу uwsgi.

2. Создайте каталоги для ваших статических и медиа файлов

Статические файлы - это файлы «не-python», необходимые для вашего проекта Django, например Javascript, CSS и изображения. Медиа-файлы - это файлы, загруженные пользователями вашего приложения. Не каждое приложение позволяет пользователям загружать файлы, но это очень распространенный сценарий. Django не будет обслуживать статические и медиа файлы самостоятельно. Мы будем использовать NGINX, чтобы работать с ними.

Прежде всего, вы должны создать каталоги. Здесь я предполагаю, что вы в настоящее время используете пользователя Ubuntu с домашним каталогом по умолчанию /home/ubuntu:

Вторая команда сделает пользователя с именем www-data владельцем каталога /home/ubuntu/media. www-data будет пользователем, выполняющим ваш процесс Python в uWSGI, и этот пользователь должен иметь возможность писать в каталог мультимедиа, чтобы правильно сохранять загруженные пользователем файлы.

3. Настройте свой проект Django и установите требования

Этот шаг действительно зависит от вашего конкретного приложения Django, для целей данного руководства я буду предполагать, что ваш проект Django установлен в каталоге / home/ubuntu/django_project/ со следующей структурой:

Также я предполагаю, что вы установили все свои зависимости Python, например, используя apt или pip.

Я всегда следую рекомендациям при запуске нового проекта Django, разбивая монолитный файл settings.py на разные файлы, по одному для каждой среды развертывания (local, test, production и т.д.).

В нашем случае Django будет использовать модуль project/settings/production.py для своих настроек. Здесь мы устанавливаем переменные STATIC_ROOT и MEDIA_ROOT для каталогов, которые мы создали на шаге 2:

4. Соберите статические файлы

Запустите следующую команду, чтобы собрать все статические файлы для вашего проекта Django:

Эта команда скопирует все статические файлы (Javascript, CSS, изображения) для всех ваших приложений Django в каталог STATIC_ROOT, настроенный в production.py . Например, /home/ubuntu/static .

5. Настройте uWSGI для размещения вашего проекта Django.

Создайте файл с именем django.ini в каталоге /etc/uwsgi/apps-enabled/. Содержимое файла должно быть примерно таким:

Перезапустите uWSGI с помощью:

Вы должны найти логи uWSGI в /var/log/uwsgi/apps/django.log. Поэтому вы можете проверить их, чтобы увидеть, правильно ли запущен процесс Python или есть проблемы.

6. Настройте NGINX для обслуживания вашего приложения

Создайте файл с именем django в каталоге /etc/nginx/sites-enabled/. Содержимое файла должно быть примерно таким:

Перезапустите NGINX с помощью:

7. Наслаждайтесь своим приложением Django

Направьте браузер на свой домен, и вы увидите приложение Django во всей его красе!

Наше развертывание мы разделим на два этапа:

  1. Установка и настройка среды Python и UWSGI.
  2. Настройка веб-сервера NGINX.

Рассмотрим эти процессы по шагам.

Python, Django и UWSGI

Устанавливаем необходимые пакеты:

apt-get install nginx uwsgi python3 uwsgi-plugin-python3 python3-pip python3-dev build-essential libssl-dev libffi-dev python3-setuptools

Устанавливаем пакеты для Python:

pip3 install virtualenv uwsgi django

Создаем директорию для хранения стачичных файлов (css, js, img):

mkdir -p /var/www/my_app/static /var/www/my_app/media

chown www-data.www-data /var/www/my_app/media

chown www-data.www-data /var/www/my_app/static

Копируем наше приложение в папку /var/www/my_app, структура должна получиться примерно такой:

Вносим изменения в конфигурационный файл нашего проекта:

  • ALLOWED_HOSTS — разрешенные доменные имена, на которых должен открываться наш сайт.
  • DATABASES — данные для подключения к базе данных. Подробнее, данная настройка описана ниже.

Запускаем команду для сбора всех статических файлов в нашем проекте (из корня проекта):

[uwsgi]
chdir = var/www/my_app
env = DJANGO_SETTINGS_MODULE=project.settings.production
wsgi-file = my_app/wsgi.py
workers = 1max-requests=5000
plugins=python3
processes = 5
threads = 2
master = true
die-on-term = true
socket = sedova.sock
chmod-socket = 660
vacuum = true
uid = www-data
gui = www-data

  • chdir — указываем директорию нашего проекта.
  • env — конфигурационный файл нашего приложения.
  • wsgi-file — относительный путь до файла wsgi.py нашего приложения.

Перезапускаем сервис uwsgi:

service uwsgi restart

Настройка Nginx

Создаем файл конфигурации для нашего приложения

Содержимое файла должно быть примерно следующим:

server listen 80;
server_tokens off;
server_name my_app my_app.domain.local;

location / include uwsgi_params;
uwsgi_pass unix:///run/uwsgi/app/sedova/socket;
>

location /static/ alias /var/www/my_app/static/;
>

location /media/ alias /var/www/my_app/media/;
>
>

systemctl restart nginx

Подключение к базе данных

Рассмотрим пример настройки подключения к СУБД MariaDB/MySQL. Нам необходимо будет настроить как сам сервер баз данных, так и фреймворк. В инструкции опишем полный процесс, начиная от установки СУБД.

MariaDB

Выполним установку и настройку сервера баз данных. Начнем с установки:

apt-get install mariadb-server

Разрешаем автозапуск СУБД:

systemctl enable mariadb

Зададим пароль для учетной записи mysql-root:

mysqladmin -u root password

Установка и запуск завершены. Перейдем к настройке.

Для Django важно, чтобы кодировка была UTF-8. Откроем конфигурационный файл клиента:

[mysql]
.
default-character-set = utf8

Аналогичную настройку выполняем в следующем файле:

[mysql]
.
default-character-set = utf8

Редактируем файл для настройки сервера:

Задаем значения для опций:

character-set-server = utf8
collation_server = utf8_unicode_ci

Для применения настроек перезапускаем сервис:

systemctl restart mariadb

Подготовка базы данных

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

Не забываем также настроить права доступа на базу.

Установка модуля для Python

Для возможности подключения к базе, мы должны установить клиента mysql на сервер. Для этого выполняем две команды:

apt-get install libmysqlclient-dev

pip3 install mysqlclient

Первая команда установит библиотеки, необходимые для установки mysqlclient через менеджер пакетов Python. Вторая, собственно, и установит клиента.

Настройка подключения

Откроем конфигурационный файл нашего приложения:

Данная настройка прописывается, как правило, по умолчанию и позволяет использовать базу sqlite3. Поменяем ее:

* в данном примере:

  • NAME — имя базы данных, к которой мы подключимся.
  • HOST — сервер баз данных.
  • USER — пользователь с привилегиями работы с базой данных.
  • PASSWORD — пароль для пользователя.

Делаем выборку

Для проверки настройки создадим select-запрос с нашей базе. Предположим, к таблице users. Пример кода будет таким:

  1. from django.db import connection
  2. cursor = connection.cursor()
  3. cursor.execute("SELECT * FROM users")
  4. print(cursor.fetchall())

В данном примере мы извлечем все содержимое таблицы users и выведем это на экран.

Не получается это сделать, прошу помощи. Что я делал:

Я установил разные python, postgresql и другие модули, которые были в разных инструкциях, по которым я пытался это сделать.

Я создал юзера postgresql, саму бд и познакомил их друг с другом

С помощью virtualevn создал окружение, активировал его, в нём установил `pip install django gunicorn psycopg2

Создал проект django-admin.py startproject myproject .

Копирнул с компа мой проект Django на Pycharm в этот созданный проект в 4-ом пункте с заменой файлов, когда спрашивало

Начать делать миграцию, но ./manage.py makemigrations и ./manage.py migrate не работало, появлялось это: /usr/bin/env: 'python\r': No such file or directory , но мне удалось сделать это с помощью python ./manage.py makemigrations и python ./manage.py migrate

Сервер запускается и вродё всё ок, но там у меня есть работа с БД и поэтому при заходе на сайт появляется такая писанина:

IntegrityError at / insert or update on table "webexample_data" violates foreign key constraint "webexample_data_user_id_9a591628_fk_auth_user_id" DETAIL: Key (user_id)=(1) is not present in table "auth_user". Request Method: GET Request URL: http://46.36.219.171:8000/ Django Version: 2.1 Exception Type: IntegrityError Exception Value: insert or update on table "webexample_data" violates foreign key constraint "webexample_data_user_id_9a591628_fk_auth_user_id" DETAIL: Key (user_id)=(1) is not present in table "auth_user". Exception Location: /root/webserver/venv/lib/python3.5/site-packages/django/db/backends/base/base.py in _commit, line 239 Python Executable: /root/webserver/venv/bin/python Python Version: 3.5.3 Python Path: ['/root/webserver', '/usr/lib/python35.zip', '/usr/lib/python3.5', '/usr/lib/python3.5/plat-x86_64-linux-gnu', '/usr/lib/python3.5/lib-dynload', '/root/webserver/venv/lib/python3.5/site-packages'] Server time: Чт, 9 Авг 2018 18:31:43 +0000

И ещё много всякого интересного. Тут я понял, что не хватает суперюзера и начал его создавать.

  1. Команда python ./manage.py createsuperuser посылает меня сюда фразой:

utility.execute() File "/root/webserver/venv/lib/python3.5/site-packages/django/core/management/init.py", line 375, in execute self.fetch_command(subcommand).run_from_argv(self.argv) File "/root/webserver/venv/lib/python3.5/site-packages/django/core/management/base.py", line 316, in run_from_argv self.execute(*args, **cmd_options) File "/root/webserver/venv/lib/python3.5/site-packages/django/contrib/auth/management/commands/createsuperuser.py", line 59, in execute return super().execute(*args, **options) File "/root/webserver/venv/lib/python3.5/site-packages/django/core/management/base.py", line 353, in execute output = self.handle(*args, **options) File "/root/webserver/venv/lib/python3.5/site-packages/django/contrib/auth/management/commands/createsuperuser.py", line 112, in handle username = self.get_input_data(self.username_field, input_msg, default_username) File "/root/webserver/venv/lib/python3.5/site-packages/django/contrib/auth/management/commands/createsuperuser.py", line 193, in get_input_data raw_value = input(message) UnicodeEncodeError: 'ascii' codec can't encode characters in position 0-2: ordinal not in range(128)

Кто-нибудь подскажите, какую магию нужно использовать, чтобы создать суперюзера? Или может быть я вообще всё не так делаю? Мне очень нужна помощь, я в отчаянии и мне нужна помощь великих умов stackoverflow.

Для выполнения данного руководства нужен предварительно настроенный сервер (Debian 7 или Ubuntu).

Кроме того, необходимо подготовить сервер к размещению приложений Django, настроив сервер баз данных, веб-сервер и виртуальную среду (virtualenv). Об этом можно прочесть здесь.

1: Обновление пакетов

Прежде чем приступить к развёртыванию, нужно обновить список пакетов системы. Подключитесь к VPS и запустите:

sudo apt-get update
sudo apt-get upgrade

Первая команда загрузит все доступные обновления для пакетов, управляемых при помощи apt-get. Вторая команда установит обновления. После запуска этих команд система попросит подтвердить установку загруженных пакетов; для этого нажмите y и enter.

2: Настройка virtualenv

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

Виртуальное окружение, или virtualenv, необходимо для хранения индивидуальных пакетов Python и файлов проекта.

Примечание: Если вы не хотите использовать virtualenv, просто создайте каталог для проекта и перейдите к следующему разделу.

Чтобы создать виртуальное окружение, запустите следующую команду, указав путь к своему проекту:

Теперь нужно включить virtualenv, а затем установить в окружение Django и другие пакеты при помощи pip. Для этого используйте команды:

source /opt/myproject/bin/activate
pip install django

После этого нужно создать базу данных для проекта.

3: Создание БД

Примечание: В данном руководстве используется PostgreSQL. Если вы используете другую СУБД, обратитесь к её документации.

Чтобы создать БД, запустите PostgreSQL:

sudo su - postgres

Командная строка терминала покажет:

Запустите следующую команду, заменив условное имя БД своим именем:

Затем создайте пользователя для этой БД:

После этого программа запросит некоторые данные: имя нового пользователя, пароль и его подтверждение и т.п. На последние три вопроса нужно ответить n и нажать enter; это ограничит права пользователя. Откройте интерфейс командной строки PostgreSQL:

Затем передайте новому пользователю права на БД:

GRANT ALL PRIVILEGES ON DATABASE mydb TO myuser;

Теперь БД готова.

4: Настройка VPS

Создайте новый конфигурационный файл для сайта.

Примечание: В руководстве используется веб-сервер NGINX. Если вы используете другой веб-сервер, обратитесь за инструкциями к его документации.

Запустите следующую команду, которая создаст конфигурационный файл и откроет его для редактирования. Замените условное имя проекта myproject именем своего проекта:

sudo nano /etc/nginx/sites-available/myproject

Затем внесите в файл такой код:

server server_name yourdomainorip.com;
access_log off;
location /static/ alias /opt/myenv/static/;
>
location / proxy_pass http://127.0.0.1:8001;
proxy_set_header X-Forwarded-Host $server_name;
proxy_set_header X-Real-IP $remote_addr;
add_header P3P 'CP="ALL DSP COR PSAa PSDa OUR NOR ONL UNI COM NAV"';
>
>

Теперь нужно создать символьную ссылку в каталоге /etc/nginx/sites-enabled, указывающую на этот конфигурационный файл. Так веб-сервер NGINX распознаёт включенные сайты. Перейдите в этот каталог:

А затем запустите:

sudo ln -s ../sites-available/myproject

sudo service nginx restart

Во время перезагрузки может возникнуть следующая ошибка:

server_names_hash, you should increase server_names_hash_bucket_size: 32

Теперь можно переместить файлы проекта на сервер.

5: Перемещение локального проекта Django на сервер

Здесь есть несколько вариантов: FTP, SFTP, SCP, Git, SVN; рассмотрим использование Git для перемещения локального проекта на виртуальный выделенный сервер.

Найдите каталог, в котором находится virtualenv (или каталог, в котором размещён проект) и откройте его:

В нём создайте каталог для хранения файлов проекта:

Перейдите в новый каталог:

Если на экране не появилось файлов, значит, все файлы отправлены. Подключитесь к серверу и установите Git.

sudo apt-get install git

На все вопросы программы нажмите yes и enter. После установки Git переместите файлы проекта в созданный ранее каталог:

При использовании Github или Bitbucket для размещения Git используйте кнопку clone.

Примечание: Эта команда обязательно должна заканчиваться символом точки. В противном случае Git создаст каталог с репозиторием в каталоге проекта.

Вместо Git для передачи файлов в каталог проекта можно использовать FTP или другой протокол обмена.

6: Установка и настройка сервера приложений

Примечание: Если вы выполнили все предварительные требования, пропустите этот раздел.

Теперь нужно установить сервер приложений и настроить его для прослушивания порта 8001. В руководстве используется Gunicorn. Чтобы установить этот сервер, включите виртуальное окружение:

А затем введите:

pip install gunicorn

После завершения установки направьте запросы к домену или ip на порт 8001:

Затем нажмите ctrl + z and и введите bg, чтобы перевести процесс в фоновый режим (это опционально).

Примечание: Подробнее о настройке Gunicorn можно прочитать здесь.

7: Настройка приложения

Теперь нужно настроить производство приложения. Для этого нужно отредактировать файл settings.py приложения Django.

sudo nano /opt/myproject/myproject/settings.py

Примечание: Путь к этому файлу может отличаться; в случае необходимости отредактируйте путь.

В этом файле установите следующее значение для опции DEBUG:

Эта настройка будет выводить пользователям страницы ошибок 404 и 500 вместо станиц с отладочной информацией.

Затем отредактируйте настройки БД, указав имя БД, имя пользователя и пароль:

Деплой Django

Где я арендую высококачественные VDS/VPS для своих проектов по низким ценам? Конечно же здесь!

Приветствую! В этой статье я приведу подробную инструкцию по деплою (развертыванию) проекта Django. Django - это свободный фреймворк для веб-приложений на языке Python, использующий шаблон проектирования MVC. Весь процесс я буду описывать на примере сервера с установленной операционной системой Ubuntu 20.04. Вы же можете использовать любую другую ОС, например, Debian. Алгоритм будет схожим.

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

Инструкция по деплою приложения Django

1. Обновляем пакеты:

2. Устанавливаем необходимый для работы софт:

  • vim - мощный текстовый редактор (можно обойтись без него, так как Ubuntu имеет другие встроенные текстовые редакторы, например, nano);
  • mosh - аналог ssh, но только более быстрый (также можно обойтись без него, но с ним работать комфортнее);
  • tmux - терминальный оконный менеджер и мультиплексор, позволяющий использовать несколько терминалов в одном. Необязательный пакет;
  • htop - предназначен для вывода на терминал списка запущенных процессов и информации о них. Более функциональный аналог top;
  • git - распределённая система управления версиями;
  • curl - программа командной строки, позволяющая взаимодействовать с множеством различных серверов по множеству различных протоколов с синтаксисом URL;
  • wget - свободная неинтерактивная консольная программа для загрузки файлов по сети;
  • unzip и zip - утилиты для работы с zip-архивами;
  • gcc - набор компиляторов для различных языков программирования;
  • build-essential - это метапакет, в котором содержатся ссылки на необходимые пакеты;
  • make - утилита, автоматизирующая процесс преобразования файлов из одной формы в другую (компиляция).

3. Обновляем локали (копируем все команды вместе и вставляем в терминал):

В первом открывшемся окне выбираем пункт ru_RU.UTF-8 UTF-8 и жмем Enter:

Настройка локали Ubuntu

Во втором открывшемся окне выбираем пункт ru-RU.UTF-8 и также жмем Enter:

Настройка локали Ubuntu-20.04

4. Теперь при желании можно переподключиться к серверу через Mosh:

5. Устанавливаем необходимые пакеты и библиотеки:

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

6. Устанавливаем Oh-My-ZSH:

Oh-My-ZSH - это это фреймворк с открытым исходным кодом, предназначенный для управления конфигурацией оболочки ZSH. Проще говоря, это более современная и привлекательная командная оболочка.

Также я обычно настраиваю алиас cls для очистки терминала. Для этого нужно открыть конфигурационный файл ZSH:

В самом конце файла вставить строчку, сохранить файл:

И перезагрузить этот файл:

Теперь терминал можно очищать по команде cls. Не знаю как вам, а для меня это очень удобно

Также установим ZSH дефолтным шеллом:

7. Установка Python

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

Актуальная версия Python

Открывшеюся страницу прокручиваем в самый них до раздела Files и копируем ссылку на архив:

На момент написания статьи актуальная версия - Python 3.8.3. Ссылка на архив имеет следующий вид:

Убедимся, что находимся в домашней директории (/home/hostgeek). Hostgeek - это папка с именем моего пользователя. У вас она будет иметь другое название. Проверить текущий путь можно командой:

Если находимся не в этой папке, то перейдем в нее:

Скачиваем архив Python в эту папку:

Переходим в распакованную папку:

Запускаем сборку (цифра 1 означает количество ядер на сервере, вы ставите свою цифру):

Этот процесс довольно-таки долгий и длится около 15 минут.

Выполним установку двоичных файлов Python:

Отлично, Python установлен. Теперь проапгрейдим pip (пакетный менеджер Python):

Вернемся на папку выше (в папку /home/hostgeek):

И удалим скачанный архив Python и распакованную папку:

И наконец-то проверим корректность установки Python, запустив его командой:

Как видим, все работает:

Запуск Python 3

Для выхода из Python введем команду:

8. Создадим директорию проекта

В домашней папке (/home/hostgeek) создадим папку под наши проекты:

Перейдем в эту папку:

Здесь создадим папку под конкретный проект. В моем случае это будет парсер сайтов:

Перейдем в эту папку:

В этой папке создадим виртуальное окружение (env - название окружения, можно задавать любым):

Активируем виртуальное окружение:

Если нужно будет выйти из виртуального окружения, то используйте команду деактивации - deactivate

Еще раз проапгрейдим pip:

9. Устанавливаем Django

Для установки вводим команду:

Выполним команду, к оторая позволяет создать текстовый документ в котором перечислены все установленные и необходимые для работы Python приложения программные пакеты:

Можно просмотреть содержимое этого файла:

Для закрытия файла жмем Ctrl + X.

10. Запуск проекта

На этом этапе можно вытаскивать какой-либо проект с Гитхаба и запускать его. Но я покажу на примере создания чистого проекта с нуля.

Создаем новый проект (siteparser - имя проекта, вы задаете свое):

Перейдем в папку созданного проекта:

Создадим здесь первое приложение (avitoparser - имя приложения, вы задаете свое):

Откроем файл настроек Django - settings.py, который находится по адресу /home/hostgeek/myapps/parser/siteparser/siteparser. Мы сейчас находимся в папке /home/hostgeek/myapps/parser/siteparser, поэтому для открытия файла выполним команду:

В ALLOWED_HOSTS пропишем IP-адрес нашего сервера, а в INSTALLED_APPS - наше созданное приложение и сохраним файл:

settings py django

Можем запустить сервер командой (IP-адрес вставляете свой):

Для остановки сервера воспользуйтесь комбинацией клавиш Ctrl + C

11. Установка Gunicorn

Для установки выполним команду:

Зафризим его в том самом файле requirements.txt:

Создадим конфигурационный файл Gunicorn в папке /home/hostgeek/ myapps/parser/siteparser:

Вставим и сохраним в нем следующий код:

workers = 3 - это количество ядер сервера умноженное на 2 плюс 1 (1 ядро * 2 + 1 = 3). В последней строчке siteparser соответствует имени приложения Django, которое лежит в папке parser.

Перейдем в папку /home/hostgeek/myapps/parser/ и создадим в ней папку bin:

В папке bin создадим файл start_gunicorn.sh (это bash-скрипт, который будет запускать Gunicorn):

Добавим и сохраним в этом файле следующее содержимое:

siteparser.wsgi соответствует имени Django-приложения, которое лежит в папке parser.

Выдадим права на выполнение этого файла:

12. Настройка Nginx

Откроем конфиг Nginx:

Удалим из него все закомментированные строчки, а также кусок кода:

Вместо него вставим следующий код:

Сохраним файл и перезапустим Nginx:

Теперь, если в браузере перейти по IP-адресу http://45.82.178.214 можно наблюдать надпись "502 Bad Gateway".

Запустим наш скрипт:

Главная страница Django

13. Настройка Supervisor

Supervisor - это система для управления сервисами. Нужна она для автоматического перезапуска Gunicorn, если он "упадет".

Создадим конфиг в папке:

Имя конфига соответствует имени Djando-проекта, который лежит в папке parser.

Вставим и сохраним в нем следующий код:

Откроем конфигурационный файл Django:

В ALLOWED_HOSTS добавим локальный IP (127.0.0.1) и сохраним файл:

IP адреса Django

Для активизации этих изменений нужно перезапустить Gunicorn. Для этого вводим команду:

Жмем F4 (Filter) и вводим слово gunicorn. Так мы из общей массы отсортируем только процессы Gunicorn. Жмем на клавиатуре стрелку вниз и "киляем" все процессы поочередным нажатием клавиш F9 - 1 (SIGHUP) - Enter. Как видно, после "убийства" процессов они тут же запускаются автоматически, значит все работает правильно

Процессы Gunicorn

Выходим из htop нажатием клавиши F10.

Эта статья получилась уже довольно-таки объемной, поэтому подключение базы данных, привязка доменного имени, создание SSL-сертификата, настройка редиректов с "http" на "https", с "www" на "без www" и прочих, установка и настройка Memcached, а также установка и настройка FTP-сервера будут рассмотрены в отдельных статьях.

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

Читайте также: