环境:html
服务器ip:192.168.0.110前端
centos服务器 6.4 + mysql 5.6 + django1.11 +nginx 1.13.7 + uwsgi 2.0.18python
uWSGI是一个Web服务器,它实现了WSGI协议、uwsgi、http等协议。Nginx中HttpUwsgiModule的做用是与uWSGI服务器进行交换。mysql
要注意 WSGI / uwsgi / uWSGI 这三个概念的区分。linux
uWSGI的主要特色以下nginx
工做原理:c++
nginx负责创建一个本地的工做环境,就是本地服务器,相似于pycharm的 run调试django同样,能够打开一个 http:127.0.0.1的本地服务页面web
并开启一个可以使用的端口。sql
uwsgi 负责转发,将外网发过来的请求转发给 nginx,nginx就像处理内部访问同样来处理请求。(因此他们的端口明显不同)django
nginx+uwsgi+django是咱们经常使用的django部署方式。nginx做为最前端的服务器,他负责接收全部的客户端请求,对于请求的静态文件,由nginx服务器本身完成,由于它具备很好处理静态文件的能力,性能进行过优化,支持高并发量;uWSGI服务器做为支持服务器,是用来服务nginx的,nginx将请求的动态文件交给uWSGI进行处理。uWSGI实现了uwsgi、wsgi和http协议,uwsgi协议是uWSGI自定义的协议,定义的是框架(django)和服务器对接的接口。
Nginx和uWSGI都是Web服务器 ,Nginx负责静态内容,uWSGI负责Python这样的动态内容,请求先交由Nginx,若是是静态内容就本身处理了,若是是动态内容就交给uWSGI服务器,uWSGI服务器处理整个Django项目的Python代码,响应请求,原路返回
nginx + uwsgi 提供高并发
mysql安装 参考
http://www.cnblogs.com/mingerlcm/p/6792503.html
为centos系统增长编译功能
yum install gcc-c++
安装nginx依赖包
yum install pcre pcre-devel
安装wget
yum install wget
安装这个模块是为了让uwsig支持使用“-x"选项,能经过xml文件启动项目
yum install libxml*
# yum install openssl-devel bzip2-devel expat-devel gdbm-devel readline-devel sqlite-devel
下载python3
Python下载源 1.下载软件包 # wget https://www.python.org/ftp/python/3.6.1/Python-3.6.1.tgz 2.解压 # tar -xzvf Python-3.6.1.tgz 3.建立目录 #mkdir -p /usr/local/python3.6 4.把Python3.6安装到 /usr/local/python3.6 目录 # ./configure --prefix=/usr/local/python3.6 # make && make install 5.建立软链接 ln -s /usr/local/python3.6/bin/python3.6 /usr/bin/python3 ln -s /usr/local/python3.6/bin/pip3 /usr/bin/pip3 6.查看Python版本 #python --version Python 3.6.1
pip3 install pymysql
pip3 install django==1.11
pip3 install uwsgi
为了在终端中使用uwsgi命令,执行如下命令
ln -s /usr/local/python3.6/bin/uwsgi /usr/bin/uwsgi3
专门用来放咱们的django项目
mkdir /www/
将你的django项目放到你想放的路径下,例如/www/,假设咱们的Django项目名为"myproject"
在你的django项目下新建 myproject.xml,内容以下:
[root@mysql myproject]# vim myproject.xml
<uwsgi> <socket>127.0.0.1:8002</socket><!-- 内部端口,自定义 --> <chdir>/www/myproject</chdir><!-- 项目路径 --> <module>myproject.wsgi</module> <processes>4</processes> <!-- 进程数 --> <daemonize>uwsgi.log</daemonize><!-- 日志文件 --> </uwsgi>
wq保存
下载nginx,执行解压命令
wget http://nginx.org/download/nginx-1.13.7.tar.gz
tar -zxvf nginx-1.13.7.tar.gz
进入解压后的nginx-1.13.7文件夹,编译安装nginx
[root@mysql myproject]# cd /soft/ [root@mysql soft]# cd nginx-1.13.7 ./configure --prefix=/usr/local/nginx --with-http_ssl_module make && make install
nginx通常默认安装好的路径为/usr/local/nginx
在/usr/local/nginx/conf/中打开nginx.conf,加入如下内容,先备份nginx.conf文件
[root@mysql nginx-1.13.7]# cd /usr/local/nginx/conf/ [root@mysql conf]# cp nginx.conf nginx.conf.bak
vim nginx.conf
server { listen 8001; # 暴露给外部访问的端口 server_name localhost; charset utf-8; #access_log logs/host.access.log main; location / { include uwsgi_params; uwsgi_pass 127.0.0.1:8002; # 外部访问8001就转发到内部8002 } location /static/ { alias /www/myproject/statics/; #项目静态路径设置 }
关闭 selinux
vim /etc/selinux/config
SELINUX=enforcing
改成disabled
SELINUX=disabled
iptables加上容许8001,8002,3306,80端口
vim /etc/sysconfig/iptables
配置文件配置
-A INPUT -m state --state NEW -m tcp -p tcp --dport 22 -j ACCEPT -A INPUT -m state --state NEW -m tcp -p tcp --dport 3306 -j ACCEPT -A INPUT -m state --state NEW -m tcp -p tcp --dport 8001 -j ACCEPT -A INPUT -m state --state NEW -m tcp -p tcp --dport 80 -j ACCEPT -A INPUT -m state --state NEW -m tcp -p tcp --dport 8002 -j ACCEPT
配置好重启iptables
[root@mysql myproject]# service iptables restart
启动nginx
[root@mysql conf]# /usr/local/nginx/sbin/nginx
进入你的django项目路径,执行如下命令:
uwsgi3 -x myproject.xml
注:执行该xml后django就算是启动了,内部的nginx服务也将被启动,uwsgi将可以链接到nginx的服务了,此时网络应该是通畅的了。
以上步骤都没有出错的话,打开你的浏览器,输入如下连接,http://192.168.0.110:8001 (请将该ip替换成你的服务器ip)
网站访问成功!
部署完成以后发现django后台admin访问时无样式
解决方法以下:
1.先打开django项目中settings.py文件(/www/myproject/myproject/settings.py),添加以下配置
[root@mysql myproject]# vim settings.py
STATIC_ROOT = os.path.join(BASE_DIR, "statics")
2.而后在django项目下 执行 python3 manage.py collectstatic 此命令是搜集静态文件的命令,
[root@mysql myproject]# python3 manage.py collectstatic You have requested to collect static files at the destination location as specified in your settings: /www/myproject/statics This will overwrite existing files! Are you sure you want to do this? Type 'yes' to continue, or 'no' to cancel: yes
搜集后的静态文件存放在/home/myproject/statics/中
3.从新启动uwsgi和nginx
[root@mysql myproject]# /usr/local/nginx/sbin/nginx -s reload
[root@mysql myproject]# pkill uwsgi [root@mysql myproject]# uwsgi3 -x myproject.xml [uWSGI] parsing config file myproject.xml
能够看到admin样式