最近在腾讯云上搭建了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安装)
如果出现了
证明安装成功(shift+q 为退出w3m的操作)
8.安装uwsgi
$ sudo pip3 install uwsgi
9.进行配置
首先应该搞清楚uwsgi nginx 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了