Цель этой статьи: Развернуть приложения Django на сервере centos7.x с помощью nginx и uwsgi (или gunicorn).
0. Окружающая среда
Сервер, используемый в этой статье, представляет собой 64-разрядный сервер Centos7.0 от Tencent Cloud, другие Linux аналогичны, и некоторые команды установки запрашиваются самостоятельно.
Только что полученный сервер регистрируется как root.Сначала мы создаем нового пользователя и назначаем права.
useradd -m username # 新建用户
passwd username # 修改密码
usermod -a -G adm username
usermod -a -G sudo username
exit # 分配权限后退出
Новый пользователь вошел в систему после выхода из системы.
Затем установить различные компоненты, такие как python3, mysql и т.д. В начале были всякие проблемы, а затем привык
@小小ХоизДайте Python3.6 поработать на Centos7.x какое-то время~Сценарий одним щелчком мыши здесь успешно установлен.wget https://raw.githubusercontent.com/LunacyZeus/Python3.6-for-Centos7.0/master/install.sh && sh install.sh
Протестируйте установку pip
python3 -m pip install --upgrade pip
python3 -m pip install requests
Об ошибках не сообщается, py3 установлен
1. Приложение Джанго
Загрузите код со склада, локальный каталог /home/username/myblog, здесь предполагается, что папка приложения django называется myblog, а база данных приложения — mysql.
git clone <yourcode>
cd myblog
# 安装虚拟环境
python3 -m pip install virtualenv
virtualenv venv
. venv/bin/activate
# 安装依赖文件
pip install -r requirements.txt
# 静态文件处理
python manage.py collectstatic
с последующей миграцией базы данных
Установил mysql сначала поставил пароль
mysql -u root -p
> set password for 'root'@'localhost' =password('password');
И настроить удаленное подключение
> grant all privileges on *.* to root@'%'identified by 'password';
Затем создайте новое имя базы данных, используемое в django, измените пароль в settings.py, после чего вы сможете выполнить миграцию базы данных и т. д.
python manage.py migrate
python manage.py createsuperuser
....
python manage.py runserver 0.0.0.0:8001
Затем откройте общедоступную сеть сервера для просмотра, он может быть загружен и работает, но статические файлы еще не загружены.
2.0 uwsgi & nginx
О роли nginx и uwsgi:Какая связь между nginx uwsgi wsgi django и этими вещами?
Процитируйте это здесь.
1. Во-первых, nginx — это внешний сервисный интерфейс, и внешние браузеры обращаются к nginx через url.
2. nginx получает HTTP-запрос, отправленный браузером, анализирует пакет и URL-адрес. Если это запрос статического файла, он напрямую обращается к каталогу статических файлов, настроенному пользователем для nginx, и напрямую возвращает статический файл, запрошенный пользователем. пользователя. Если это не статический файл, а динамический запрос, то nginx пересылает запрос в uwsgi. После того, как uwsgi получает запрос, он обрабатывает пакет в формат, приемлемый для wsgi, и отправляет его в wsgi, который вызывает определенный файл приложения в соответствии с запросом, функция определенного файла, после окончательной обработки возвращаемое значение будет снова передано в wsgi, wsgi упакует возвращаемое значение в формат, который может получить uwsgi, и uwsgi будет получить wsgi Отправленный запрос перенаправляется в nginx, и nginx в конечном итоге возвращает браузеру возвращаемое значение.
3. Чтобы знать, что первый уровень nginx не обязателен, uwsgi может завершить весь процесс взаимодействия с браузером, но необходимо учитывать некоторые ситуации
- Из соображений безопасности браузер не может получить прямой доступ к программе, но через nginx nginx открывает только определенный интерфейс, а uwsgi сам по себе является интерфейсом интрасети, поэтому персонал по эксплуатации и обслуживанию может добавлять ограничения безопасности на nginx для защиты программы. , эффект.
- Проблема балансировки нагрузки, одного uwsgi, вероятно, недостаточно, даже если открыто несколько заданий, в конце концов, процессор и память машины ограничены, а nginx выступает в качестве прокси, один nginx может проксировать несколько uwsgi, чтобы завершить загрузку uwsgi. сбалансированный.
- Для проблемы статических файлов нерационально использовать django или uwsgi для обработки статических файлов, а их обработка файлов не так хороша, как у nginx, поэтому вся обработка статических файлов выполняется непосредственно nginx. вообще не проходить через uwsgi и все, что за ним стоит.
принцип:
the web client <-> the web server(nginx) <-> the socket <-> uwsgi <-> Django
2.1 uwsgi
Сначала установите и настройте uwsgi
(venv) pip install uwsgi
Проверьте, работает ли это:
# test.py
def application(env, start_response):
start_response('200 OK', [('Content-Type','text/html')])
return b"Hello World"
бегать
uwsgi --http :8000 --wsgi-file test.py
Откройте
the web client <-> uWSGI <-> Python
Затем создайте новый файл uwsgi.ini в каталоге проекта.
# vim uwsgi.ini
[uwsgi]
# Django-related settings
socket = /tmp/www.wangzhy.com.socket
# the base directory (full path)
chdir = /home/username/myblog
# Django s wsgi file
module = blog.wsgi
# process-related settings
# master
master = true
# maximum number of worker processes
processes = 4
# ... with appropriate permissions - may be needed
# chmod-socket = 664
# clear environment on exit
vacuum = true
Документация по настройке параметров находится здесь:Быстрый старт для приложений Python/WSGI
Затем запустите:
uwsgi --ini uwsgi.ini
# 后台运行
# uwsgi --ini mysite_uwsgi.ini --logto mysite.log &
Откройте , чтобы получить доступ к вашей веб-странице.
2.2 nginx
установка nginx для centos:Установите Nginx на CentOS 7
sudo rpm -Uvh http://nginx.org/packages/centos/7/noarch/RPMS/nginx-release-centos-7-0.el7.ngx.noarch.rpm
yum install nginx
# 开启
systemctl start nginx.service
Посетите ip, и вы увидите изображение выше, и установка прошла успешно.
Создайте новый blog.conf в /etc/nginx/conf.d.
server {
listen 80;
server_name 127.0.0.1 <yoursite.com>;
charset utf-8;
client_max_body_size 75M;
# media文件夹
location /media {
alias /home/username/myblog/media;
}
# static文件夹
location /static {
alias /home/username/myblog/static;
}
location / {
include uwsgi_params;
uwsgi_pass unix:/tmp/www.wangzhy.com.socket;
}
}
потом
nginx -t # 检查文件
service nginx restart # 重启nginx
Затем включите службу uswgi, и вы сможете получить доступ к сайту.
uwsgi --ini uwsgi.ini