Python+Django+Nginx+Uwsgi(史上最全步骤)

步骤:

Python安装
第一步安装Python
(很多购买的服务器linux系统中自带python2和python3,我是直接使用自带的python3.5版本的)
如果系统中没有,则自己安装,如下:
1.下载
  wget https://www.python.org/ftp/python/3.6.0/Python-3.6.0a1.tar.xz

2.解压
  tar xvf Python-3.6.0a1.tar.xz

3.进入目录,添加配置
进入 Python-3.6.0a1 目录中:cd Python-3.6.0a1
添加配置:./configure –prefix=/usr/local/python3.6
注意:/usr/local/python3.6 为python的安装目录

4.编辑安装(切换成root用户执行:sudo -s)
请依次执行以下命令:
make && make install

5.测试
  输入 python3
  这里写图片描述

说明安装成功
  输入ctrl + d退出
  python3源码编译自带pip3

6、如果不是 python3.6版本的,则需要更改下默认连接
linux系统默认指定连接是在 /usr/bin/python
需要将原有的指定连接文件删掉后重新指定:
cd /usr/bin
rm -rf python
重新指定连接:
ln -s /usr/local/bin/python3.6 /usr/bin/python

7、查看 pip3 是否指定到python3.6中
pip3 -V
若没有指定需改变默认连接
linux系统默认指定连接是在 /usr/bin/pip3
需要将原有的指定连接文件删掉后重新指定:
cd /usr/bin
rm -rf pip3
重新指定连接:
ln -s /usr/local/bin/python3.6/bin /usr/bin/pip3

uwsgi安装
1、安装
pip3 install uwsgi

2、测试uwsgi
在你的同项目名目录中写一个test.py
执行:vim test.py
填写如下内容:

python2写法:
# test.py
def application(env, start_response):
    start_response('200 OK', [('Content-Type','text/html')])
    return "Hello World"

python3写法:(我用的是这个)
# test.py
def application(env, start_response):
    start_response('200 OK', [('Content-Type','text/html')])
    return [b"Hello World"]

3、然后执行shell命令:
uwsgi –http :8001 –wsgi-file test.py

4、访问网页:
http://115.159.214.215:8001/
看在网页上是否有Hello World
注意IP地址写你自己的主机地址,如在本地请写127.0.0.1

Django安装
1、在 ubuntu中安装 Django
1、首先要先安装pip3
sudo apt install python3-pip
2、使用pip安装Django
pip3 install Django==1.8.9
3、输入命令:python3 -m django –version 来查看Django是否安装成功

2、在ubuntu中创建一个Django项目
创建Django项目:
django-admin.py startproject 项目名(mysite)
创建项目中的static目录:
cd mysite
mkdir static

3、启动Django项目
python3 manage.py runserver 0.0.0.0:8000
选择一个浏览器输入:http://115.159.214.215:8000/
注意:IP地址换成自己的主机IP
这里写图片描述

4、创建app(做项目时使用,此时该步骤忽略)
python3 manage.py startapp app名称

5、models建表命令(做项目时使用,此时该步骤忽略)
python3 manage.py makemigrations
python3 manage.py migrate

6、配置django,请保证你的django程序已经关闭
编写django_wsgi.py文件,将其放在与文件manage.py同一个目录下
注意: 编写文件时需要注意语句os.environ.setdefault。比如,如果你的项目为mysite,则你的语句应该是 os.environ.setdefault(“DJANGO_SETTINGS_MODULE”, “mysite.settings”)
a、进入项目文件夹中:cd mysite
b、编写django_wsgi.py文件:vim django_wsgi.py
写入下面内容:

(python2的写法)
#!/usr/bin/env python
# coding: utf-8

import os
import sys

# 将系统的编码设置为UTF8
reload(sys)
sys.setdefaultencoding('utf8')

os.environ.setdefault("DJANGO_SETTINGS_MODULE", "mysite.settings")

from django.core.handlers.wsgi import WSGIHandler
application = WSGIHandler()

(python3的写法)这里我使用的是该写法,由于用的是python3,所以不需要指定字符集
import os

os.environ.setdefault("DJANGO_SETTINGS_MODULE", "mysite.settings")

from django.core.wsgi import get_wsgi_application
application = get_wsgi_application()

连接django和uwsgi,实现简单的WEB服务器
我们假设你的Django项目的地址是/home/ubuntu/mysite
然后,进入项目目录下 cd /home/ubuntu/mysite,就可以执行以下命令:
uwsgi –http :8000 –chdir /home/ubuntu/mysite –module django_wsgi
这样,你就可以在浏览器中访问你的Django程序了。
选择一个浏览器输入:http://115.159.214.215:8000/
注意:IP地址换成自己的主机IP
所有的请求都是经过uwsgi传递给Django程序的界面展示与django自启的时候一样,如下:
这里写图片描述

Nginx安装
1、安装
sudo apt-get install nginx

