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端口,查看是否正常访问
评论暂时关闭