Django部署
1. 租云服务器
2. 买服务器
租:公网IP,111.13.101.208,ping baidu.com得到的公网ip 租域名:www.pythonav.com <-> 111.13.101.208,域名和公网ip建立关系。
3. 编写代码
4. 拷贝代码到服务器[Python,Django,pymysql,sqllite],拷贝到虚拟机
settings.py ALLOWED_HOSTS = ['服务器IP',] # 例ALLOWED_HOSTS =['192.168.11.62',] python manage.py runserver 0.0.0.0:8001 # 运行在服务器上,本机的话是127.0.0.1:8001 使用:SOCKET DJANGO内部写的,性能比较低,所以有了uwsgi操作。 遵循wsgi协议: wsgiref
以上已经完成了最简单的django部署
5. uwsgi
pip3 intall uwsgi 利用uwsgi对一个.py文件进行简单部署: app.py def application(env, start_response): start_response('200 OK', [('Content-Type','text/html')]) return [b"Hello World"] uwsgi --http :9001 --wsgi-file app.py uwsgi --http :9002 --wsgi-file foobar.py --master --processes 4 --threads 2 # 开四个进程,2个线程 对Django文件部署: # 不处理静态文件 uwsgi --http :9002 --chdir /data/s1/deploy --wsgi-file deploy/wsgi.py --master --processes 4 --threads 2 #uswgi首先声明监听9002端口,到Django程序目录/data/s1/deploy ,启动Django目录中deploy/wsgi.py文件 # 处理静态文件 settings.py: STATICFILES_DIRS = ( os.path.join(BASE_DIR,'static'), ) STATIC_ROOT = os.path.join(BASE_DIR,'uuuuuu') # uuuuuu是所有的静态文件收集到的目录,uuuuuu目录会被自动创建 python manage.py collectstatic # 收集所有的静态目录到STATIC_ROOT配置的uuuuuu目录中 运行完collectstatic命令后,将STATICFILES_DIRS和STATIC_ROOT都注释掉。 uwsgi --http :9003 --chdir /data/s1/deploy --wsgi-file deploy/wsgi.py --static-map /static=/data/s1/deploy/uuuuuu # /data/s1/deploy/uuuuuu 是收集到的所有静态文件的目录。 #上面的uwsgi命令太长,所以写一个配置文件,写在Django project目录下,vim wsgi_http.ini wsgi_http.ini [uwsgi] http = 0.0.0.0:9004 chdir = /data/s1/deploy wsgi-file = deploy/wsgi.py # processes = 4 # threads = 2 static-map = /static=/data/s4/deploy/uuuuuu uwsgi wsgi_http.ini # 以后就不用输入那么长的命令了,直接运行该条命令就行。
以上因为uwsgi静态文件处理不如Nginx,所以使用Nginx来处理。 动态的请求url经过uwsgi再到Django程序。 用户发请求,最外层先经过nginx,nginx里面进行判断,判断如果是静态文件就去uuuuu目录取,取到后再交给nginx。 如果是动态请求,则转交给uwsgi,再由uwsgi调用Django代码,Django代码处理完成后再交给uwsgi,再交给Nginx。 然后把动态请求和静态文件处理结果经由nginx返回给用户。 nginx做的是反向代理。
6. Nginx
yum install nginx 可执行目录/etc/init.d/nginx,命令 start/stop/restart /etc/init.d/nginx start /etc/init.d/nginx stop /etc/init.d/nginx restart 配置文件 /etc/nginx/nginx.conf 将静态文件配置到nginx.conf中 server{ ... location /static { alias /data/s1/deploy/uuuuuu; } ... } nginx与uwsgi的连接是基于socket连接,nginx 80端口 --> uwsgi 8001端口 Django project目录下,vim wsgi_sock.ini wsgi_sock.ini [uwsgi] socket = 127.0.0.1:8001 chdir = /data/s1/deploy wsgi-file = deploy/wsgi.py # processes = 4 # threads = 2 static-map = /static=/data/s1/deploy/uuuuuu 配置完成后,运行: uwsgi wsgi_sock.ini /etc/init.d/nginx start 访问url 192.168.11.62/index.html,Django部署成功。
注意:需要修改/etc/selinux/config
vim /etc/selinux/config SELINUX = disabled