2、查看nginx版本
-v 显示 nginx 的版本:nginx -v
-V 显示 nginx 的版本,编译器版本和配置参数:nginx -V

3、测试是否已经成功安装好nginx
a、启动Nginx
/etc/init.d/nginx start #启动
/etc/init.d/nginx stop #关闭
/etc/init.d/nginx restart #重启
b、启动nginx后,在浏览器中访问自己的主机IP:
http://115.159.214.215/
或者 http://115.159.214.215:80
可看到如下界面表示成功安装:

实现Nginx与uWSGI的连接
为了实现Nginx与uWSGI的连接,两者之间将采用soket来通讯方式。
在本节中,我们将使用uWSGI配置文件的方式来改进uWSGI的启动方式。
假定你的项目目录是 /home/ubuntu/mysite
我们将要让Nginx采用8077端口与uWSGI通讯,请确保此端口没有被其它程序采用。
注意,请确定你在上面步骤中 django_wsgi.py 文件已经存在了。
新建一个XML文件:djangochina_socket.xml
将它放在你的项目目录下,如:/home/ubuntu/mysite
写入下面内容:(我将两段配置都写入了)

<!-- 若以socket方式访问 -->
<uwsgi>
    <socket>:8077</socket>
    <chdir>/home/ubuntu/mysite</chdir>
    <module>django_wsgi</module>
    <processes>4</processes> <!-- 进程数 --> 
    <daemonize>uwsgi.log</daemonize>
</uwsgi>

<!-- 若以http方式访问 -->
<uwsgi>
    <http>:8077</http>
    <chdir>/home/ubuntu/mysite</chdir>
    <module>django_wsgi</module>
    <processes>4</processes> <!-- 进程数 -->
    <daemonize>uwsgi.log</daemonize>
</uwsgi>

在上面的配置中,我们使用 uwsgi.log 来记录日志,开启4个进程来处理请求。
这样,我们就配置好uWSGI了。

配置Nginx
我们假设你将会把Nginx程序日志放到你的目录 /var/log/nginx 下,请确保该目录存在。
我们假设你的Django的static目录是 /home/ubuntu/mysite/static
media目录是 /home/ubuntu/mysite/media
请确保这些目录存在。
我们假设你的域名是 www.you.com (在调试时你可以设置成你的机器IP)
我们假设你的域名端口是 80(在调试时你可以设置一些特殊端口如 8070)
基于上面的假设,我们为 /etc/nginx/nginx.conf 添加以下配置:
在http{…}中的最后一行添加:

server {

        listen   80;
        server_name 115.159.214.215;
        access_log /var/log/nginx/access.log;
        error_log /var/log/nginx/error.log;

        #charset koi8-r;

        #access_log  logs/host.access.log  main;

        location / {
         include             /etc/nginx/uwsgi_params;
         uwsgi_pass     127.0.0.1:8077;
        }

        #error_page  404              /404.html;

        # redirect server error pages to the static page /50x.html
        #
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }

        location /static/ {
            alias  /home/ubuntu/mysite/static/;
            index  index.html index.htm;
        }

        location /media/ {
            alias  /home/ubuntu/mysite/media/;
        }

    location /templates/ {
            alias  /home/ubuntu/mysite/templates/;
        }

    }

在上面的设置后,可以让Nginx来处理静态文件(/static/ 和 /media/ )。非静态文件请求Nginx会发给 socket 8077,然后让uWSGI来进行处理。

Nginx+uWSGI+Django的实现方式
在完成上面配置后,需要按以下步骤来做:
1、重启Nginx服务器,以使Nginx的配置生效。
nginx -s reload (root权限执行)
重启后检查Nginx日志是否有异常。
vim /var/log/nginx/error.log
查看 error.log 文件内容是否有异常信息

2、启动uWSGI服务器
cd /home/ubuntu/mysite
uwsgi -x djangochina_socket.xml
检查日志 uwsgi.log 是否有异常发现。
uwsgi.log 日志文件生成在项目目录下,所以进入项目目录执行 vim uwsgi.log 查看

3、访问服务
基于上面的假设你的域名是www.you.com(本节我设置的是IP地址)
因此,我们访问 www.you.com
我用的IP访问:http://115.159.214.215:8077/
如果发现程序与 单独使用Django启动的程序一模一样时,就说明成功啦!
这里写图片描述

4、关闭服务的方法
将uWSGi进程杀死即可。
sudo killall -9 uwsgi

注意:
1、html文件中静态文件的路径设置,应设置为能够通过nginx访问的地址(巨坑啊,不然会一直加载不了css样式和js文件)

  • 16
    点赞
  • 186
    收藏
    觉得还不错? 一键收藏
  • 15
    评论
