目录
前言
上传以及服务器环境部分
uwsgi部分
nginx部分
静态文件
阿里云端口权限开启
先概括下访问流程:
首先客户端发起请求,这里会有TCP的握手,三次握手结束之时,客户端会带上http数据给服务器(请求行,请求头,请求体),服务器会接收到http协议,Nginx会接收到数据,然后根据里面的配置进行判断是否需要转发,如果是static,直接拿资源返回,如果需要在转发继续socket连接后面的应用,这里就是uwsgi,该程序可以理解为DJango的运行环境,只要都遵循wsgi协议,都能和uwsgi和DJango一样连接起来,DJango处理并返回
DJango开发环境
Mac OS High sierra 10.13.4
mintoudeMacBook-Pro-2:~ mintou$ python3 -m django --version
2.1
mintoudeMacBook-Pro-2:~ mintou$ ipython3
Python 3.6.3 (v3.6.3:2c5fed86e0, Oct 3 2017, 00:32:08)
Type 'copyright', 'credits' or 'license' for more information
IPython 6.3.1 -- An enhanced Interactive Python. Type '?' for help.
这里一个简单的DJango应用就不介绍了,详细的可以看这里
首先明白一点,阿里云服务买了之后(怎么买就不说了),Nginx是已经有了的,而且有自带的Python2.7,但是我们还是要装3x以上的Python来玩,毕竟新时代马上要来了,看看需要安装什么先。这里提到的几个名词画一张图介绍下
Python3.6详细安装教程还有pip3
centos安装mysql
vim 批量注释,会用到的
参考文章之一
介绍完了一些安装和逻辑,开始操作、
首先开发的电脑上安装的我们都要在服务器上安装
pip3 freeze > plist.txt
pip3 install -r plist.txt
就拿最简单的Demo为例,以下是目录
更改根目录下的setting.py
# SECURITY WARNING: don't run with debug turned on in production!
DEBUG = False
ALLOWED_HOSTS = ['*']
...
# Static files (CSS, JavaScript, Images)
# https://docs.djangoproject.com/en/2.1/howto/static-files/
STATIC_URL = '/static/'
STATICFILES_DIRS = [
os.path.join(BASE_DIR, 'static')
]
STATIC_ROOT='/var/www/upload/static/'
STATIC_ROOT在开发环境没用,生产环境用来指定收集静态文件到哪里,只有这个作用,上面两个是开发环境测试用的,Nginx里面的静态文件地址也配成STATIC_ROOT一样的
小结:
1.搭建一个DJango应用,修改配置文件到生产部署之前的配置
2.pip3 导出安装包语句
3.ftp推上去
以下是推上去的目录
[root@izj6cgebrvv84gtntwiyagz static]# cd /root/Desktop/uploadProject/upload/
[root@izj6cgebrvv84gtntwiyagz upload]# ls -a
. .. .DS_Store manage.py static templates upload userinfo uswgi.log uwsgi.ini uwsgi.pid
pip3 install uwsgi
cd到项目根目录,创建一个uwsgi.ini的文件
[uwsgi]
socket=外网ip:端口(使用nginx连接时,使用socket) 127.0.0.1:8000或者是阿里云私有ip地址
# http=外网ip:端口(直接做web服务器,使用http) 没有nginx的使用,一般不管他
chdir=项目根目录 (/root/Desktop/uploadProject/upload)
wsgi-file=项目中wsgi.py文件的目录,相对于项目根目录 (upload/wsgi.py)
processes=4
threads=2
master=True
pidfile=uwsgi.pid
daemonize=uswgi.log
小结:
nginx目录
cd /usr/sbin/nginx 安装目录
vim /etc/nginx/nginx.conf 配置文件所在目录
那么nginx是uwsgi之前最先收到数据的,咱们打开nginx配置文件修改路由,指向uwsgi程序
# For more information on configuration, see:
# * Official English Documentation: http://nginx.org/en/docs/
# * Official Russian Documentation: http://nginx.org/ru/docs/
user nginx;
worker_processes auto;
error_log /var/log/nginx/error.log;
pid /run/nginx.pid;
# Load dynamic modules. See /usr/share/nginx/README.dynamic.
include /usr/share/nginx/modules/*.conf;
events {
worker_connections 1024;
}
http {
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
access_log /var/log/nginx/access.log main;
sendfile on;
tcp_nopush on;
tcp_nodelay on;
keepalive_timeout 65;
types_hash_max_size 2048;
include /etc/nginx/mime.types;
default_type application/octet-stream;
# Load modular configuration files from the /etc/nginx/conf.d directory.
# See http://nginx.org/en/docs/ngx_core_module.html#include
# for more information.
include /etc/nginx/conf.d/*.conf;
以上不用我们管 下面一个个的server就是配置的
server {
listen ip地址:80 default_server;
#listen [::]:80 default_server;
server_name _;
# root /usr/share/nginx/html;
# Load configuration files for the default server block.
#include /etc/nginx/default.d/*.conf;
# 默认转发到 DJango
location / {
include uwsgi_params;
# 这里配置的和项目下面的uwsgi.ini里面socket一样才能接收
uwsgi_pass ip地址:8002;
}
# 在服务器配置的静态文件目录
location /static {
alias /var/www/upload/static/;
}
# 这个是例外,给我的iOS客户端配置的bundlejs/ActivityPage.js来使用 不转发到DJango
location /bundlejs {
alias /usr/share/nginx/html/bundlejs/;
}
error_page 404 /404.html;
location = /40x.html {
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
}
}
以下是阿里云nginx默认的配置
#
# server {
# listen 8001;
# #listen [::]:80 default_server;
# server_name upload;
# #root /usr/share/nginx/html;
#
# # Load configuration files for the default server block.
# include /etc/nginx/default.d/*.conf;
#
# location / {
# include uwsgi_params;
# uwsgi_pass 127.0.0.1:8002;
# }
#
# #error_page 404 /404.html;
# # location = /40x.html {
# #}
#
# #error_page 500 502 503 504 /50x.html;
# # location = /50x.html {
# #}
# } 37,0-1 37%
这是配置文件,我们需要改的就是server,如果不改默认端口80那一坨,也可以直接另起一个监听另一个端口比如8000.
在server下添加新的location项,指向uwsgi的ip与端口
location / {
include uwsgi_params;将所有的参数转到uwsgi下
uwsgi_pass uwsgi的ip与端口;
}
我们试着改了默认的server,让用户输入ip之后直接指向我们配置的页面即可。如果listen对了,默认是会匹配location里面的的正则,匹配到了就路由到指定ip+端口,static是配置不走DJango的,如127.0.1.1/static/xxxx.png,这样的url直接拿服务器上的资源,不走Django,直接返回,配置好了nginx,指向uwsgi,再指向DJango服务,一套就配置好了。
小结:
本地开启的DJango应用,我们执行
python3 manage.py runserver
之后,我们是可以根据img标签里面的src=/static/xxx.png获取静态资源,那么我们在服务器上启用了nginx之后,静态资源就由nginx来拦击处理了,如上配置的static正则,指定了一个路径,该路径就是我们服务器上自己配置的静态资源路径。
location /static {
alias /var/www/upload/static/;
}
一开始这些目录是没有的,需要自己创建
sudo chmod 777 /var/www/upload
mkdir static
这里就可以再看下项目根目录下的setting.py了
# Static files (CSS, JavaScript, Images)
# https://docs.djangoproject.com/en/2.1/howto/static-files/
STATIC_URL = '/static/'
STATICFILES_DIRS = [
os.path.join(BASE_DIR, 'static')
]
STATIC_ROOT='/var/www/upload/static/'
上面两个是开发环境下的,最后一个配置是采集DJango的静态文件的。不想出错的话直接配置好三个即可,上面两个是针对项目目录来的,下面的STATIC_ROOT是采集用的,就是服务器上的一个地址,和nginx查找的static配置文件匹配。
执行
python3 manage.py collectstatic
就会把DJango项目中的STATIC_URL对应的目录下的资源采集到STATIC_ROOT目录,让nginx查找匹配。采集资源如下,和项目是一一对应的,只是由nginx来匹配了
[root@izj6cgebrvv84gtntwiyagz nginx]# cd /var/www/upload/
[root@izj6cgebrvv84gtntwiyagz upload]# ls -a
. .. static
[root@izj6cgebrvv84gtntwiyagz upload]# cd static/
[root@izj6cgebrvv84gtntwiyagz static]# ls
admin bundlepic js weexJS
[root@izj6cgebrvv84gtntwiyagz static]#
小结
进入安全组配置,开启指定端口权限
至此,输入你的阿里云ip地址,就可以访问到DJango写的匹配到urls.py下的第一个views.py对应的html模板页面,逻辑搞明白了,后面就是写模块了,后面改了什么就重启nginx或者uwsgi
DJango 2.1教程