鱼C论坛

 找回密码
 立即注册
查看: 12528|回复: 15

[技术交流] Django、Python3、Nginx、uWSGI环境部署教程,没有更简单的了!!!!

[复制链接]
发表于 2017-6-4 09:42:46 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
本帖最后由 李金龙 于 2017-7-13 09:06 编辑

一把辛酸泪洒在了屏幕上,从开始部署,到部署成功差不多用了三天,其中发现各种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
update-alternatives --remove python /usr/bin/python2
update-alternatives --install /usr/bin/python python /usr/bin/python3
安装pip3替换默认的pip
apt-get install python3-pip
ln -s /usr/bin/pip3 /usr/bin/pip
如果出现错误,请使用which pip3查找其位置,然后替换

1、环境安装
至于如何选择系统这个部分,没有什么可以聊的,在IDC那边选择系统安装即可。
为了系统的内容为最新状态,建议升级,执行以下命名行。
sudo apt-get update
sudo apt-get upgrade
执行过程中需要输入Y进行安装确认
为了防止root对环境的破坏,这里选择创建一个超级用户
useradd -m -s /bin/bash lee #创建用户lee
usermod -a -G sudo lee #用户lee加入超级权限组
passwd lee #为新用户输入密码
su - lee #切换为用户为lee
如需切换至root
su或su -
在下面的安装中如果您用的是新建的用户,则需要使用sudo + 命令,而如果是root则可以直接使用命令。注:在后面的测试中发现lee的权限还是用起来不爽,如果你现在只是在测试,还是root走起。


2、安装Nginx
apt install  nginx
如果不行,尝试下面的命令
sudo apt install nginx
安装完成后,可使用IP去访问是否正常显示,如不能试着使用下面的命令,查看系统是否未启动,看报错内容,然后去百度搜索。
/etc/init.d/nginx start (restart / stop)
# 分别为nginx启动、重启和停止

3、安装Mysql
这个内容基本上没有什么要说,与环境本身影响也不大,所以放到另外的一篇内容中来说。且django本身已经默认带了Sqlite数据库,如无必要可以直接使用其数据库。
如需安装MySql,https://www.lijinlong.cc/fuwuqi/hjpz/1956.html

4、安装Virtualenv
在安装Virtualenv前要先安装下pip,有的视频教程里面没有这一步不知道是不是是系统自动带了。
sudo apt-get install python-pip
在上面的内容开始的时候已经安装了pip3这里可以省略(20170701更新)


更新pip为最新版
sudo pip install --upgrade pip
安装virtualenv
pip install virtualenv
使用python3指定虚拟目录
如果您有数据盘,那么建议您创建到数据盘中(linux数据盘重新挂载教程),本次教程使用的目录为/var/www/ 目录下
cd  /var/www/  #进入到 /var/www/ 中
virtualenv -p /usr/bin/python3.5  lee   #指定python3创建虚拟目录lee

如果python位置不同可以使用,下面的命令,查找python的位置
which python
which python3
which命令,也适用于其他的内容的搜索,更多内容请自行了解

上传本地的程序包
如果您是在服务器上面重新搭建django,可自行创建相关内容。
在上传项目前,您需要做一件事,就是将本地的环境需求导出到一个文件中。
pip freeze  #查看项目的配置环境
pip freeze > requirements.txt  #将项目的配置环境导出至requirements.txt中
然后通过ftp或git或其他方式上传相关文件至服务器中。

配置程序需求环境
使用命令进入虚拟目录,然后安装项目配置环境。
cd  /var/www/lee  #lee为python3创建虚拟目录
source  bin/activate #激活虚拟目录
pip install -r requirements.txt  # 安装原项目的环境配置
注:以下内容未申明退出虚拟目录,均在虚拟目录中运行。如遇到权限不够,请在命令前加上sudo

项目更新
1、文件更新
在项目blogproject下的文件夹blogproject下的setting.py文件中设置
DEBUG = False  #关闭调试,默认是开启状态
ALLOWED_HOSTS = ['域名']  #如无域名,可绑定IP地址,如果均为修改服务启动后,将会报错。
LANGUAGE_CODE = 'zh-Hans' #英文语言修改为中文
TIME_ZONE = 'Asia/Shanghai #国际时区设置为上海时区
在setting文件下面增加下面的内容,可能有部分内容文件中是有的。
STATIC_ROOT = os.path.join(BASE_DIR, 'static')
STATIC_URL = '/static/'
STATICFILES_FINDERS = (
  'django.contrib.staticfiles.finders.FileSystemFinder',
  'django.contrib.staticfiles.finders.AppDirectoriesFinder',)
2、数据库更新
python manage.py makemigrations  #  让 Django 知道我们在我们的模型有一些变更
python manage.py migrate  #  创建表结构
如果您的数据不那么重要,可以删除/blogproject/blog/migrations/ 下的类似00.. 的记录文件.
这里默认使用的是Sqlite,如需变更,请点击:https://www.lijinlong.cc/django/djxs/1939.html
使用以下命令查看网站
python manage.py runserver 0.0.0.0:8000
可通过IP:8000访问网站,如需退出,control + c 退出运行环境

3、静态文件统一至static目录
python manage.py collectstatic
将静态文件放置到固定的目录,是为了实现动静分离,让服务器发挥更多的性能。

uWSGI配置
sudo pip install uwsgi
测试uWSGI环境是否生效,因为80端口已经被nginx占用,所以只能使用8000端口,当然如果您对端口熟悉也可以用其他的端口。
uwsgi --http :8000 --module  blogproject.wsgi
如出现下面的内容,则运行成功
spawned uWSGI worker 1 (and the only) (pid: 18417, cores: 1)
如需退出,control + c 退出测试环境
注:虚拟环境到此结束,请使用deactivate 退出虚拟环境。

5、配置文件

Nginx配置文件
nginx默认的配置文件为,/etc/nginx/sites-enabled/default,只需要编辑器文件内容为,可使用
vi /etc/nginx/sites-enabled/default
upstream django{
        server 127.0.0.1:8001; #叫啥忘记了,与uWSGI产生联系
}
server {
    listen 80;
    server_name demo.lijinlong.cc;  #  绑定的域名
    charset utf-8;
    client_max_body_size 10M; #上传最大限制10M
    location /static/ {
        root /var/www/lee/blogproject;  # 静态文件的地址
        }
    location / {
        include         /var/www/lee/uwsgi_params;   # uwsgi_params别紧张,这个文件不需要编辑
        uwsgi_pass      django;
        }
    }
uWSGI配置
在虚拟机上安装了uWSGI,在环境外依然需要安装uWSGI,通过上面的经验在这里安装一个文件也变得很简单。
sudo pip install uwsgi

以下内容ini格式的内容,保存后命名为 blogproject.ini
[uwsgi]
chdir = /var/www/lee/blogproject/ #模块位置 
module = blogproject.wsgi  #模块名称
home = /var/www/lee/  #项目位置
master = true
processes = 5
socket = :8001   #与楼上的那个内容挂钩,还有其他写法,没深入研究
chmod-socket = 666
vacuum = true
uwsgi_params文件的内容,请注意它没有任何后缀,保存后名称定义为:uwsgi_params
uawsgi_param  QUERY_STRING       $query_string;
uwsgi_param  REQUEST_METHOD     $request_method;
uwsgi_param  CONTENT_TYPE       $content_type;
uwsgi_param  CONTENT_LENGTH     $content_length;
uwsgi_param  REQUEST_URI        $request_uri;
uwsgi_param  PATH_INFO          $document_uri;
uwsgi_param  DOCUMENT_ROOT      $document_root;
uwsgi_param  SERVER_PROTOCOL    $server_protocol;
uwsgi_param  REQUEST_SCHEME     $scheme;
uwsgi_param  HTTPS              $https if_not_empty;
uwsgi_param  REMOTE_ADDR        $remote_addr;
uwsgi_param  REMOTE_PORT        $remote_port;
uwsgi_param  SERVER_PORT        $server_port;
uwsgi_param  SERVER_NAME        $server_name;
上述的两个配置文件,在保存后需要上传到项目地址中去。

自启动配置
vi /etc/rc.local
键盘I,切换至输入模式,在内容的最底部放置下面的命令。
/usr/local/bin/uwsgi --ini /var/www/lee/blogproject.ini
输入完成后,按ESC键,输入:wq保存并退出环境
内容截止到了这里,整个项目的部署已经完成。

重启下服务器看看
命令:reboot

辛辛苦苦编辑的内容,如需转载请注明出处:https://www.lijinlong.cc/fuwuqi/hjpz/1962.html



20170701补充内容

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

1.jpg


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

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


  • #cat 的用途是查看
  • cat /var/log/nginx/access.log  #网站日志
  • 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


评分

参与人数 6荣誉 +35 鱼币 +32 贡献 +19 收起 理由
zy877054618 + 5 + 2 + 3
Undo + 5 + 5 + 3 热爱鱼C^_^
ooxx7788 + 5 + 5 李总威武
yongxi + 5 + 5 + 3 威武霸气
~风介~ + 10 + 10 + 10 李总威武!
新手·ing + 5 + 5 支持~

查看全部评分

本帖被以下淘专辑推荐:

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2017-6-4 09:44:41 | 显示全部楼层
本帖最后由 李金龙 于 2017-6-4 09:46 编辑

上述的内容是一气呵成的,不知道里面是否还存在对未来有影响的东西,如果有麻烦告诉我,并能提供解决方案。感谢
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-6-4 09:49:21 | 显示全部楼层
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2017-6-4 20:09:38 | 显示全部楼层
真腻害 尽管我完全不懂你这是干啥
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-6-9 21:35:59 | 显示全部楼层
666
可以写作3个帖子了都,很有帮助。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-8-11 11:44:09 | 显示全部楼层
李总,不再出个零基础用Django做网页的教程嘛。
教教我们怎么设置url,怎么往网页里面添加文字,图片,表格等等
教教怎么运用html模板快速造网页
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-8-11 11:48:08 | 显示全部楼层
ooxx7788 发表于 2017-8-11 11:44
李总,不再出个零基础用Django做网页的教程嘛。
教教我们怎么设置url,怎么往网页里面添加文字,图片,表格 ...

咦   这个工作量就大了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-9-30 10:12:37 | 显示全部楼层
请问一下,你这里的Ubuntu是服务器吧?
请问知道怎么把虚拟机里面的Ubuntu搭建成跟服务器一样么?我虚拟机使用的是virtualbox,Ubuntu是16.04,我已经在虚拟机上面运行了django,跟本机没有什么区别,但是在部署的时候遇到2个问题:1、服务器上面是绑定了域名的,所以nginx的服务是填写的服务器域名,但是虚拟机上面是没有绑定域名的,那虚拟机的nginx服务中server_name 填写什么?2、关键问题,虚拟机的IP需要怎么设置才能让主机能访问?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-9-30 10:14:33 | 显示全部楼层
我感觉没有nginx+gunicorn简单,我用这2个搭建的,gunicorn用起来比uwsgi简单
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-10-2 07:15:53 | 显示全部楼层
gopythoner 发表于 2017-9-30 10:14
我感觉没有nginx+gunicorn简单,我用这2个搭建的,gunicorn用起来比uwsgi简单

收到
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-11-9 23:57:43 | 显示全部楼层
gopythoner 发表于 2017-9-30 10:12
请问一下,你这里的Ubuntu是服务器吧?
请问知道怎么把虚拟机里面的Ubuntu搭建成跟服务器一样么?我虚拟机 ...

填ip
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-11-9 23:58:35 | 显示全部楼层

我也是用二者搭建完成了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

匿名鱼油  发表于 2017-11-30 21:35:15
我只想知道window版本下怎么装uwsgi,  os.name()在window下没有这个
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具

发表于 2018-4-5 12:23:37 | 显示全部楼层
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2018-11-18 18:39:52 | 显示全部楼层
这个8000端口 不是启动django时候占用了? uwsgi应该是8001把?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-10-25 17:13:00 | 显示全部楼层
感谢分享,学习下
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-11-26 12:32

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表