Django、Python3、Nginx、uWSGI环境部署教程,没有更简单的了!!!!

一把辛酸泪洒在了屏幕上,从开始部署,到部署成功差不多用了三天,其中发现各种bug,各种大毛病,小毛病,中毛病。。神经病都经历了不少,所以我把我这几天的内容全部整理下来给到你,希望你可以节省下这个时间。

 

部署环境要求

1、Ubutun 16_04_02 64位

2、Python2、7 和Python3.5(系统自带了)

3、Mysql = 5.7.18

4、Django==1.10.6

5、PyMySQL==0.7.11

6、uWSGI==2.0.15

为了降低出现bug的机会,请尽量使用的一样的环境

 

部署环境流程

更新内容(20170603,5:40):

在跑完下面的整个流程后发现有个问题,在测试uWSGI的时候,显示无法查找没有site模块(事实上也没有这个模块),后来估计判断是这样的,虚拟环境中用的是python3,而系统中默认的是python2.7,所以当同时使用uWSGI的时候,两个版本出现抵触了,就先这么理解吧,解决方案很简单。

将默认的python移除,使用python3

  1. update-alternatives --remove python /usr/bin/python2
  2. update-alternatives --install /usr/bin/python python /usr/bin/python3 1

安装pip3替换默认的pip

  1. apt-get install python3-pip
  2. ln -s /usr/bin/pip3 /usr/bin/pip

如果出现错误,请使用which pip3查找其位置,然后替换

 

1、环境安装

至于如何选择系统这个部分,没有什么可以聊的,在IDC那边选择系统安装即可。

为了系统的内容为最新状态,建议升级,执行以下命名行。

  1. sudo apt-get update
  2. sudo apt-get upgrade

执行过程中需要输入Y进行安装确认

为了防止root对环境的破坏,这里选择创建一个超级用户

  1. useradd -m -s /bin/bash lee #创建用户lee
  2. usermod -a -G sudo lee #用户lee加入超级权限组
  3. passwd lee #为新用户输入密码
  4. su - lee #切换为用户为lee

如需切换至root

  1. su或su -

在下面的安装中如果您用的是新建的用户,则需要使用sudo + 命令,而如果是root则可以直接使用命令。注:在后面的测试中发现lee的权限还是用起来不爽,如果你现在只是在测试,还是root走起。

 

 

2、安装Nginx

  1. apt install  nginx
  2. 如果不行,尝试下面的命令
  3. sudo apt install nginx

Django、Python3、Nginx、uWSGI环境部署教程,没有更简单的了!!!!

安装完成后,可使用IP去访问是否正常显示,如不能试着使用下面的命令,查看系统是否未启动,看报错内容,然后去百度搜索。

  1. /etc/init.d/nginx start (restart / stop)
  2. # 分别为nginx启动、重启和停止

 

3、安装Mysql

这个内容基本上没有什么要说,与环境本身影响也不大,所以放到另外的一篇内容中来说。且django本身已经默认带了Sqlite数据库,如无必要可以直接使用其数据库。

如需安装MySql,https://www.lijinlong.cc/fuwuqi/hjpz/1956.html

 

4、安装Virtualenv

  • 在安装Virtualenv前要先安装下pip,有的视频教程里面没有这一步不知道是不是是系统自动带了。
 
  1. sudo apt-get install python-pip

在上面的内容开始的时候已经安装了pip3这里可以省略(20170701更新)

更新pip为最新版

  1. sudo pip install --upgrade pip

 

  • 安装virtualenv
  1. pip install virtualenv

 

  • 使用python3指定虚拟目录

如果您有数据盘,那么建议您创建到数据盘中(linux数据盘重新挂载教程),本次教程使用的目录为

/var/www/ 目录下

  1. cd  /var/www/  #进入到 /var/www/ 中
  2. virtualenv -p /usr/bin/python3.5  lee   #指定python3创建虚拟目录lee

如果python位置不同可以使用,下面的命令,查找python的位置

  1. which python
  2. which python3

