linux + nginx +uwsgi + Django + python 环境部署,nginxuwsgi


本人部署python环境踩过很多坑,在百度到一些资料后,自己进行整理,希望能帮到各位猿友
****一 安装nginx**** 

说明:此处我是安装的openresty,,没有直接安装nginx ,若不需要安装openresty,可以直接yum install nginx

1, 安装依赖包
	yum install -y gcc gcc-c++ readline-devel pcre-devel openssl-devel tcl perl
2,安装LUA
		cd /usr/local/software
		wget http://luajit.org/download/LuaJIT-2.0.5.tar.gz
    	tar zxvf LuaJIT-2.0.5.tar.gz
		cd LuaJIT-2.0.5
		make
		make install
		export LUAJIT_LIB=/usr/local/lib
		export LUAJIT_INC=/usr/local/include/luajit-2.0
3,安装openresty
	wget --no-check-certificate https://openresty.org/download/openresty-1.13.6.2.tar.gz
	tar -xzvf openresty-1.13.6.2.tar.gz
	cd openresty-1.13.6.2/
	./configure --with-luajit
		gmake
		gmake install


4,lua相关模块就已经安装完成,利用下面命令查看。
	/usr/local/openresty/nginx/sbin/nginx -V

设置Nginx为服务和开机启动 
	vi /etc/rc.d/init.d/nginx


	#!/bin/bash
	# Tengine Startup script# processname: nginx
	# chkconfig: - 85 15
	# description: nginx is a World Wide Web server. It is used to serve
	# pidfile: /var/run/nginx.pid
	# config: /usr/local/nginx/conf/nginx.conf
	nginxd=/usr/local/openresty/nginx/sbin/nginx
	nginx_config=/usr/local/openresty/nginx/conf/nginx.conf
	nginx_pid=/usr/local/openresty/nginx/logs/nginx.pid
	RETVAL=0
	prog="nginx"
	# Source function library.
	. /etc/rc.d/init.d/functions
	# Source networking configuration.
	. /etc/sysconfig/network
	# Check that networking is up.
	[ ${NETWORKING} = "no" ] && exit 0
	[ -x $nginxd ] || exit 0
	# Start nginx daemons functions.
	start() {
	if [ -e $nginx_pid ];then
	echo "tengine already running...."
	exit 1
	fi
	echo -n $"Starting $prog: "
	daemon $nginxd -c ${nginx_config}
	RETVAL=$?
	echo
	[ $RETVAL = 0 ] && touch /var/lock/subsys/nginx
	return $RETVAL
	}
	# Stop nginx daemons functions.
	stop() {
	echo -n $"Stopping $prog: "
	killproc $nginxd
	RETVAL=$?
	echo
	[ $RETVAL = 0 ] && rm -f /var/lock/subsys/nginx /usr/local/nginx/logs/nginx.pid
	}
	reload() {
	echo -n $"Reloading $prog: "
	#kill -HUP `cat ${nginx_pid}`
	killproc $nginxd -HUP
	RETVAL=$?
	echo
	}
	# See how we were called.
	case "$1" in
	start)
	start
	;;
	stop)
	stop
	;;
	reload)
	reload
	;;
	restart)
	stop
	start
	;;
	
	status)
	status $prog
	RETVAL=$?
	;;
	*)
	echo $"Usage: $prog {start|stop|restart|reload|status|help}"
	exit 1
	esac
	exit $RETVAL


保存退出
chmod 775 /etc/rc.d/init.d/nginx   #赋予文件执行权限
chkconfig  --level 012345 nginx on   #设置开机启动
service nginx start

**二 安装python**

linux 下自带 python2,我的系统中的版本是python2.6.6
可以通过 python --version 查看版本,

此处安装的是python3 ,由于python2和python是相互独立的,无须卸载python2版本

1,选择版本
进入 Python下载页面,选择需要的版本。
# wget https://www.python.org/ftp/python/3.5.2/Python-3.5.2.tgz
# tar -zxvf Python-3.5.2.tgz   解压
  进入解压缩后的目录,安装配置:
# cd Python-3.5.2/
# ./configure 

执行 ./configure 时,如果报错:
configure: error: no acceptable C compiler found in $PATH
说明没有安装合适的编译器。这时,需要安装/升级 gcc 及其它依赖包。
# yum install make gcc gcc-c++ 

完成之后,重新执行:
# ./configure 
编译 & 安装
配置完成之后,就可以编译了:
# make 
# make install 

