1200字范文,内容丰富有趣,写作的好帮手!
1200字范文 > django+nginx+uwsgi项目部署文档整理

django+nginx+uwsgi项目部署文档整理

时间:2022-03-01 09:31:19

相关推荐

django+nginx+uwsgi项目部署文档整理

django+nginx+uwsgi项目部署文档整理

参考文章:/qq_42314550/article/details/81805328

一、python安装

1、首先,在根目录底下建一个目录,存放python3.6.3版本,linux自带的为python2版本,命令如下:

mkdir python3.6.3cd python3.6.3

2、接着,使用下面的命令下载Python-3.6.3.tar.xz的安装包,对应版本可以去/ftp/python/对应起来:

wget /ftp/python/3.6.3/Python-3.6.3.tar.xz

3、接着解压这个压缩包,命令如下:

tar xvfPython-3.6.3.tar.xz

4、接着编译安装,进入解压后的目录,执行底下的一个shell脚本configure进行检查,接着编译安装,编译安装过程有点慢,命令如下:

cd Python-3.6.3./configure --prefix=/usr/local/python3.6.3 --enable-shared CFLAGS=-fPICmakemake install

5、但是当输入python –V时,发现python版本还是2.7,那是因为没有把python快捷链接的还是原来的python2.7版本,我们要改一下

(1)、先备份python, 这里插一句,备份后要删除,不然会报错:

mv/usr/bin/python/usr/bin/python2.7.bak

(2)、删除旧的python的软连接,创建新的python2和python3的软连接,命令如下:

cd /usr/bin rm-f python2ln-s python2.7python2

(3)、链接到python3.6.3

ln -s /usr/local/python3.6.3/bin/python3 /usr/bin/python

注:这里如果执行命令错误的话,会说不存在python这个目录,可以新建一个目录,后面再删掉,之后再重新执行命令即可,不过通常新的服务器不会出现这个问题

(4)、到这里还有一个问题,就是python3.6.3安装完成后,你会发现yum用不了了,这是yum用的是原来2.7的版本,而刚刚我们把python改为3.6.3了,所以用不了了,需要编辑yum文件:

vi/usr/bin/yum把第一行的usr/bin/python改成/usr/bin/python2.7Esc->:wq保存,就可以了。vi /usr/libexec/urlgrabber-ext-down把第一行的usr/bin/python改成/usr/bin/python2.7Esc->:wq保存,就可以了。

(5)、如果输入pip命令不存在时,需设置软链接:

ln -s /usr/local/python3.6.3/bin/pip3 /usr/bin/pip

二、uwsgi安装

1、安装 pip install uwsgi

2、测试uwsgi

在你的同项目名目录中写一个test.py ,执行:vim test.py ,填写如下内容:

python2写法:# test.pydef application(env, start_response):start_response('200 OK', [('Content-Type','text/html')])return "Hello World"python3写法:(我用的是这个)# test.pydef application(env, start_response):start_response('200 OK', [('Content-Type','text/html')])return [b"Hello World"]

3、然后执行shell命令,前提是服务器已经开放了这个端口,不过默认服务器都会开放80这个默认端口的:

uwsgi --http :80 --wsgi-file test.py

4、访问网页:http://110.108.64.23:80/看在网页上是否有Hello World

注意IP地址写你自己的主机地址,如在本地请写127.0.0.1

三、django安装:

1、安装命令:

pipinstall Django==2.0.3

2、查看django是否安装成功,并是否为所安装的版本,输入下面命令,没报错显示django版本即可:

pythonimport djangodjango.VERSION

四、部署项目,把项目代码放入服务器当中,这里以test项目为例:

1、进入test项目中:

cd /project/test

2、新建一个test_wsgi.py:vi test_wsgi.py,代码如下:

"""WSGI config for test project.It exposes the WSGI callable as a module-level variable named ``application``.For more information on this file, see/en/2.0/howto/deployment/wsgi/"""import os# 线上配置Linux需要import sysfrom django.core.wsgi import get_wsgi_application# 线上配置Linux需要sys.path.append('/project/test') # 项目路径os.environ.setdefault("DJANGO_SETTINGS_MODULE", "test.settings")application = get_wsgi_application()

