Ubuntu下的Nginx-Uwsgi-Django项目部署详细流程

Ubuntu下的Nginx+Uwsgi+Django项目部署详细流程

版本

  • Ubuntu 18.04
  • Python 3.6
  • Django 3.2
  • Nginx 1.14.0

Python 虚拟环境

  • virtualenv是虚拟环境安装包,创建虚拟环境可以更好地控制包的版本,保证了项目的稳定性
  • 不同虚拟环境之间的运行环境相互独立,互不干扰

1.安装virtualenv

pip3 install -i https://pypi.tuna.tsinghua.edu.cn/simple virtualenv

2.创建虚拟环境

virtualenv myVenv

3.进入虚拟环境

source myVenv/bin/activate

Django项目代码上传

1.通过pycharm进行代码部署

  • 选择:工具-Deployment-Configuration
  • 点击 + 号,选择SFTP连接
  • 选择远程主机
  • 选择本地目录与上传目录
  • 选择文件后进行上传

2.项目试运行

python3 manage.py runserver 0.0.0.0:8000

uWSGI 安装配置

1.Python 安装 uWSGI

在虚拟环境下安装uWSGI

pip3 install -i https://pypi.tuna.tsinghua.edu.cn/simple uwsgi

2.测试uWSGI

从一个简单的 “Hello World” 开始,创建文件 test_uwsgi.py,代码如下:

def application(env, start_response):
    start_response('200 OK', [('Content-Type','text/html')])
    return [b"Hello World"]

uWSGI Python 加载器将会搜索的默认函数 application 。
接下来我们启动 uWSGI 来运行一个 HTTP 服务器,将程序部署在HTTP端口 8001 上:

uwsgi --http :8001 --wsgi-file test_uwsgi.py

uWSGI部署Django

在项目根目录下(与manage.py同级)新建一个uwsgi.ini文件,内容如下:

[uwsgi]
socket = 0.0.0.0:8001
chdir = /data/myobject/ 
wsgi-file = myobject/wsgi.py 
processes = 4
threads = 2
buffer-size = 65536
# .sock文件目录需与Nginx文件内的配置相同
# socket = /data/myobject/my_sock.sock
# chmod-socket = 666
# 存储pid进程
pidfile=uwsgi.pid

# 存储log日志
daemonize=uwsgi.log

启动uWSGI,并指定配置文件

uwsgi --ini uwsgi.ini

  • 可以看到,文字正常显示,图片无法显示,这是正常现象
  • 以上步骤说明以下三个环节是相通的

    web client <-> uWSGI <-> Django

Nginx

1.安装Nginx

sudo apt-get install nginx

2.Nginx命令

/usr/sbin/nginx # 启动Nginx
/usr/sbin/nginx -s stop # 停止Nginx
/usr/sbin/nginx -s reload # 重新启动Nginx
vi /etc/nginx/nginx.conf # 编辑Nginx配置文件

3.测试Nginx

启动Nginx后,浏览器访问ip地址:

看到如上页面,说明Nginx启动成功。

4.配置Nginx

将/etc/nginx/目录下的uwsgi_params复制到项目文件夹,对此文件不做任何改动

cp /etc/nginx/uwsgi_params /data/myobject

在项目根目录创建文件my_nginx.conf,并写入以下内容

upstream django {
    server    0.0.0.0:8001;
    # server      unix:///data/myobject/my_sock.sock;
}

server {
    listen      8000;  # 端口号
    server_name 127.0.0.1;  # 服务器 ip 或是域名
    charset     utf-8;  # 字符集

    # 最大上传限制
    client_max_body_size 75M;

    location /static {
        alias /data/myobject/static;  # 静态文件所在文件夹
    }

    # 将所有非媒体请求转到Django服务器上
    location / {
        uwsgi_pass      django;  # 最上方已定义
        # 将所有参数都转到uwsgi下
        include         /data/myobject/uwsgi_params; # uwsgi_params的路径
    }
}