验证
安装成功以后,就可以查看 Python 的版本了:
# python -V
(https://img-blog.csdnimg.cn/20181227174841879.png)
# python3 -V
	Python 3.5.2

2,设置默认版本
在 /usr/local/bin/ 下有一个 python3 的链接,指向 bin 目录下的 python 3.5。
查看 Python 的路径,在 /usr/bin 下面。可以看到 python 链接的是 python 2.6,所以,执行 python 就相当于执行 python 2.6。
# ls -al /usr/bin | grep python
-rwxr-xr-x.  1 root root      11216 12月  1 2015 abrt-action-analyze-python
lrwxrwxrwx.  1 root root          7 8月  30 12:11 python -> python2
lrwxrwxrwx.  1 root root          9 8月  30 12:11 python2 -> python2.6
-rwxr-xr-x.  1 root root       7136 11月 20 2015 python2.7

将原来 python 的软链接重命名:
# mv /usr/bin/python /usr/bin/python.bak

将 python 链接至 python3:
# ln -s /usr/local/bin/python3 /usr/bin/python

这时,再查看 Python 的版本:
# python -V
Python 3.5.2

3,配置yum

升级 Python 之后,由于将默认的 python 指向了 python3,yum 不能正常使用,需要编辑 yum 的配置文件:
# vi /usr/bin/yum

同时修改:(若此文件存在)
# vi /usr/libexec/urlgrabber-ext-down

将 #!/usr/bin/python 改为 #!/usr/bin/python2.6,保存退出即可。 备注;将模块指向原python


4,安装pip 

可以先用pip3测试下是否能用,不能用再进行安装
1、安装pip前需要前置安装setuptools (若已安装可以跳过此步骤)
wget --no-check-certificate  https://pypi.python.org/packages/source/s/setuptools/setuptools-19.6.tar.gz#md5=c607dd118eae682c44ed146367a17e26
tar -zxvf setuptools-19.6.tar.gz
cd setuptools-19.6.tar.gz
python3 setup.py build
python3 setup.py install
报错:RuntimeError: Compression requires the (missing) zlib module
我们需要在linux中安装zlib-devel包,进行支持。
yum install zlib-devel
需要对python3.5进行重新编译安装。
cd Python3.5
make && make install
又是漫长的编译安装过程。
再重新安装setuptools
python3 setup.py build
python3 setup.py install
2.安装pip
wget --no-check-certificate  https://pypi.python.org/packages/source/p/pip/pip-8.0.2.tar.gz#md5=3a73c4188f8dbad6a1e6f6d44d117eeb
tar -zxvf pip-8.0.2.tar.gz
cd pip-8.0.2
python3 setup.py build
python3 setup.py install

3,   安装mysql 驱动

首先安装一下mysql-devel    如果已安装就忽略这一步
yum install mysql-devel

然后就可以直接安装mysqlclient了
pip install mysqlclient

**三 安装 uwsgi** 

uwsgi 参数详解:http://uwsgi-docs.readthedocs.org/en/latest/Options.html
pip install uwsgi
uwsgi --version    # 查看 uwsgi 版本

测试 uwsgi 是否正常:
新建 test.py 文件,内容如下:
def application(env, start_response):
    start_response('200 OK', [('Content-Type','text/html')])
    return [b"Hello World"]
    
然后在终端运行:
uwsgi --http :8001 --wsgi-file test.py
在浏览器内输入:http://127.0.0.1:8001,查看是否有"Hello World"输出,若没有输出,请检查你的安装过程。


**四 安装Django**
pip3 install Django   直接pip安装

安装成功后,在你需要建项目的目录下安装Django包
django-admin startproject XXX

此时若没有错误提醒,你的项目包就安装完成了,


这个时候就可以开始测试,在项目根目录下运行下面的命令
python manage.py runserver 0.0.0.0:8000

此时若提示 sqlite3 模块不存在或错误的时候
yum install sqlite3

再测试,若再报 URIs not supported 错误
查看下sqlite3版本

若是3.8以下的有两种解决方法:
1,重新安装sqlite3 的 3.8版本。
2,下面方法最简单:
/home/python3/lib/python3.6/site-packages/django/db/backends/sqlite3/base.py 
不出意外是上面这个文件,你也可以在提示错误的信息中看看是文件位置。
在其中将 uri 改成 False


再次测试,若还有问题,那么我也没有遇见过
若没有报错。那么在浏览其中访问 127.0.0.1:8000,若是公网,将127换一哈。
能访问就OK

五 配置
一切就绪之后,开始配置
1.nginx配置:
说明,由于我安装的是openresty,所以nginx配置文件位置和裸nginx不太一样


找到nginx.conf位置,在当前目录下新建conf目录,并在nginx.conf下加载此目录 include ./conf/*.conf;

在conf目录下新建一个配置文件,名称你随意,粘贴下面内容
server {
	listen       8080 default_server;
	server_name  www.jjzw.xyz;
	index  index.html index.htm index.py home.py;
	root   /home/jjzw;

  		# 指定静态文件路径
	location /static/ {
		alias /home/jjzw/jjzw/static/;
	}
    #重定向到uwsgi的配置
	 location / {
    	include  uwsgi_params;
    	uwsgi_pass  127.0.0.1:8001;
    	index  index.html index.htm home.py index.py;
    	client_max_body_size 35m;
	}
}


上面是我的配置,监听8080端口,若访问此端口,将指向8001端口。交由uwsgi处理。当然,你也可以过滤文件格式,进行重定向处理。
2,uwsgi配置
在项目根目录下新建script目录,并在其中新建uwsgi.ini和uwsgi.log两个文件,将下面复制到uwsgi.ini中

	[uwsgi]
	#监听的ip 端口号。此处要与nginx中的切换地址一致,且只能为本地ip ,非公网ip
	socket = 127.0.0.1:8001
	#项目根目录。第一层目录
	chdir           = /home/jjzw
	#wsgi.py 的位置
	module          = jjzw.wsgi
	#wsgi-file = jjzw/wsgi.py
	
	# master
	master          = true
	processes       = 2
	
	threads = 2
	max-requests = 6000
	# 指定静态文件
	static-map=/static=/home/jjzw/jjzw/static
	# ... with appropriate permissions - may be needed
	chmod-socket    = 664
	# clear environment on exit
	vacuum          = true
	#日志存放地点,会自动让uwgsi在后台工作
	daemonize = /home/jjzw/script/uwsgi.log
	
上面是配置,监听端口和nginx中保持一致,我这里都是8001.
配置完成之后,在script目录下启动uwsgi
uwsgi --ini uwsgi.ini
重启nginx  
service nginx restart
此时可在浏览器中访问你的服务器8080端口,查看是否正常访问

相关内容

    暂无相关文章