我在云服务器上搭建了mysql redis,项目在docker 里面 所以 uwsgi 也是在docker 里面
前提 python3 manager.py runserver 0.0.0.0:8000 是 ok 的
我的nginx 的功能就是把80 端口 指向 8000 端口(因为我的docker 就是8000:8000),没啥特殊功能
配置如下
events {
worker_connections 1024;
}
http {
include mime.types;
default_type application/octet-stream;
sendfile on;
server {
listen 443 ssl;
server_name 域名;
ssl_certificate /etc/xxx.pem;
ssl_certificate_key /etc/xx.key;
ssl_session_timeout 5m;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_ciphers AESGCM:ALL:!DH:!EXPORT:!RC4:+HIGH:!MEDIUM:!LOW:!aNULL:!eNULL;
ssl_prefer_server_ciphers on;
resolver 114.114.114.114;
location / {
root /data/vue/dist/; # dist文件不要放在root目录下,会导致500 or 403
index index.html;
}
location /api/ {
proxy_pass http://127.0.0.1:8000;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header REMOTE-HOST $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}
}
备注:
这个api 可以更改,但是后端的接口需要支持 比如 以前是 user/data/,现在这么配置了 接口的urls.py 需要修改成 api/user/data/
vue 项目中请求后端的url
python urls.py 配置
在docker 里面 启动 python3 manager.py runserver 0.0.0.0:8000
这个时候 你访问的ip 应该能看到你的主页
为啥要用uwsgi 我看人家都这么玩 所以我就加上了 我个人的需求不用uwsgi 也是可以的
目录结构 如下
mkdir uwsgi_conf
cd uwsgi_conf
touch uwsgi.pid
touch uwsgi.status
uwsgi 配置 如下
[uwsgi]
# http = 0.0.0.0:8088
# the local unix socket file than commnuincate to Nginx
# 指定项目执行的端口号
# 用nginx的时候就配socket , 直接运行的时候配 http
# socket = :8000
# the base directory (full path)
# 项目的目录
chdir = /opt/CY_Home/GoodCY
# Django's wsgi file
wsgi-file = GoodCY/wsgi.py
# uwsgi的进程名称前缀
procname-prefix-spaced=GoodCY
# 文件修改,自动加载
py-autoreload=1
# maximum number of worker processes
# 开启的进程数量
processes = 2
# thread numbers startched in each worker process
threads = 10
# 每个进程worker数
workers = 5
thread-stacksize = 512
buffer-size = 65535
# monitor uwsgi status
# stats = 0.0.0.0:9191
# 启用主进程
master=true
# clear environment on exit
# 当服务器退出的时候自动清理环境
vacuum = true
# 最大连接数量
max-requests=10000
# 设置日志目录
daemonize=/opt/logs/uwsgi.log
# 超市
harakiri = 60
# 指定IP端口,web访问入口
http=0.0.0.0:8000
# 指定多个静态文件:static目录和media目录,也可以不用指定该静态文件,在nginx中配置静态文件目录
# uwsgi有自己的配置语法,详细可参考官网,无需写绝对路径,可以用循环、判断等高级配置语法
for =static
static-map=/static=%(chdir)/%(_)
endfor =
# uWSGI进程号存放
pidfile=%(chdir)/uwsgi_conf/uwsgi.pid
# monitor uwsgi status 通过该端口可以监控 uwsgi 的负载情况
# 支持ip+port模式以及socket file模式
stats=%(chdir)/uwsgi_conf/uwsgi.status
启动 uwsgi
uwsgi --ini /opt/CY_Home/GoodCY/uwsgi_conf/home_uwsgi.ini
停止
uwsgi --stop /opt/CY_Home/GoodCY/uwsgi_conf/uwsgi.pid
就可以了
注意事项:
1、django debug False python3 manager.py runserver 静态资源加载不了咋办?
强制加载 与debug True 一致
python3 manage.py runserver --insecure
2、在setting 里面 获取环境变量的DEBUG
DEBUG = os.environ['DEBUG'] 这样是错误的 获取的是字符串 不是布尔值
可以这样
DEBUG = os.environ['DEBUG'] is 'True'
这样 就可以了
3、mysql redis 等 放在云服务器 千万别开通所有的外网访问 因为一个不小心 就成肉鸡了
所以 云服务器的安全组要用起来 redis 指定内网ip 访问 在配置里面
4、若访问不通 你可以看下防火墙、安全组是不是没开通 80端口 https 看看443 有没有开通