ubantu+nginx+uwsgi+django部署
Posted X小白的逆袭之旅
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了ubantu+nginx+uwsgi+django部署相关的知识,希望对你有一定的参考价值。
1.更新ubantu的apt
apt-get update
必要时候更新系统: apt-get upgrade
2.远程连接服务器
ssh 用户名@ip
上传代码 : scp 本地文件夹/文件 用户名@ip:远程存放位置
3.安装数据库
apt-get install mysql-server mysql-client libmysqlclient-dev
(ps:如果不安装libmysqlclent-dev,接下来安装mysql-python可能会报错)
安装完成以后通过 mysql -u用户名 -p密码 进入mysql,创建对应的数据库。
4.安装redis
apt-get install redis-server
确认redis是否运行 netstat -antup / netstat -ntpl / ps -ef|gerp redis
5.安装python环境
a.安装pip: apt-get install python-pip
b.安装python-dev: apt-get install python-dev
c.安装项目环境: pip install -r 环境文件
(ps 如果要加快速度需要换镜像元: pip install -r 环境文件 -i https://pypi.tuna.tsinghua.edu.cn/simple gevent)
6.创建数据库对应的表:
a.一般情况下:Python manage.py makemigrations puyhon manage.py migrate
b.本项目: python manage.py migrate auth
因为 kombu 的两个应用 kombu_transport_django 和 djkombu 会产生数据表冲 突,所以我们需要先运行
python manage.py migrate kombu_transport_django --fask-intial
python manage.py migrate djkombu --fake-initial
同步数据库: Python manage.py migrate
7.安装uWSGI:
pip install uwsgi
a.在项目同级目录下创建conf文件夹,进入conf里创建uwsgi.ini文件配置环境
1 [uwsgi] 2 socket = 127.0.0.1:3031 3 #使用nginx连接时使用,Django程序所在服务器地址 4 chdir = /home/mmc/mmcsite 5 #项目目录 6 wsgi-file = mmcsite/wsgi.py 7 #项目中wsgi.py文件的目录,相对于项目目录 8 processes = 4 9 #进程数 10 threads = 2 11 #线程数 12 stats = 127.0.0.1:9191 13 #在指定的地址上,开启状态服务
1 [uwsgi] 2 #使用nginx连接时使用,Django程序所在服务器地址 3 socket=10.211.55.2:8001 4 #直接做web服务器使用,Django程序所在服务器地址 5 #http=10.211.55.2:8001 6 #项目目录 7 chdir=/Users/delron/Desktop/mmc/iot 8 #项目中wsgi.py文件的目录,相对于项目目录 9 wsgi-file=mmcsite/wsgi.py 10 # 进程数 11 processes=4 12 # 线程数 13 threads=2 14 # uwsgi服务器的角色 15 master=True 16 # 存放进程编号的文件 17 pidfile=uwsgi.pid 18 # 日志文件,因为uwsgi可以脱离终端在后台运行,日志看不见。我们以前的runserver是依赖终端的 19 daemonize=uwsgi.log 20 # 指定依赖的虚拟环境 21 virtualenv=/Users/delron/.virtualenv/meiduo
1 [uwsgi] 2 # 项目目录 3 chdir=/aaa/opwf_dir/opwf/ 4 # 启动uwsgi的用户名和用户组 5 uid=root 6 gid=root 7 # 指定项目的application 8 module=opwf.wsgi:application 9 # 指定sock的文件路径 10 socket=/aaa/opwf_dir/script/uwsgi.sock 11 # 启用主进程 12 master=true 13 # 进程个数 14 workers=5 15 pidfile=/aaa/opwf_dir/script/uwsgi.pid 16 # 自动移除unix Socket和pid文件当服务停止的时候 17 vacuum=true 18 # 序列化接受的内容,如果可能的话 19 thunder-lock=true 20 # 启用线程 21 enable-threads=true 22 # 设置自中断时间 23 harakiri=30 24 # 设置缓冲 25 post-buffering=4096 26 # 设置日志目录 27 daemonize=/aaa/opwf_dir/script/uwsgi.log
b.uwsgi命令:
启动uwsgi uwsgi --ini uwsgi.ini
查看uwsgi是否启动成功 ps -ef|grep uwsgi
关闭uwsgi uwsgi --stop uwsgi.pid
8.安装Nginx:
apt-get install nginx
a.在/etc/nginx/conf.d里新建文件 项目名.conf(myproject.conf)配置nginx。
1 server { 2 listen 80; #监听的端口号 3 server_name 127.0.0.1; #服务器ip或者域名 4 location / { 5 #alias /home/mmc/mmcsite/web/; 6 root /home/mmc/mmcsite/web/; #静态文件地址路径 7 index index.html; #文件格式 8 } 9 #uwsgi配置 10 location ^~ /iot/ { 11 include uwsgi_params; 12 uwsgi_pass 127.0.0.1:3031; 13 } 14 #uwsgi_params文件是Nginx向uWSGI传递的参数,uwsgi_pass的意思动态内容请求都通过名为django的upstream传递给uWSGI,这使用文件socket的方式,那么与之前uwsgi.ini里的socket参数配置一致。 15 error_page 404 /404.html; 16 location = /40x.html { 17 } 18 error_page 500 502 503 504 /50x.html; 19 location = /50x.html { 20 } }
1 upstream meiduo { 2 server 100.211.55.2:8001; # 此处为uwsgi运行的ip地址和端口号 3 # 如果有多台服务器,可以在此处继续添加服务器地址 4 } 5 6 #gzip on; 7 server { 8 listen 8000; 9 server_name api.meiduo.site; 10 11 location / { 12 include uwsgi_params; 13 uwsgi_pass meiduo; 14 } 15 16 } 17 18 19 server { 20 listen 80; 21 server_name www.meiduo.site; 22 23 #charset koi8-r; 24 25 #access_log logs/host.access.log main; 26 location /xadmin { 27 include uwsgi_params; 28 uwsgi_pass meiduo; 29 } 30 31 location /ckeditor { 32 include uwsgi_params; 33 uwsgi_pass meiduo; 34 } 35 36 location / { 37 root /home/python/Desktop/front_end_pc; 38 index index.html index.htm; 39 } 40 41 42 error_page 500 502 503 504 /50x.html; 43 location = /50x.html { 44 root html; 45 } 46 47 }
1 server { 2 listen 80; 3 server_name 1.1.1.3; 4 access_log /var/log/nginx/access.log main; 5 charset utf-8; 6 gzip on; 7 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; 8 9 error_page 404 /404.html; 10 error_page 500 502 503 504 /50x.html; 11 # 指定项目路径uwsgi 12 location / { 13 include uwsgi_params; 14 uwsgi_connect_timeout 30; 15 uwsgi_pass unix:/aaa/opwf_dir/script/uwsgi.sock; 16 } 17 # 指定静态文件路径 18 location /static/ { 19 alias /aaa/opwf_dir/opwf/static_all/; 20 index index.html index.htm; 21 } 22 23 }
b.nginx命令
检查nginx配置是否正确 nginx -t
启动nginx service nginx start
关闭nginx service nginx stop
重启nginx service nginx restart
查看nginx是否启动 ps -ef|grep nginx
9.注意事项:
a.如果使用Django自带的admin,需要收集admin的静态文件(先于配置nginx执行)
STATIC_ROOT = os.path.jpin(os.path.dirname(os,path.dirname(BASE_DIR)), ‘font_end_pc/static‘)
(ps. font_end_pc/static为静态文件的路径)
python manage.py collectstatic
b.Django中的配置。
修改uwsgi.py里的配置,将开发模式下的setting换位生产环境下的setting。
os.environ.setdefault(‘DJANGO_SETTING_MODULE‘, ‘myproject.settings.prod‘)
setting里需要注意的项
1 DEBUG = True #生产环境下debug必须为False 2 3 ALLOWED_HOSTS = [..., ‘www.baidu.site‘] # 添加访问的域名或者ip 4 5 CORS_ORIGIN_WHITELIST = ( 6 ‘127.0.0.1:8080‘, 7 ‘localhost:8080‘, 8 ‘www.baidu.site:8080‘, 9 ‘api.baidu.site:8000‘, 10 ‘www.baidu.site‘, #设置跨域白名单 11 )
以上是关于ubantu+nginx+uwsgi+django部署的主要内容,如果未能解决你的问题,请参考以下文章
ubantu18.04 配置nginx与uwsgi(前后端分离)