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

  

原文地址:https://www.cnblogs.com/xuyaping/p/7807935.html