which命令,也适用于其他的内容的搜索,更多内容请自行了解

 

  • 上传本地的程序包

如果您是在服务器上面重新搭建django,可自行创建相关内容。

在上传项目前,您需要做一件事,就是将本地的环境需求导出到一个文件中。

  1. pip freeze  #查看项目的配置环境
  2. pip freeze > requirements.txt  #将项目的配置环境导出至requirements.txt中

然后通过ftp或git或其他方式上传相关文件至服务器中。

 

  • 配置程序需求环境

使用命令进入虚拟目录,然后安装项目配置环境。

  1. cd  /var/www/lee  #lee为python3创建虚拟目录
  2. source  bin/activate #激活虚拟目录
  3. pip install -r requirements.txt  # 安装原项目的环境配置

注:以下内容未申明退出虚拟目录,均在虚拟目录中运行。如遇到权限不够,请在命令前加上sudo

Django、Python3、Nginx、uWSGI环境部署教程,没有更简单的了!!!!

 

  • 项目更新

1、文件更新

在项目blogproject下的文件夹blogproject下的setting.py文件中设置

  1. DEBUG = False  #关闭调试,默认是开启状态
  2. ALLOWED_HOSTS = ['域名']  #如无域名,可绑定IP地址,如果均为修改服务启动后,将会报错。
  3. LANGUAGE_CODE = 'zh-Hans' #英文语言修改为中文
  4. TIME_ZONE = 'Asia/Shanghai #国际时区设置为上海时区

在setting文件下面增加下面的内容,可能有部分内容文件中是有的。

  1. STATIC_ROOT = os.path.join(BASE_DIR, 'static')
  2. STATIC_URL = '/static/'
  3. STATICFILES_FINDERS = (
  4.   'django.contrib.staticfiles.finders.FileSystemFinder',
  5.   'django.contrib.staticfiles.finders.AppDirectoriesFinder',)

 

2、数据库更新

  1. python manage.py makemigrations  #  让 Django 知道我们在我们的模型有一些变更
  2. python manage.py migrate  #  创建表结构

如果您的数据不那么重要,可以删除/blogproject/blog/migrations/ 下的类似00.. 的记录文件.

这里默认使用的是Sqlite,如需变更,请点击:https://www.lijinlong.cc/django/djxs/1939.html

使用以下命令查看网站

  1. python manage.py runserver 0.0.0.0:8000

可通过IP:8000访问网站,如需退出,control + c 退出运行环境

 

3、静态文件统一至static目录

  1. python manage.py collectstatic

将静态文件放置到固定的目录,是为了实现动静分离,让服务器发挥更多的性能。

 

  • uWSGI配置
  1. pip install uwsgi

测试uWSGI环境是否生效,因为80端口已经被nginx占用,所以只能使用8000端口,当然如果您对端口熟悉也可以用其他的端口。

  1. uwsgi --http :8000 --module  blogproject.wsgi

如出现下面的内容,则运行成功

  1. spawned uWSGI worker 1 (and the only) (pid: 18417, cores: 1)

如需退出,control + c 退出测试环境

注:虚拟环境到此结束,请使用deactivate 退出虚拟环境。

 

5、配置文件

Nginx配置文件

nginx默认的配置文件为,/etc/nginx/sites-enabled/default,只需要编辑器文件内容为,可使用

  1. vi /etc/nginx/sites-enabled/default
  1. upstream django{
  2.         server 127.0.0.1:8001; #叫啥忘记了,与uWSGI产生联系
  3. }
  4. server {
  5.     listen 80;
  6.     server_name demo.lijinlong.cc;  #  绑定的域名
  7.     charset utf-8;
  8.     client_max_body_size 10M; #上传最大限制10M
  9.     location /static/ {
  10.         root /var/www/lee/blogproject;  # 静态文件的地址
  11.         }
  12.     location / {
  13.         include         /var/www/lee/uwsgi_params;   # uwsgi_params别紧张,这个文件不需要编辑
  14.         uwsgi_pass      django;
  15.         }
  16.     }

 

