1.当我们项目写好之后,如何去部署到正式服上去那,部署的时候,我们需要三个东西,项目代码,nginx, uwsgi这三个东西,至于nginx如何安装,我在上一篇博客上已经写了,至于nginx如何代理,nginx还需要配置一下,我们先看一下一个请求过来的流程图:
2. 我们先配置nginx,我上一篇博客中nginx已经安装好了,接下来配置就可以了
2.1 执行命令:cd /usr/local/nginx/conf
2.2 然后打开:vim nginx.conf (nginx.conf就是nginx的配置文件)
2.3 将nginx.conf清空(vim在命令模式下:ggdG)将下面的配置粘贴进去:
user nobody; # 这里是权限 user root root;
worker_processes auto;
worker_rlimit_nofile 100000;
#error_log logs/error.log;
#error_log logs/error.log notice;
#error_log logs/error.log info;
#pid logs/nginx.pid;
events {
worker_connections 1024;
}
http {
include mime.types;
default_type application/octet-stream;
log_format main '$remote_addr $remote_user $time_iso8601 $http_host "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
proxy_headers_hash_max_size 51200;
proxy_headers_hash_bucket_size 6400;
server_names_hash_bucket_size 512;
access_log logs/access.log main;
access_log on;
sendfile on;
#tcp_nopush on;
#keepalive_timeout 0;
keepalive_timeout 65;
#gzip on;
fastcgi_intercept_errors on;
client_max_body_size 1000m;
#cache
proxy_cache_path /usr/local/nginx/cache/one levels=1:2 keys_zone=one:10m max_size=10g; # 等一下我们需要在这个路径下创建文件夹
proxy_cache_key "$host$request_uri";
# default_server
include /usr/local/nginx/conf/conf.d/*.conf; # 将具体配置卸载另一个目录下,比较清晰一点
}
2.4 然后我们在/usr/local/nginx/ 路径下创建文件夹 cache 然后在cache下在创建one文件夹,用于缓存,不然启动nginx时会报错
2.5 在/usr/local/nginx/conf/下创建conf.d文件夹,然后在conf.d文件夹创建一个目录master.conf(注意是目录),将下面的配置放进去
server {
listen 80; # 监听端口
server_name 127.0.0.1; # 服务器域名或者ip地址
charset utf-8; # 编码
add_header Strict-Transport-Security "max-age=31536000";
client_max_body_size 75M;
root /home/vir/two_fashion; # 项目路径
location / {
try_files $uri $uri/ /manage/index.html; # 前端打的包
}
location /admin { # 请求后端接口时只能已admin开头,
include uwsgi_params;
uwsgi_pass 127.0.0.1:8000; # 对应uwsgi里面的端口
uwsgi_read_timeout 300;
uwsgi_send_timeout 300;
proxy_read_timeout 300;
add_header X-Frame-Options SAMEORIGIN;
add_header Access-Control-Allow-Origin "*";
add_header Access-Control-Allow-Methods 'GET, POST, PUT, OPTIONS, DELETE';
add_header Access-Control-Allow-Headers 'DNT,X-Mx-ReqToken,Keep-Alive,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type,Authorization';
add_header Access-Control-Max-Age 300;
if ($request_method = 'OPTIONS') {
return 204;
}
}
location /user { # 请求后端接口时只能已admin开头,
include uwsgi_params;
uwsgi_pass 127.0.0.1:8000; # 对应uwsgi里面的端口
uwsgi_read_timeout 300;
uwsgi_send_timeout 300;
proxy_read_timeout 300;
add_header X-Frame-Options SAMEORIGIN;
add_header Access-Control-Allow-Origin "*";
add_header Access-Control-Allow-Methods 'GET, POST, PUT, OPTIONS, DELETE';
add_header Access-Control-Allow-Headers 'DNT,X-Mx-ReqToken,Keep-Alive,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type,Authorization';
add_header Access-Control-Max-Age 300;
if ($request_method = 'OPTIONS') {
return 204;
}
}
}
到这里,重新启动nginx, nginx就配置好了,接下里配置uwsgi
3. 在自己项目的虚拟环境中安装uwsgi:pip install uwsgi, 创建软连接:ln -s /usr/local/python3/bin/uwsgi /usr/bin/uwsgi
3.1 然后cd到自己项目下与manage.py同目录下,然后touch uwsgi.ini,并将下面的代码放进去:
# myweb_uwsgi.ini file
# 配置域应该是uwsgi,记住这个不能丢,否则会报错
[uwsgi]
# Django-related settings
# uwsgi监听的socket,可以为socket文件或ip地址+端口号,用nginx的时候就配socket , 直接运行的时候配 http, http-socket = 127.0.0.1:8080
socket = :8000 # 与nginx一致
# the base directory (full path)
# 指定项目的目录,在app加载前切换到当前目录
chdir = /home/vir/two_fashion/two_fashion
# Django s wsgi file
# Django's wsgi file # Django的wsgi文件,用来加载QmpythonBlog/wsgi.py这个模块
module = two_fashion.wsgi
# process-related settings
# master 启动主进程
master = true
# maximum number of worker processes
processes = 2 # 进程数量
threads = 1 # 线程数量
# ... with appropriate permissions - may be needed
# ... with appropriate permissions - may be needed 设置socket的权限
chmod-socket = 664
# clear environment on exit
reload-on-as = 512
reload-on-rss = 256
# clear environment on exit 退出的时候是否清理环境,自动移除unix Socket 和 Pid 文件
vacuum = true
pidfile=/tmp/two_fashion.pid
# 日志文件路径
daemonize = /home/vir/two_fashion/log/uwsgi.log
# 是否只是错误信息写入日志
disable-logging = true
# 指定虚拟环境目录
virtualenv = /root/.virtualenvs/two_fashion
3.2 然后编写脚本启动uwsgi(在manage.py同目录下):touch 名称.sh,然后将下面的代码放进去:
#!bin/bash
cmd="/usr/local/bin/uwsgi /home/vir/two_fashion/two_fashion/uwsgi.ini --post-buffering 32768 --buffer-size 32768"
#启动服务方法
start(){
eval $cmd
echo "Server started."
}
stop(){
killall -9 uwsgi
echo "Server stoped."
}
#重新启动
restart(){
stop
sleep 1s
start
}
case "$1" in
"start")
start
;;
"stop")
stop
;;
"restart")
restart
;;
*)
echo "$0 start|stop|status|restart"
;;
esac
3.3 脚本重启命令:sh 名称.sh restart
4. 到这里,就部署好了