在ubuntu上搭建django生产环境

本文详细介绍如何在腾讯云上部署Django应用,包括环境搭建、数据库配置、使用Nginx与uWSGI等关键步骤。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

最近在腾讯云上搭建了django的生产环境,特此记录一下,方便日后查看

器材:
python3
django
nginx
uwsgi
mysql


1.将python默认版本切换到python3

ubuntu自带python2.7 和python3.5,默认为python2
由于我习惯用python3,所以需要切换一下版本
原理就是先将默认 python 的软链接删除

$ sudo rm -rf /usr/bin/python

再建立一个新的软链接python 链接到 python3.5

$ sudo ln -s /usr/bin/python3.5 /usr/bin/python

关于软链接的知识推荐看这里


2.安装python3-dev

$ sudo apt-get install python3-dev

如果不安装python3-dev后续步骤会报错,python-dev介绍点这里


3.安装pip包管理器

$ sudo apt-get install python3-pip

之后就可以用

$ sudo pip3 install xxx

来安装python的包,其中xxx为想要安装的包名称,比如大名鼎鼎的numpy


4.安装django

$ sudo pip3 install django

5.安装mysql

$ sudo apt-get install mysql-server
$ sudo apt-get install mysql-client
$ sudo apt-get install libmysqlclient-dev

安装过程中需要设定密码
安装完成后运行

$ sudo netstat -tap | grep mysql

如果看到mysql 的socket处于 listen 状态则表示安装成功
这里写图片描述

开启远程访问,可以在自己的电脑上通过mysqlworkbench进行数据库的远程管理
第一步先更改mysql的配置文件,不同的系统配置文件路径不太一样但都会在 /etc/mysql 目录下
可以根据my.cnf中的内容进行查找
比如我的my.cnf中内容为
这里写图片描述
可以根据includedir 的路径进行查找
如我现在的系统配置文件路径为 /etc/mysql/mysql.conf.d/mysqld.cnf
利用vi 进行编辑

$ sudo vi /etc/mysql/mysql.conf.d/mysqld.cnf

将 bind-address=127.0.0.1 改为bind-address=0.0.0.0 或者将整句注释掉
第二步建立可以远程访问的mysql账户

$ sudo mysql -u xxx -p
grant all privileges on *.* to 'xxx'@'%' identified by 'password' with grant option;
flush privileges;

其中:

  • *. *:第一个代表数据库名;第 二个代表表名,可以指定远程只能访问特定的数据表。
  • xxx 是你要建立的用户名
  • ‘%’为任意ip的意思,如果有特定的ip可以改为特定的ip 地址如:’125.207.1.2’
  • password 就是密码改为自己的密码就行

最后重启mysql就可以远程访问了

$ sudo service mysql restart

6.安装pymysql

python2 用mysqldb链接mysql,但是python3已经不支持这个包了
取而代之的是pymysql

$ sudo pip3 install pymysql

但是到这一步并没有结束,因为django中用的是mysqldb这个包
要想让dango使用pymysql需要在django项目的 __ini__.py中添加如下语句

import pymysql
pymysql.install_as_MySQLdb()

7.安装nginx

$ sudo apt-get install nginx

安装结束后,启动nginx

$ sudo service nginx start

然后呢访问一下服务器的ip 或者在服务器上直接访问127.0.0.1
比如腾讯云上的服务器没有图形界面在命令行可以用w3m进行访问(需要apt安装)
w3m
如果出现了
nginx welcome
证明安装成功(shift+q 为退出w3m的操作)


8.安装uwsgi

$ sudo pip3 install uwsgi

9.进行配置

首先应该搞清楚uwsgi nginx django 之间的协同原理然后再进行配置工作,这样就会比较好的理解这些配置的内容了

戳这里了解Nginx+uWSGI+Django原理

9.1.配置uwsgi

uwsgi支持多种配置方式,本文采用第一种 ini文件的方式

  • ini
  • xml
  • json
  • yaml
[uwsgi]
socket = :8001      #用于与nginx通许的端口,亦可以写成文件的形式                                                                                                                    
chdir= /var/www/***/***    #你的django项目路径
module = 你的django中的 wsgi.py文件
master = true
processes = 4
threads = 4
chmod-socket = 666
chown-socket = 拥有该socket的用户名
daemonize = 你想存放日志的文件的全路径 .log
vacuum = true

常用选项:

  • socket : 地址和端口号,例如:socket = 127.0.0.1:50000;也可以是文件,例如:socket = /xxx/xxx/xxx.sock
  • processes : 开启的进程数量
  • workers : 开启的进程数量,等同于processes
  • chdir : 指定运行目录(chdir to specified directory before apps loading)
  • wsgi-file : 载入wsgi-file(load .wsgi file)
  • stats : 在指定的地址上,开启状态服务
  • threads : 运行线程。(run each worker in prethreaded mode with the specified number of threads)
  • master : 允许主进程存在(enable master process)
  • daemonize : 使进程在后台运行,并将日志打到指定的日志文件或者udp服务器(daemonize uWSGI)。实际上最常用的,还是把运行记录输出到一个本地文件上。
  • log-maxsize :以固定的文件大小(单位KB),切割日志文件。 例如:log-maxsize = 50000000 就是50M一个日志文件。
  • pidfile : 指定pid文件的位置,记录主进程的pid号。
  • vacuum : 当服务器退出的时候自动清理环境,删除unix socket文件和pid文件(try to remove all of the generated file/sockets)
  • disable-logging : 不记录请求信息的日志。只记录错误以及uWSGI内部消息到日志中。

这是uwsgi的中文文档里面有更详细的说明

9.2配置nginx

首先打开nginx的配置文件看看

$ sudo cd /etc/nginx
$ sudo vi nginx.conf

可以看到文件中有如下两句

include /etc/nginx/conf.d/*.conf;                                                                                                                  
include /etc/nginx/sites-enabled/*;  

就是说在以上路径中建立配置文件会自动读取
所以我在/etc/nginx/conf.d中建立了自己的配置文件ngcon.conf
内容如下

server {                                                                                                                                                   
    listen      80;                                                                                                                                        
    server_name  www.xxxx.com; #域名,没有域名就写ip地址就可以                                                                                                                             
    charset     utf-8;                                                                                                                                     

    client_max_body_size 75M;                                                                                                                              

    location /static {                                                                                                                                     
       alias 静态文件路径,例如 /var/www/xxxx/static;。                                                                                                                         
    }                                                                                                                                                      

    location / {                                                                                                                                           
        uwsgi_pass  127.0.0.1:8001;    #与前面的uwsgi配置相同                                                                                                                    
        include     /etc/nginx/uwsgi_params;                                                                                                               
    }                                                                                                                                                      
}                 
9.3使配置生效

初始化uwsgi,–ini后面为uwsgi的配置文件

$ sudo uwsgi --ini /xxx/xxx/***.ini

重启nginx

$ sudo service nginx reload

每次启动服务器都需要将uwsgi进行一次初始化
如果嫌麻烦,可以将uwsgi的初始化命令写入 /etc/rc.local 中
这样每次启动都会自动初始化uwsgi了


10.完

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值