1 安装 python3 到 Centos7, 先安装软件管理包和可能使用的依赖css
yum -y groupinstall "Development tools" yum install openssl-devel bzip2-devel expat-devel gdbm-devel readline-devel sqlite-devel
2 下载Pyhton3到/usr/local 目录html
wget https://www.python.org/ftp/python/3.7.2/Python-3.7.2.tgz
3 解压python
tar -zxvf Python-3.7.2.tgz
4 进入到解压好的python文件中mysql
cd Python-3.7.2
5 编译安装到指定路径linux
./configure --prefix=/usr/local/python3
6 安装python3nginx
make make install
7 安装完成以后 创建软连接 添加变量 方便在终端中直接使用python3web
ln -s /usr/local/python3/bin/python3.7 /usr/bin/python3
8 Python3安装完成以后pip3也一块安装完成,不须要再单独安装同样创建软连接
一样给pip3创建软连接sql
ln -s /usr/local/python3/bin/pip3.7 /usr/bin/pip3 注: 若是软链创建完成,可是却没法使用的时候执行下面命令: mv pip pip2 # (将文件 pip 改名为 pip2 ) ln -s /usr/local/python3/bin/pip3 /usr/bin/pip
9 安装virtualenv, 方便不一样版本项目管理。shell
pip3 install virtualenv
10 创建软连接数据库
ln -s /usr/local/python3/bin/virtualenv /usr/bin/virtualenv3
11 安装成功在根目录下创建两个文件夹,主要用于存放env和网站文件的 (文件建立随意,根据实际需求)。
mkdir -p /data/env # 存放虚拟环境 mkdir -p /data/wwwroot # 存放web项目
12 切换到/data/env/下,建立指定版本的虚拟环境。
virtualenv3 --python=/usr/bin/python qize_demo (项目名) # 建立虚拟环境 # 而后进入 cd /data/env/qize_demo/bin # 进入bin目录后开启虚拟环境,执行命令 source activate # 注:(启动后出现 (qize_demo),说明是成功进入虚拟环境。)
13 虚拟环境里用pip3安django和uwsgi (留意:uwsgi要安装两次,先在系统里安装一次,而后进入对应的虚拟环境安装一次。)
pip3 install django #(若是用于生产的话,则须要指定安装和你项目相同的版本) pip3 install uwsgi # 给uwsgi创建软连接,方便使用 ln -s /usr/local/python3/bin/uwsgi /usr/bin/uwsgi
14 在本地项目目录下用下面的命令把当前的环境依赖包导出到requirements.txt文件
pip freeze > requirements.txt
15 把项目源码压缩打包。把项目上传到服务器对应的目录里(/data/wwwroot/),解压。
16 进入解压好的项目根路径中安装requirements.txt里的依赖包。
pip3 install -r requirements.txt
17 导入数据库到服务器。(若是用的是Mysql的话)
导出Mysql,django为你的数据库
mysqldump -uroot -p password django>django.sql
把django.sql上传到服务器,在服务器里用下面命令导入
mysql -uroot -ppassword use dajngo; source your Path\django.sql
18 经过 python3 manage.py runserver 运行一下项目,若是能正常启动则进行下一步,不能正常运行往上检查 (下面给出几个常见错误和解决方案)。
报错1:django.core.exceptions.ImproperlyConfigured: mysqlclient 1.3.3 or newer is required; you have 0.7.11 解决方案:
解决:编辑Python安装路径下的 Python36-32\Lib\site-packages\django\db\backends\mysql\base.py
将文件中的以下代码注释 #if version < (1, 3, 3): # raise ImproperlyConfigured("mysqlclient 1.3.3 or newer is required; you have %s" % Database.__version__)
报错2: File "/usr/local/python3/lib/python3.7/site-packages/django/db/backends/mysql/operations.py", line 146, in last_executed_query query = query.decode(errors='replace')
AttributeError: 'str' object has no attribute 'decode'
解决:编辑
/usr/local/python3/lib/python3.7/site-packages/django/db/backends/mysql/operations.py
的 第146 行,
# 将 decode 改成 encode 保存并退出 query = query.decode(errors='replace') 改成 query = query.encode(errors='replace')
19 在项目根目录里添加uwsgi配置文件 (qize_demo.xml)
<uwsgi> <socket>127.0.0.1:8070/</socket><!-- 内部端口,自定义 --> <chdir>/data/wwwroot/qize_demo/</chdir><!-- 项目路径 --> <module>qize_demo.wsgi</module> <processes>4</processes> <!-- 进程数 --> <daemonize>uwsgi.log</daemonize><!-- 日志文件 --> </uwsgi>
20 配置Nginx配置文件(把原先的配置文件能够备份如下,而后将下面的替换进去)。
events { worker_connections 1024; } http { include mime.types; default_type application/octet-stream; sendfile on; server { listen 80; server_name 127.0.0.1:80; # 改成本身的域名,没域名修改成127.0.0.1:80 charset utf-8; location / { include uwsgi_params; uwsgi_pass 127.0.0.1:8070; #端口要和uwsgi里配置的同样 uwsgi_param UWSGI_SCRIPT qize_demo.wsgi; #wsgi.py所在的目录名+.wsgi uwsgi_param UWSGI_CHDIR /data/wwwroot/qize_demo/; #项目路径 } location /static { alias /data/wwwroot/qize_demo/static; #静态资源路径 } location /templates { alias /data/wwwroot/qize_demo/templates; } } }
留意:必定要注意Uwsgi和Nginx配置文件里的项目路径和静态资源路径,填写正确了才能成功访问。否则会出现502错误。还有就是,修改Django文件和其它配置文件以后,必定要重启Uwsgi和Nginx,否则不生效。
21 Uwsgi和Nginx重启方法:
uwsgi 启动方法
uwsgi -x qize_demo.xml
Nginx 重启方法
nginx -s reload
而后在浏览器里访问服务器ip(或域名),就能查看到项目。
若是想使用域名访问项目,先在域名管理后台把域名解析到服务器IP上来,以后在Nginx配置文件里绑定域名。而后在浏览器里经过绑定的域名访问项目。
1 若是访问出现 500 以上的错误信息并有nginx的信息,通常是nginx配置出了问题。去查看nginx.conf配置中的项目路径是否正确,uwsgi_pass 参数的端口和 uwsgi的xml 文件中端口是否一致,是否修改完配置后从新启动了nginx。还有就是能够去项目根路径下 python manage.py runserver 启动下项目,看看有没有报错,也有多是程序自己就有问题。
2 若是访问出现 400 以上的错误信息,重点检查项目路径,包括 tempates / static 静态路径是否正确,和项目中 settings 是否配置了 tempates / static 文件的访问路径,以及 url 是否正确,其次还有html文件中引入的 css, js, img 等文件路径是否正确, 好比:
css文件:<link rel="stylesheet" href="/static/css/q.css"> js文件 :<script src="/static/js/q.js"></script>
1 项目上线后记得 DEBUG = False 这样设置,这样的话你的项目访问失败就不会有 Django 的错误信息了
2 设置全部 IP 均可访问 (settings.py)
ALLOWED_HOSTS = ['*']
3 数据库设置(settings.py)
DATABASES = { 'default': { 'ENGINE': 'django.db.backends.mysql', 'NAME': 'sql_base', # 库名 (根据实际数据库名进行修改) 'PORT': 3306, # 端口(不用改) 'HOST': '127.0.0.1', # 本地host(不用改) "USER": 'root', # 用户名 'PASSWORD': '123456' # 密码 } }