Оригинальный пост – 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”