这个配置文件表示将静态文件和媒体文件由Nginx处理,而其它的请求转入uWSGI处理
与Nginx配置目录建立软链接

sudo ln -s /data/myobject/my_nginx.conf /etc/nginx/sites-enabled/

Nginx & uWSGI & Django

1.测试Nginx

将一张测试图片test.jpg放入static文件夹中,在浏览器中输入<YOUR_SERVER_IP>:8000/static/test.jpg,如果出现403则将图片的权限改为666,成功显示图片。

2.测试uWSGI

回到项目根目录,输入以下命令

uwsgi --socket :8001 --wsgi-file test_uwsgi.py

打开浏览器,地址栏输入<YOUR_SERVBER_IP>,看是否能正常显示’Hello World’。

3.用UNIX socket取代TCP port

修改my_nginx.conf,最终版如下:

upstream django {
    # server    0.0.0.0:8001;
    server      unix:///data/myobject/my_sock.sock;
}

server {
    listen      8000;  # 端口号
    server_name 127.0.0.1;  # 服务器 ip 或是域名
    charset     utf-8;  # 字符集

    # 最大上传限制
    client_max_body_size 75M;


    location /static {
        alias /data/myobject/static;  # 静态文件所在文件夹
    }


    # 将所有非媒体请求转到Django服务器上
    location / {
        uwsgi_pass      django;  # 最上方已定义
        # 将所有参数都转到uwsgi下
        include         /data/myobject/uwsgi_params; # uwsgi_params的路径
    }
}

修改uwsgi.ini,最终版如下:

# socket = 0.0.0.0:8001
chdir = /data/myobject/ 
wsgi-file = myobject/wsgi.py 
processes = 4
threads = 2
buffer-size = 65536
# .sock文件目录需与Nginx文件内的配置相同
socket = /data/myobject/my_sock.sock
chmod-socket = 666
# 存储pid进程
pidfile=uwsgi.pid
# 存储log日志
daemonize=uwsgi.log

重启Nginx和uWSGI

/usr/sbin/nginx -s reload
uwsgi --stop uwsgi.pid
uwsgi --ini uwsgi.ini

打开浏览器,地址栏输入网址<YOUR_SERVER_IP>:8000,查看图片和文字是否显示正常
此时以下环节已全部打通

web client <-> web server(nginx) <-> the socket <-> uwsgi <-> Django

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Ubuntu是一个自由开源的操作系统,其中有很多的工具和服务可以用于搭建与开发Web应用。其中,常用的Web应用栈是使用Nginx作为Web服务器,UWSGI作为应用程序服务器,Django作为Web框架,MySQL作为关系型数据库。 要安装和配置这些服务,需要进行以下步骤: 1. 安装Ubuntu操作系统,可以选择最新版本的Ubuntu LTS或者最新的Ubuntu发行版。 2. 安装Nginx服务,并配置Nginx服务器来处理并转发HTTP请求。这里可以使用apt-get install命令来安装Nginx包。 3. 安装UWSGI服务,并配置UWSGI服务器来处理Django应用程序。这里可以使用pip install命令来安装UWSGI包。 4. 安装Django,并编写一个基本的Django应用程序。然后配置UWSGI服务器以运行Django应用程序。可以使用pip install命令来安装Django包。可以使用此教程 - https://uwsgi-docs.readthedocs.io/en/latest/tutorials/Django_and_nginx.html 5. 安装MySQL数据库服务,并配置MySQL服务器以使用Django应用程序。可以使用apt-get install命令来安装MySQL包。 6. 在Django应用程序中配置MySQL数据库连接参数,并创建 MySQL数据库及表。 7. 配置Nginx服务器以使用UWSGI服务器来处理Django应用程序。可以使用上面的教程来完成这一步骤。 8. 启动NginxUWSGI服务器,并测试Django应用程序是否可以访问。 在进行以上的步骤时,需要注意安全措施,防止 Web 应用程序被攻击和入侵。同时,也需要进行充分的测试,保证 Web 应用程序的稳定性和可用性。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值