Рубрики
Без рубрики

Развертывание Джанго

Оригинальный пост – https://www.codingpaths.com/django/deploy-django/ Развертывание Джанго В этом б … Теги с Джанго, Python, MySQL.

Оригинальный пост – https://www.codingpaths.com/django/deploy-django/

В этом блоге мы узнаем, как развернуть приложение Django с UWSGI и NGINX на Centos’7. Django – самая популярная основанная на основе Python Backend с целью быстрого развития веб-разработки. Перед установкой чего-либо я рекомендую прочитать мой предыдущий пост, где я обсуждал об первоначальном настройке сервера с помощью клавиш SSH.

1. Установка предварительных условий

Установка Python3.6.

Сначала установите последние пакеты из EPEL и RPM. EPEL (дополнительные пакеты для предприятия Linux) – это репозиторий с открытым исходным кодом, который содержит последние пакеты для распределений Red Hat Linux. RPM также является системой управления пакетом с открытым исходным кодом из Red Hat. После всего этого , давайте устанавливать Python3 –

sudo yum install -y epel-release
sudo yum install -y https://centos7.iuscommunity.org/ius-release.rpm
sudo yum update
sudo yum install -y python36u python36u-libs python36u-devel python36u-pip python-devel

Обновление PIP и установка VirtualenV

PIP – самый популярный установщик Python Package. Виртуальные среды используются для отделения различных версий любой упаковки для разных проектов.

sudo pip3.6 install --upgrade pip
sudo pip install virtualenv virtualenvwrapper

Настройка оболочки

Мы будем использовать DV Directory для проведения всех наших виртуальных сред. Это можно настроить в .bashrc файл.

echo "export WORKON_HOME=~/Env" >> ~/.bashrc
echo "source /usr/bin/virtualenvwrapper.sh" >> ~/.bashrc

Теперь открыть /usr/bin/virtualenvwrapper.sh либо Vim или Nano. Найти строку –

VIRTUALENVWRAPPER_PYTHON="$(command \which python)"

и заменить python с python3.6 как –

VIRTUALENVWRAPPER_PYTHON="$(command \which python3.6)"

Теперь давайте отразим эти изменения –

source ~/.bashrc

2. Настройка проекта Django

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

mkvirtualenv env_1

Окружающая среда ENV_1 автоматически активируется. То же самое можно проверить –

which pip
# Output: ~/Env/env_1/bin/pip

Копирование проекта Django от местного в удаленный

С тех пор мы активировали нашу виртуальную ENV, теперь мы скопируем наш проект Django на удаленный сервер, используя SCP. Если вы загрузили его на GitHub, просто установите Git через yum, а затем Git клонировать проект. Но прежде чем делать это, давайте схватим все требования проекта. Если ваш проект уже содержит файл требований, то вы можете пропустить эту часть. «CD» в каталог вашего проекта и после активации виртуального ENV в локальной машине используйте следующую команду для вычисления требований к файлу требований.

pip freeze > requirements.txt

Теперь, чтобы скопировать проект, используйте следующую команду в локальном терминале. Не забудьте поставить свой IP и user_name настроен на предыдущий пост. Напишите полный путь вашего проекта Django от root в локальной машине. Это будет скопировать проект в домашнем каталоге сервера.

scp -r /path/to/project user_name@your_ip_here:~

Теперь подключитесь к серверу и активируйте виртуальную ENV.

ssh user_name@your_ip_here
workon env_1

Давайте установим все требования к проекту. Используйте путь к файлу требований.

pip install -r /path/to/requirements.txt

Установка MySQL из RPM

sudo rpm -ivh https://dev.mysql.com/get/mysql80-community-release-el7-1.noarch.rpm

Проверьте, был ли включен ли MySQL REPO –

sudo yum repolist all | grep mysql | grep enabled
# Output : enabled

Установить и включить MySQL –

sudo yum -y install mysql-community-server
sudo systemctl start mysqld
sudo systemctl enable mysqld
sudo systemctl status mysqld

Скопируйте пароль MySQL временного корневого пароля из команды, приведенной ниже, и вставьте это, в то время как безопасная установка MySQL. Измените пароль root и нажмите Enter для действий по умолчанию.

cat /var/log/mysqld.log | grep -i 'temporary password'
mysql_secure_installation

Мы успешно установили MySQL и теперь нам нужна база данных для запуска нашего проекта. Сначала откройте интерфейс MySQL и введите пароль root –

mysql -u root -p

Теперь в MySQL создайте базу данных –

mysql> CREATE DATABASE first_db;
mysql> SHOW DATABASES;
mysql> exit

После этого нам нужно установить клиент для общения с MySQL –

sudo yum install -y mysql-connector-python.x86_64 mysql-community-devel.x86_64 mysql-cluster-community-client.x86_64 mysql-shell.x86_64 mysql-router.x86_64 gcc
pip install mysqlclient # inside the virtual environment

Изменение настроек .py Файл