以下是基于 Ubuntu 20.04 操作系统的 nginx+uwsgi+docker+django4.0+python3.9+mysql8.0 部署步骤: 1. 首先安装必要的软件和依赖: ``` sudo apt-get update sudo apt-get install -y git python3-pip python3-dev python3-venv build-essential libssl-dev libffi-dev nginx docker.io docker-compose mysql-server ``` 2. 创建并激活 Python 虚拟环境: ``` python3 -m venv myprojectenv source myprojectenv/bin/activate ``` 3. 安装 DjangouWSGI: ``` pip install django==4.0 uwsgi ``` 4. 创建 Django 项目: ``` django-admin startproject myproject cd myproject ``` 5. 配置 Django 数据库设置: 打开 `myproject/settings.py` 文件,在 `DATABASES` 中添加以下内容: ``` DATABASES = { 'default': { 'ENGINE': 'django.db.backends.mysql', 'NAME': 'myprojectdb', 'USER': 'myprojectuser', 'PASSWORD': 'mypassword', 'HOST': 'localhost', 'PORT': '3306', } } ``` 6. 创建 MySQL 数据库和用户: 登录 MySQL: ``` sudo mysql ``` 创建数据库: ``` CREATE DATABASE myprojectdb CHARACTER SET UTF8; ``` 创建用户: ``` CREATE USER 'myprojectuser'@'localhost' IDENTIFIED BY 'mypassword'; ``` 授权用户访问数据库: ``` GRANT ALL PRIVILEGES ON myprojectdb.* TO 'myprojectuser'@'localhost'; ``` 刷新权限: ``` FLUSH PRIVILEGES; ``` 退出 MySQL: ``` exit ``` 7. 测试 Django 项目是否能够正常运行: ``` python manage.py runserver ``` 在浏览器中访问 `http://localhost:8000`,如果能够正常显示 Django 的欢迎页面,说明 Django 项目已经成功搭建。 8. 配置 uWSGI: 创建 `myproject/uwsgi.ini` 文件,添加以下内容: ``` [uwsgi] socket = :8001 chdir = /path/to/myproject module = myproject.wsgi:application master = true pidfile = /tmp/myproject-master.pid processes = 4 threads = 2 vacuum = true max-requests = 1000 harakiri = 60 ``` 9. 启动 uWSGI: ``` uwsgi --ini myproject/uwsgi.ini ``` 10. 配置 nginx: 创建 `/etc/nginx/sites-available/myproject` 文件,添加以下内容: ``` server { listen 80; server_name myproject.com; access_log /var/log/nginx/myproject.access.log; error_log /var/log/nginx/myproject.error.log; client_max_body_size 20M; location /static/ { alias /path/to/myproject/static/; } location /media/ { alias /path/to/myproject/media/; } location / { uwsgi_pass 127.0.0.1:8001; include /etc/nginx/uwsgi_params; } } ``` 11. 创建软链接: ``` sudo ln -s /etc/nginx/sites-available/myproject /etc/nginx/sites-enabled/ ``` 12. 测试 nginx 配置是否正确: ``` sudo nginx -t ``` 如果没有错误,重启 nginx: ``` sudo systemctl restart nginx ``` 13. 创建 Dockerfile: 在 Django 项目根目录下创建 `Dockerfile` 文件,添加以下内容: ``` FROM python:3.9 RUN apt-get update \ && apt-get install -y nginx \ && rm -rf /var/lib/apt/lists/* RUN pip install uwsgi COPY ./requirements.txt /app/requirements.txt RUN pip install -r /app/requirements.txt COPY . /app WORKDIR /app RUN python manage.py collectstatic --noinput COPY ./myproject-nginx.conf /etc/nginx/sites-available/myproject RUN ln -s /etc/nginx/sites-available/myproject /etc/nginx/sites-enabled/ RUN rm /etc/nginx/sites-enabled/default EXPOSE 80 CMD service nginx start && uwsgi --ini /app/uwsgi.ini ``` 14. 创建 docker-compose.yml 文件: 在 Django 项目根目录下创建 `docker-compose.yml` 文件,添加以下内容: ``` version: '3' services: web: build: . ports: - "80:80" depends_on: - db volumes: - ./static:/app/static - ./media:/app/media environment: - DB_HOST=db - DB_NAME=myprojectdb - DB_USER=myprojectuser - DB_PASSWORD=mypassword db: image: mysql:8.0 volumes: - db_data:/var/lib/mysql environment: - MYSQL_ROOT_PASSWORD=rootpassword - MYSQL_DATABASE=myprojectdb - MYSQL_USER=myprojectuser - MYSQL_PASSWORD=mypassword volumes: db_data: ``` 15. 构建和运行 Docker 容器: ``` sudo docker-compose up --build ``` 16. 测试 Django 项目是否能够正常运行: 在浏览器中访问 `http://localhost`,如果能够正常显示 Django 的欢迎页面,说明 Django 项目已经成功部署到 Docker 容器中。 至此,nginx+uwsgi+docker+django4.0+python3.9+mysql8.0 部署完成。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 15
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值