注意:不要把Django项目放到root目录下面,会因为权限问题导致部署失败的。
0.django项目结构
(myenv) [root@lab73 opt]# tree djc/
djc/
├── app01
│?? ├── admin.py
│?? ├── apps.py
│?? ├── __init__.py
│?? ├── migrations
│?? │?? ├── __init__.py
│?? │?? └── __pycache__
│?? │?? └── __init__.cpython-37.pyc
│?? ├── models.py
│?? ├── __pycache__
│?? │?? ├── admin.cpython-37.pyc
│?? │?? ├── __init__.cpython-37.pyc
│?? │?? ├── models.cpython-37.pyc
│?? │?? ├── tasks.cpython-37.pyc
│?? │?? └── views.cpython-37.pyc
│?? ├── tasks.py
│?? ├── tests.py
│?? └── views.py
├── db.sqlite3
├── djc
│?? ├── celery.py
│?? ├── __init__.py
│?? ├── __pycache__
│?? │?? ├── celery.cpython-37.pyc
│?? │?? ├── __init__.cpython-37.pyc
│?? │?? ├── settings.cpython-37.pyc
│?? │?? ├── urls.cpython-37.pyc
│?? │?? └── wsgi.cpython-37.pyc
│?? ├── settings.py
│?? ├── urls.py
│?? └── wsgi.py
├── manage.py
├── script
│?? ├── uwsgi.ini
│?? ├── uwsgi.log
│?? ├── uwsgi.pid
│?? └── uwsgi.sock
└── static
1.安装uwsgi 和 nginx
pip install uwsgi
yum -y install nginx
2.编辑uwsgi配置文件 uwsgi.ini
[root@lab73 script]# pwd
/opt/djc/script
vim uwsgi.ini
[uwsgi]
#项目目录
chdir=/opt/djc
#指定项目application
module=djc.wsgi:application
#指定sock的文件路径(nginx使用)
socket=/opt/djc/script/uwsgi.sock
# 进程个数(processess一样效果)
workers=2
#指定启动时的pid文件路径
pidfile=/opt/djc/script/uwsgi.pid
#指定ip及端口(配置nginx就不需要单独启动uwsgi需要填写)
#http=172.16.0.4:8001
#指定静态文件(配置nginx不需要,单独启动uwsgi加载静态文件)
#static-map=/static=/var/www/orange_web/static
#启动uwsgi的用户名和用户组
uid=root
gid=root
#启用主进程
master=true
# 启用线程
enable-threads=true
#自动移除unix Socket和pid文件当服务停止的时候
vacuum=true
#设置日志目录
daemonize=/opt/djc/script/uwsgi.log
#不记录信息日志,只记录错误以及uwsgi内部消息
disable-logging=true
# 序列化接受的内容,如果可能的话
thunder-lock=true
3.启动uwsgi服务
[root@lab73 script]# uwsgi --ini uwsgi.ini
[root@lab73 script]# ll
total 12
-rw-r--r-- 1 root root 919 May 27 23:26 uwsgi.ini
-rw-r----- 1 root root 2628 May 27 23:29 uwsgi.log
-rw-rw-rw- 1 root root 5 May 27 23:27 uwsgi.pid
srwxrwxrwx 1 root root 0 May 27 23:27 uwsgi.sock
4.收集django项目的静态文件
#djc.settings.py
STATIC_ROOT = os.path.join(BASE_DIR, "static")
(myenv) [root@lab73 djc]# python manage.py collectstatic --noinput
静态文件都放置到了static目录里面
5.配置nginx文件
[root@lab73 script]# cat /etc/nginx/conf.d/djc.conf
server {
listen 80; # 我要监听那个端口
server_name 192.168.60.73; # 你访问的路径前面的url名称ip地址也可以
#pid /var/run/nginx.pid; #进程文件
error_log /var/log/nginx/error.log; #错误日志定义等级,[ debug | info | notice | warn | error | crit ]
access_log /var/log/nginx/access.log main; # Nginx日志配置
charset utf-8; # Nginx编码
gzip_types text/plain application/x-javascript text/css text/javascript application/x-httpd-php application/json text/json image/jpeg image/gif image/png application/octet-stream; # 支持压缩的类型
# 指定项目路径uwsgi
location / {
include uwsgi_params; # 导入一个Nginx模块他是用来和uWSGI进行通讯的
uwsgi_connect_timeout 30; # 设置连接uWSGI超时时间
uwsgi_pass unix:///opt/djc/script/uwsgi.sock; # 指定uwsgi的sock文件所有动态请求就会直接丢给他
}
# 指定静态文件路径
location /static/ {
alias /opt/djc/static/; # 4.收集django项目的静态文件
}
}
5.启动nginx
systemctl start nginx
6.关闭uwsgi
(myenv) [root@lab73 script]# uwsgi --stop uwsgi.pid
原文:https://blog.51cto.com/jackor/2822926