uWSGI配置

在虚拟机上安装了uWSGI,在环境外依然需要安装uWSGI,通过上面的经验在这里安装一个文件也变得很简单。

  1. sudo pip install uwsgi

 

以下内容ini格式的内容,保存后命名为 blogproject.ini

  1. [uwsgi]
  2. chdir = /var/www/lee/blogproject/ #模块位置 
  3. module = blogproject.wsgi  #模块名称
  4. home = /var/www/lee/  #项目位置
  5. master = true
  6. processes = 5
  7. socket = :8001   #与楼上的那个内容挂钩,还有其他写法,没深入研究
  8. chmod-socket = 666
  9. vacuum = true

 

uwsgi_params文件的内容,请注意它没有任何后缀,保存后名称定义为:uwsgi_params

  1. uwsgi_param  QUERY_STRING       $query_string;
  2. uwsgi_param  REQUEST_METHOD     $request_method;
  3. uwsgi_param  CONTENT_TYPE       $content_type;
  4. uwsgi_param  CONTENT_LENGTH     $content_length;
  5. uwsgi_param  REQUEST_URI        $request_uri;
  6. uwsgi_param  PATH_INFO          $document_uri;
  7. uwsgi_param  DOCUMENT_ROOT      $document_root;
  8. uwsgi_param  SERVER_PROTOCOL    $server_protocol;
  9. uwsgi_param  REQUEST_SCHEME     $scheme;
  10. uwsgi_param  HTTPS              $https if_not_empty;
  11. uwsgi_param  REMOTE_ADDR        $remote_addr;
  12. uwsgi_param  REMOTE_PORT        $remote_port;
  13. uwsgi_param  SERVER_PORT        $server_port;
  14. uwsgi_param  SERVER_NAME        $server_name;

 上述的两个配置文件,在保存后需要上传到项目地址中去。

Django、Python3、Nginx、uWSGI环境部署教程,没有更简单的了!!!!

自启动配置

  1. vi /etc/rc.local

键盘I,切换至输入模式,在内容的最底部放置下面的命令。

  1. /usr/local/bin/uwsgi --ini /var/www/lee/blogproject.ini

输入完成后,按ESC键,输入:wq保存并退出环境

内容截止到了这里,整个项目的部署已经完成。

重启下服务器看看

命令:reboot

 

20170701补充内容、

20170719再补充

如果你的部署不成功,请启动nginx是否成功,如未成功,查看下面文件中的报错内容

  1. /etc/init.d/nginx start (restart / stop)
  2. # 分别为nginx启动、重启和停止

在接近一周的时间,部署网站上线,一直出现错误(实际就是一个错误),不停的去看各种资料,各种排除,最后却死在自己写的教程上面的多了一个S

Django、Python3、Nginx、uWSGI环境部署教程,没有更简单的了!!!!

找不到这个配置文件,在Nginx默认配置文件中/etc/nginx/sites-enabled/default 写的是uwsgi_params,而写成了其他的名字。这也是今天才想起来查看系统的日志来查错。

Nginx的错误日志在以下文件中。

  1. #cat 的用途是查看
  2. cat /var/log/nginx/access.log  #网站日志
  3. cat /var/log/nginx/error.log  #系统日志

 

  • 关于uwsgi

程序在修改一些内容的时候,需要重启uwsgi,比如在settings.py文件中增加域名,则需要重启uwsgi。

关于uwsgi的教程:https://diav79.github.io/python/2016/11/25/restart-uwsgi.html

官方文档:http://uwsgi-docs-zh.readthedocs.io/zh_CN/latest/Management.html

 

 

本文参考链接:

1、http://www.bilibili.com/video/av10247256/

2、http://www.bilibili.com/video/av10244432/

3、http://www.nocmt.com/post/1/

4、http://zmrenwu.com/post/20/

5、https://www.howtoforge.com/tutorial/how-to-install-django-on-ubuntu/

 

李金龙

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: