Django安装与部署
1.Django安装
可以使用conda安装Django,conda的安装可以参考另一篇文章(Post not found: Anaconda之Linux安装和使用 Anaconda之Linux安装和使用)
1 | ## 安装Django |
1.Django 环境搭建 (这里有说明需要安装virtualenv virtualenvwrapper,但是我始终无法成功安装virtualenvwrapper-win)
2.【anaconda】Anaconda3搭建Django步骤 (这个使用了conda创建了虚拟环境而且使用了conda安装了Django并运行)
3.Django+Ubuntu WEB部署(超详细版) (使用uWSGI启动Django)
问题
(1) Building wheel for uwsgi (setup.py) … error
安装uwsgi的时候,一下子就报了红了。
第一次尝试的是安装python3,结果虽然安装成功了python2-devel,但是安装uwsgi还是失败了。
1 | ## CentOS8 |
第二次的时候就是尝试参考文章3、4中的方法,使用conda安装uwsgi
1 | conda install -c conda-forge uwsgi |
1.CentOS7安装uwsgi报错 (我使用了yum install python-devel -y,出现了No match for argument: python-devel)
2.pip安装uwsgi报错 (这篇文件介绍了CentOS8的安装方法,我同样使用了CentOS8,安装了python3-devel,但是安装uwsgi的时候,还是报错了。)
3.Pip 安装uwsgi报错,用conda吧 (这篇文章中使用的是conda install -c conda-forge uwsgi命令安装的uwsgi)
4.conda-forge / packages / uwsgi (这个感觉是conda官方说的如何安装uwsgi)
(2) Connection broken: OSError(“(104, 'ECONNRESET')”)’, OSError(“(104, ‘ECONNRESET’)”)
看问题就是说使用国外的源太慢了,下载不了,使用国内的源代替试试,下面是清华的源。
1 | conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/free/ |
这时候~/.condarc文件就变成了如下内容:
1 | channels: |
根据我的测试,最好把上面文件中的- defaults去掉,否则,还是会请求国外的源,最后导致失败。
1.Ubuntu中使用Anaconda安装一些包出现:Connection broken: OSError(“(104, 'ECONNRESET')”)
2.Anaconda更新失败简单解决[CondaHTTPError: HTTP 000 CONNECTION FAILED for url]
2.Django的debug模式启动
(1)
1 | ## 本地8000端口启动 |
(2) windows上开发,我这里使用conda新建了一个虚拟环境(注意,要在cmd窗口中,不能再PowerShell窗口中操作)
1 |
|
3.uwsgi部署
(1) 编写uwsgi.ini文件
1 | [uwsgi] |
(2) 使用uwsgi命令行启动
1 | ## 后台启动 |
其中–chdir指定了我的项目的根目录,–module指定了我的wsgi文件所在位置 比如:
1.Python/WSGI 应用快速入门 (这里介绍了如何使用uwsgi启动一个Django程序)
2.uwsgi 的启动、停止、重启
3.uwsgi后台运行/背后运行/守护运行的方法
4.如何用 uWSGI 托管 Django
5.Django UWSGI设置(上线部署) (这里对ini配置文件都做了说明,缺少的就是配置http端口)
6.如何用 uWSGI 托管 Django (这个其实有点简单了,连配置端口都没有)
问题
(1) Internal Server Error
使用uwsgi部署了Django,调用服务的时候,总是出现了:。
同时我发现了: no python application found, check your startup logs for errors 这个提示,循着这个思路,我又尝试了好的的方法
1 | ## 错误一 |
1.【非常重要】CentOS7中uwsgi+nginx+Flask配置部署总结及为什么会提示Internal Server Error错误【官方有说明的】 (这个加–callable参数不行)
2.uWSGI出现错误:no python application found, check your startup logs for errors
3.初次使用uwsgi:no python application found, check your startup logs for errors (加-plugin python 参数,这个方法是不行的)
(2) Invalid http_host header
成功启动了uwsgi之后,访问相关的内容,出现了host错误:Invalid HTTP_HOST header: ‘192.168.1.90:8000’. You may need to add ‘192.168.1.90’ to ALLOWED_HOSTS.
可以修改settings.py文件中的ALLOWED_HOSTS
1 | ALLOWED_HOSTS = ['*'] |
1.Invalid http_host header
(3) 使用ini文件部署,没有监听8000端口
当我使用ini文件的方式进行启动的的时候,使用:ps -aux |grep uwsgi 命令,查询启动进程,发现uwsgi已经启动了
但是我使用了 netstat -ntulp |grep 8000 命令查询端口的时候,却发现没有相应的程序监听端口
uwsgi.ini中的配置:
1 |
|
解决方法就是把上面的http配置改为http-socket配置
1 | ## 只能本机8000端口访问 |
1.#从根本解决# uwsgi –ini uwsgi.ini 无法绑定端口 (查询端口占用,其他的对我基本没用)
2.uwsgi后台运行(守护运行)和停止运行的方法 (加了一个-d参数,就实现了后台服务的方式启动)
3.uwsgi.ini (这是uwsgi.ini的详细配置,包括了如何与nginx进行通讯的配置,还有启动,重启和停止uwsgi都有说明)
4.uwsgi 配置总结 (这篇文章的配置总结,和上一篇的有些不同,这里的nginx不像上面文章中说的,使用的是端口的通讯,这篇文章使用的是文件和nginx中upstream的方式定义了uwsgi和nginx通讯)
4.使用nginx部署
使用nginx转发请求,其实说简单也简单。
(1) 配置uwsgi.ini
1 | socket = 127.0.0.1:8001 |
(2) 配置nginx
1 | http { |
(3) 但是如果我不限作为根目录部署,如何使用二级目录呢,比如:location /test,如果还是原样配置的话,就会把全部的路径都转发到django上去,但是我的django上没有这个路径
最后就会造成没有这个路径的错误
所以解决方法,就是只能使用proxy_pass进行转发,修改server配置:
1 | ## upstream 改成8000的http端口,而不是socket的8001端口 |
参考文章中有这么一段话:
uwsgi_pass,注意这个配置项无需也不能写出http://和后面的URI,这也就意味着,原生请求的URI只能一一对应到uwsgi_pass设置的值的这个根URL上去。
我尝试了下面的多个配置,使用uwsgi_param也是不行的。
1 | location /HdxsPipeDecision/ { |
uwsgi_params 文件是啥?它就是为了方便,仅此而已!
这是官网的一句话,但是还是没有打消我对这个参数的含义的困惑。
1.配置Nginx+uwsgi更方便地部署python应用
2.Nginx支持 (这个好像更加的简单,只有uwsgi_pass和uwsgi_params,没有用到upstream)
3.DJANGO + UWSGI部署
4.Nginx upstream配置说明负载均衡 (使用upstream进行负载均衡的操作)
5.Nginx通过二级目录(路径)映射不同的反向代理,规避IP+端口访问 (这里有使用proxy_pass进行二级代理的方法)
6.一文弄懂Nginx的location匹配 (关于尾部到底要不要加斜杠的问题,加了斜杠,转发时就不会带着匹配到的路由)
7.【Flask】 利用uWSGI和Nginx发布Flask应用 (虽然是Flask,但是也是写了uwsgi_pass的规则)
8.使用 uWSGI 和 Nginx 部署 Django 项目 (使用socket开销低,但是还是部署到了根路径上了。)
9.如何将django部署从顶级目录迁移到子目录下(NGINX UWSGI DJANGO) (这里有一个uwsgi_param SCRIPT_NAME /prism ,这个uwsgi_param的作用还是没有搞清楚)
10.使用uWSGI和nginx来设置Django和你的web服务器 (这是uWSGI的doc,也是部署在根目录下的)
11.Nginx支持 (这篇文章讲了uwsgi_params 文件是啥?就是为了方便而已)
12.uwsgi协议魔术变量 (这里讲了uwsgi_params中各个变量的含义到底是什么)