Со всем установленным, давайте изменим некоторые настройки для проекта –

sudo nano ~/project_name/project_name/settings.py

Добавьте следующую строку в последний из файла. Поскольку мы будем использовать NGINX, чтобы развернуть приложение, эта строка говорит Django разместить наши статические файлы в каталог «Static». Это помогает Nginx легко служить этим статическим файлам.

STATIC_ROOT = os.path.join(BASE_DIR, "static/")

Не забудьте изменить конфигурации базы данных по умолчанию для –

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql',
        'NAME': 'first_db',
        'USER': 'root',
        'PASSWORD': 'your-root-password',
        'HOST': 'localhost',
        'PORT': '',
    }
}

А также добавьте свой IP в разрешенные хосты –

ALLOWED_HOSTS = ['your_ip_here']

Открытие порт 8000.

sudo firewall-cmd --permanent --add-service=http
sudo firewall-cmd --permanent --add-port=8000/tcp
sudo firewall-cmd --complete-reload
sudo firewall-cmd --list-all

Запуск приложения

Во-первых, вымойте начальные миграции и удалите базу данных SQLite. «CD» в каталог вашего проекта и используйте следующие команды –

find . -path "*/migrations/*.py" -not -name "__init__.py" -delete
find . -path "*/migrations/*.pyc"  -delete
rm -f db.sqlite3

Запустите миграции, чтобы синхронизировать с базой данных –

python manage.py collectstatic
python manage.py makemigrations
python manage.py migrate

Итак, наконец, мы сможем запустить сервер и увидеть приложение доступным в глобальном масштабе –

python manage.py runserver 0.0.0.0:8000

Перейдите в веб-браузер и введите your_ip: 8000, чтобы получить доступ к приложению Django.

3. Настройка uwsgi и nginx

Настройка UWSGI глобально

Храните все файлы конфигурации на/etc/uwsgi/сайты. Вы должны использовать имя вашего проекта для всех конфигураций –

sudo pip install uwsgi
sudo mkdir -p /etc/uwsgi/sites
cd /etc/uwsgi/sites
sudo nano project_name.ini

Добавьте следующие строки в файл .ini. Не забудьте использовать ваш проект и имя пользователя.

[uwsgi]
project = project_name
username = user_name
base = /home/%(username)

chdir = %(base)/%(project)
home = %(base)/Env/env_1
module = %(project).wsgi:application

master = true
processes = 5

uid = %(username)
socket = /run/uwsgi/%(project).sock
chown-socket = %(username):nginx
chmod-socket = 660
vacuum = true

Ctrl + X Чтобы выйти и нажмите Y, чтобы сохранить изменения. База и дом содержат полный путь для домашнего каталога и виртуальной среды соответственно. Мы создали главный процесс для загрузки нашего сервера приложений. Здесь мы использовали сокет Unix. Этот сокет использует протокол uwsgi, который помогает nginx отменить прокси.

sudo nano /etc/systemd/system/uwsgi.service

Добавьте следующие строки. Не забудьте использовать имя пользователя в ExecstartPre от раздела службы.

[Unit]
Description=uWSGI Emperor service

[Service]
ExecStartPre=/usr/bin/bash -c 'mkdir -p /run/uwsgi; chown user_name:nginx /run/uwsgi'
ExecStart=/usr/bin/uwsgi --emperor /etc/uwsgi/sites
Restart=always
KillSignal=SIGQUIT
Type=notify
NotifyAccess=all

[Install]
WantedBy=multi-user.target

Раздел [Unit] описывает наш сервис. [Сервис] раздел управляет различными приложениями. [Установить] Раздел «Раздел« Многопользовательское состояние ».

Настройка nginx.

Установка Nginx –

sudo yum -y install nginx
sudo nano /etc/nginx/nginx.conf

Добавьте следующие строки. Не забудьте использовать ваше имя пользователя и имя проекта в root и uwsgi_pass.

server {
    listen 8000;
    server_name localhost;

    location = favicon.ico { access_log off; log_not_found off; }
    location /static/ {
        root /home/user_name/project_name;
    }

    location / {
        include uwsgi_params;
        uwsgi_pass unix:/run/uwsgi/project_name.sock;
    }
}

Выше мы настроили блок сервера, с открытым портом для прослушивания. Мы также указываем статическое местоположение файла и передали весь трафик в сокет Unix. Убедитесь, что синтаксис файла Nginx является правильным и изменение разрешений пользователя.

sudo nginx -t
sudo usermod -a -G user_name nginx
chmod 710 /home/user_name

Запустите и включите NGINX и UWSGI.

sudo systemctl start nginx
sudo systemctl start uwsgi
sudo systemctl enable nginx
sudo systemctl enable uwsgi

Теперь вы можете напрямую получить доступ к приложению Django от IP с открытым портом. Спасибо за прочтение!

Оригинал: “https://dev.to/sayam753/deploy-django-4k0d”