django项目上线+uwsgi+nginx

项目转移到阿里云服务器上

通过 ssh的scp命令把在本地电脑测试通过的项目上传到阿里云

VirtualEnv

不同的项目可能会引用各种不同的依赖包,为了避免版本与和应用之间的冲突而造成的“依赖地狱”
[Virtualenv | https://virtualenv.readthedocs.org/en/latest/] 就是我们python 项目的必须品了。VirtualEnv 可以为每个Python应用创建独立的开发环境,使他们互不影响,Virtualenv 能够做到:

  • 在没有权限的情况下安装新套件
  • 不同应用可以使用不同的套件版本
  • 套件升级不影响其他应用
sudo pip install virtualenv

安装完成后,只需要在项目文件夹中运行virtualenv "项目名"就可以建立一个虚拟环境文件夹,然后用activate来启动python虚拟环境。

virtualenv venv

>> New python executable in venv/bin/python
>> Installing setuptools, pip...done.

在项目目录下就会建立一个新的 venv 目录,里面就是运行python 的基本环境的工具与指令,和包。 然后启用该环境,使用当前命令行状态进入虚拟环境,进入虚拟环境后,一切安装python的操作都会将包和引用装在虚拟环境内,而不会影响到全局的python 环境。

my_flask root$ source venv/bin/activate 
(venv)my_flask root$ 

调用 activate 指令后命令符前就会出现 (venv) 字样。 可通过 deactivate 退出虚拟环境。

安装项目需要的所需要的包
```python
sudo pip3 freeze  > package_list.txt    #这条指令可以把本地安装的所有包的信息生成一个.txt文件
pip3 install  -r package_list.txt    #这条指令是把.txt文件里面的所有包按顺序安装
```
安装uwsgi和nginx
sudo pip3 install uwsgi
sudo apt install nginx  
#如果nginx安装太慢需要更换源 source vim /etc/apt/sources.list
#更改国内源(百度搜索apt国内源),替换sources.list里面的文件
#sudo apt-get update

配置uwsgi

新建一个文件uwsgi.ini(在项目文件夹内,与setting.py同一级目录)
编辑uwsgi.ini内容

[uwsgi]
# 套接字方式的 IP地址:端口号
# socket=127.0.0.1:8000     #如果要用nginx,必须开启socket,关闭http
# Http通信方式的 IP地址:端口号
http=127.0.0.1:8000        #8000端口可以更换,但是一定要保证阿里云这个端口开放,如果没有云阿里云设置
# 项目当前工作目录
chdir=/home/tarena/.../my_project 这里需要换为项目文件夹的绝对路径(写到与manage.py同一级目录)
# 项目中wsgi.py文件的目录,相对于当前工作目录
wsgi-file=my_project/wsgi.py(相对路径,以chdir基准来写)
# 进程个数
process=4
# 每个进程的线程个数
threads=2
# 服务的pid记录文件
pidfile=uwsgi.pid
# 服务的目志文件位置
daemonize=uwsgi.log
# 开启主进程管理模式
master=true

修改settings.py将 DEBUG=True 改为DEBUG=False

修改settings.py 将 ALLOWED_HOSTS = [] 改为 ALLOWED_HOSTS = [‘网站域名’] 或者 [‘服务监听的ip地址’]
uWSGI的运行管理

->> 启动 uwsgi

```shell
$ cd 项目文件夹
$ sudo uwsgi --ini 项目文件夹/uwsgi.ini
```
  • 停止 uwsgi

    $ cd 项目文件夹
    $ sudo uwsgi --stop uwsgi.pid
    

说明:
当uwsgi 启动后,当前django项目的程序已变成后台守护进程,在关闭当前终端时此进程也不会停止。
若执行 stop 操作失败,则需要执行如下操作杀死进程

  ```shell
  ps aux|grep 'uwsgi'  -> 查看uwsgi进程
  
  tarena   103408  0.0  0.9 137172 39984 ?        S    10:02   0:01 uwsgi --ini uwsgi.ini
  tarena   103410  0.0  0.9 436200 38552 ?        Sl   10:02   0:00 uwsgi --ini uwsgi.ini
  
  ps -ef | grep 'uwsgi' | grep -v grep | awk '{print $2}' | xargs kill -9
  ```

测试:
在浏览器端输入http://127.0.0.1:8000 进行测试
注意,此时端口号为8000

nginx 反向代理配置

  • Nginx是轻量级的高性能Web服务器,提供了诸如HTTP代理和反向代理、负载均衡、缓存等一系列重要特性,在实践之中使用广泛。

  • C语言编写,执行效率高

  • nginx 作用

    • 负载均衡, 多台服务器轮流处理请求
    • 反向代理
  • 原理:

  • 客户端请求nginx,再由nginx 请求 uwsgi, 运行django下的python代码

  • nginx 配置

    • 修改nginx 的配置文件 /etc/nginx/sites-enabled/default
    # 在server节点下添加新的location项,指向uwsgi的ip与端口。
    server {
        ...
        location / {
            uwsgi_pass 127.0.0.1:8000;  # 重定向到127.0.0.1的8000端口
            include /etc/nginx/uwsgi_params; # 将所有的参数转到uwsgi下
        }
        ...
    }
    

    在这里插入图片描述

  • nginx服务控制

    $ sudo /etc/init.d/nginx start|stop|restart|status
    # 或
    $ sudo service nginx start|stop|restart|status
    

    通过 start,stop,restart,status 可能实现nginx服务的启动、停止、重启、查扑克状态等操作

  • 修改uWSGI配置

    • 修改项目文件夹/uwsgi.ini下的Http通信方式改为socket通信方式
    [uwsgi]
    # 去掉如下
    # http=127.0.0.1:8000
    # 改为
    socket=127.0.0.1:8000
    
    • 重启uWSGI服务
    $ sudo uwsgi --stop uwsgi.pid
    $ sudo uwsgi --ini 项目文件夹/uwsgi.ini
    
  • 测试:

    • 在浏览器端输入http://127.0.0.1 进行测试

    • 注意 :

      ​ 1,此时端口号为80(nginx默认值)

      ​ 2,Django中有任何修改 需要重启 uwsgi , 否则修改不生效

nginx 配置静态文件路径

  • 创建新路径-主要存放Django所有静态文件 如: /home/tarena/项目名_static/

  • 在Django settings.py 中添加新配置

    STATIC_ROOT = '/home/tarena/项目名_static/static  
    #注意 此配置路径为 存放所有正式环境中需要的静态文件
    
  • 进入项目,执行 python3 manage.py collectstatic 。执行该命令后,Django将项目重所有静态文件 复制到 STATIC_ROOT 中 ,包括Django内建的静态文件【如admin后台的样式】

  • Nginx配置中添加新配置

    # file : /etc/nginx/sites-enabled/default
    # 新添加location /static 路由配置,重定向到指定的 第一步创建的路径即可
    server {
        ...
        location /static {
            # root 第一步创建文件夹的绝对路径,如:
             root /home/tarena/项目名_static;          
        }
        ...      
    }
    

404/500 界面

  • 在模板文件夹内添加 404.html 模版,当视图触发Http404 异常时将会被显示
  • 404.html 仅在发布版中(即setting.py 中的 DEBUG=False时) 才起作用
  • 当向应处理函数触发Http404异常时就会跳转到404界面
from django.http import Http404
def xxx_view( ):
    raise Http404  # 直接返回404

特别说明:

项目里面的settings.py文件里面ALLOWED_HOSTS = [] 改为 ALLOWED_HOSTS = ["阿里云的公网IP"]
修改settings.py将 DEBUG=True 改为DEBUG=False
重启nginx的命令为:nginx -s reload 或 service nginx restart
查看nginx启动报的错:nginx -t 
重新加载uwsgi:  uwsgi --reload /home/mysite_uwsgi/master.pid
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在Linux系统上部署Django + nginx + uWSGI的步骤如下: 1. 安装必要的软件 在Linux系统上安装必要的软件包,包括Python、pip、nginxuWSGI等。 2. 创建Django项目 使用Django创建一个新项目或使用现有的Django项目。 3. 配置uWSGIDjango项目的根目录下创建一个uwsgi.ini文件,用于配置uWSGI。示例配置如下: ``` [uwsgi] # 指定运行模式为WSGI http = :8000 # 指定Django应用的wsgi模块 wsgi-file = myproject.wsgi # 指定进程数 processes = 4 # 指定线程数 threads = 2 # 指定静态文件路径 static-map = /static=/path/to/static # 指定日志路径 logto = /path/to/logfile ``` 其中,http参数指定了监听的端口号,wsgi-file参数指定了Django应用的wsgi模块,processes参数指定了进程数,threads参数指定了线程数,static-map参数指定了静态文件的路径,logto参数指定了日志文件的路径。 4. 配置nginxnginx的配置文件中添加以下内容: ``` server { listen 80; server_name example.com; access_log /var/log/nginx/access.log; error_log /var/log/nginx/error.log; location / { uwsgi_pass 127.0.0.1:8000; include uwsgi_params; } location /static { alias /path/to/static; } } ``` 其中,server_name指定了域名,access_log和error_log指定了日志文件的路径,uwsgi_pass指定了uWSGI的地址和端口号,include指定了uWSGI的参数。 5. 启动uWSGI服务 使用以下命令启动uWSGI服务: ``` uwsgi --ini uwsgi.ini ``` 6. 启动nginx服务 使用以下命令启动nginx服务: ``` sudo service nginx start ``` 这样就完成了Django + nginx + uWSGI的部署。可以通过访问该网站的域名来验证是否部署成功。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值