3、连接django和uwsgi,实现简单的web服务器,在test工作目录底下,执行命令:

uwsgi --http :80 --module test_wsgi

访问网页:http://110.108.64.23:80/

五、nginx安装,Nginx 一般有两个版本,分别是稳定版和开发版,您可以根据您的目的来选择这两个版本的其中一个,下面是把 Nginx 安装到 /usr/local/nginx 目录下的详细步骤:

1、安装编译nginx源代码,命令各自如下:

cd /usr/local/srcwget /download/nginx-1.16.0.tar.gztar -zxvf nginx-1.16.0.tar.gzcd nginx-1.16.0./configuremakemake install

注:如果编译错误,可能缺少openssl包,使用命令yum install openssl openssl-devel即可

2、编译成功之后,便可以启动nginx:

(1)、查看nginx配置文件是否正常:/usr/local/nginx/sbin/nginx -t

(2)、启动nginx:/usr/local/nginx/sbin/nginx

(3)、重启nginx:/usr/local/nginx/sbin/nginx-s reload

(4)、启动成功后可以访问:http://110.108.64.23:80/看是否出现nginx访问成功的页面,如报错可查看/usr/local/nginx/logs/error.log命令

六、实现Nginx与uWSGI的连接,为了实现Nginx与uWSGI的连接,两者之间将采用soket来通讯方式。在本节中,我们将使用uWSGI配置文件的方式来改进uWSGI的启动方式。 假定你的项目目录是 /project/test我们将要让Nginx采用8000端口与uWSGI通讯,请确保此端口没有被其它程序采用。 注意,请确定你在上面步骤中 test_wsgi.py 文件已经存在了。

1、新建一个XML文件:test_django_socket.xml,其中配置了连接端口,项目目录,进程数,日志名,内容如下:

<!-- 若以socket方式访问 --><uwsgi><socket>:8000</socket><chdir>/project/test</chdir><module>test_wsgi</module><processes>4</processes> <!-- 进程数 --><daemonize>test_uwsgi.log</daemonize></uwsgi><!-- 若以http方式访问 --><uwsgi><http>:8000</http><chdir>/project/test</chdir><module>test_wsgi</module><processes>4</processes> <!-- 进程数 --><daemonize>test_uwsgi.log</daemonize></uwsgi>

注:如果后面使用命令uwsgi -x 解析这个xml,出现 parser error : Extra content at the end of the document 错误时,在首行加入<document>,末行加入</document>,即可!

2、配置nginx文件,使用命令vi /usr/local/nginx/conf/nginx.conf,其中只需要改其相关的部分即可,如果多个项目的话就增多一个server节点即可,其中把static存放静态资源文件目录,media存放上传下载文件目录,templates存放模板目录都配置了:

server {listen 80;#server_name localhost;server_name 110.108.64.23;#charset koi8-r;#access_log logs/host.access.log main;location / {include uwsgi_params;uwsgi_pass 110.108.64.23:8000;uwsgi_param UWSGI_CHDIR /project/test;uwsgi_param UWSGI_SCRIPT /project/test;uwsgi_param UWSGI_MODULE /project/test.test_wsgi:application;uwsgi_read_timeout 1800;uwsgi_send_timeout 300;proxy_read_timeout 300;root html;index index.html index.htm;}location /static/ {# 所有静态资源文件都放在collected_static文件目录底下了# 用命令python manage.py collectstatic 即可,故下面一行注释# alias /project/test/static/;alias /project/test/collected_static/;index index.html index.htm;}location /media/ {alias /project/test/media/;}location /templates/ {alias /project/test/templates/;}#error_page 404 /404.html;# redirect server error pages to the static page /50x.html#error_page 500 502 503 504 /50x.html;location = /50x.html {root html;}# proxy the PHP scripts to Apache listening on 127.0.0.1:80##location ~ \.php$ {# proxy_pass http://127.0.0.1;#}# pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000##location ~ \.php$ {# root html;# fastcgi_pass 127.0.0.1:9000;# fastcgi_index index.php;# fastcgi_param SCRIPT_FILENAME /scripts$fastcgi_script_name;# include fastcgi_params;#}# deny access to .htaccess files, if Apache's document root# concurs with nginx's one##location ~ /\.ht {# deny all;#}}

3、配置完成后,需启动uwsgi服务器:

cd /project/testuwsgi -x test_django_socket.xml

然后查看底下配置的test_uwsgi.log有没有报错信息,比如缺少库呀,如果没错就证明正常启动了。

比如缺少PyMySQL的库,就使用pip install PyMySQL==0.8.0

4、貌似好像成功了,但是其实不然,不能访问。

原来是这个端口8000没开放,如果部署多个项目的话,nginx的端口还有uwsgi的端口都需要在阿里云服务器底下添加并开放。

如果端口开放了还不行,那就是防火墙限制了,需在iptables底下加上一条:

vi /etc/sysconfig/iptables-A INPUT -m state --state NEW -m tcp -p tcp --dport 8000 -j ACCEPT

注:这里默认的nginx的80端口也要添加到防火墙底下去,不然也会访问不到:

vi /etc/sysconfig/iptables-A INPUT -m state --state NEW -m tcp -p tcp --dport 80 -j ACCEPT

重启防火墙:

service iptables restart

5、其中还需要改一个settings.py文件,不然会报Invalid HTTP_HOST header:错误,这个settings.py数据库连接也需要改成线上的数据库连接信息,不然连接不上数据库,会报错。

6、接着,访问http://110.108.64.23网址即可访问系统了,如果访问不到的话,要看下nginx错误日志还有uwsgi的日志,排除问题。

7、添加多一个django项目的话类似上面的操作, 即第六步的相关操作,特别注意:加多个端口,防火墙和阿里云服务器都要开放多个对应的端口,不然有可能你日志什么都没报错,就是访问不了,如果访问不了,可重启服务器,然后重新开启nginx、uwsgi服务,看nginx配置文件和uwsgi的日志会不会报错。

8、每次修改项目代码之后,都需要重新启动nginx和uwsgi

(1)、nginx重启命令:

/usr/local/nginx/sbin/nginx -s reload

(2)、uwsgi不太一样,需杀死uwsgi进程再重新开启,有4个相关联的uwsgi服务,需全部杀死再重启:

ps -ef | grep uwsgikill -s 9 uwsgi的进程号cd /project/testuwsgi -x project_test_socket.xml

七、总结:

(1)、在这之前我是安装过apache服务器还有相关的一些依赖库,其中如果想用apache部署django项目的可以参考下面的链接,其中也有不少坑:

Linux下安装Apache服务:/wcwnina/p/8029156.html

django项目利用mod_wsgi+Apache部署到linux服务器上:/yufen9987/article/details/76718290

Centos pip 安装uwsgi 报错“fatal error: Python.h: No such file or directory”:/eating-gourd/p/8578007.html,其中这篇文章后面用到的命令要根据你python版本来,我这边是用了yum install python36-devel命令,但是最后会导致python版本升级到对应3.6最新的版本,不过没多大影响。

(2)、如果遇到这种情况,centos7中python3.6报错ModuleNotFoundError: No module named '_ssl',或者pip安装库时出现:

pip is configured with locations that require TLS/SSL, however the ssl module in Python is not available.Could not fetch URL https:*******: There was a problem confirming the ssl certificate: Can't connect to HTTPS URL because the SSL module is not available. - skipping

可以参考下面的文章:/qq_23889009/article/details/100887640

需要改下/python3.6.3/Python-3.6.3/Modules 安装目录底下的Setup.dist,找到下面几行,注释掉:

接着重新编译,注意 ./configure --prefix=/usr/local/python3.6.3 这里无须加参数,具体参考下面的链接:

/qq_23889009/article/details/100887640

(3)、这是我部署好之后整理的,可能在实际操作中有很多问题,我一个开发,搞到运维去了,我也是醉了!

以上内容,仅供参考,如有问题,敬请见谅并提出来,谢谢!

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。