nginx+uwsgi+django1.9+mysql+python2.7部署到CentOS6.5

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了nginx+uwsgi+django1.9+mysql+python2.7部署到CentOS6.5相关的知识,希望对你有一定的参考价值。

一、相关版本介绍

名称说明
服务器CentOS6.5
nginx1.12.1
python2.7.13
django1.9
mysql5.5.32
uwsgi2.0.15


下面介绍一下我的部署过程,针对不同的配置可能有所不同仅供参考:


二、操作系统基本配置

如果你的操作系统是本地的一台虚拟机,可能需要配置yum源和IP地址。关于yum源和IP地址的配置因为挺简单的,我这里就不详细的做介绍了,仅提供以下信息:

2.1配置yum源仓库:

配置文件地址:/etc/yum.repos.d

配置文件内容:

[c6-media]

name=localserver

baseurl=file:///media/CentOS_6.5_Final/

gpgcheck=0

enabled=1


2.2配置IP地址:

    打开配置文件:[[email protected]]# vim/etc/sysconfig/network-scrips/ifcfg-eth0

    配置文件内容EVICE=eth0

HWADDR=00:0C:29:4F:96:59

TYPE=Ethernet

UUID=05521fea-360e-47a5-b329-654087bcd9e3

ONBOOT=yes

NM_CONTROLLED=yes

BOOTPROTO=dhcp

修改完配置文件后重启服务:service networkrestart

  我这里配置的是用dhcp自动获取IP,也可以配置静态IP地址。




三、编译安装mysql

3.1安装cmake

3.1.1下载安装包

wget:cmake

3.1.2 编译安装

首先检查系统有没有安装mysql所需要的包

rpm –qa | grep gcc-c++ 
rpm –qa | grep ncurses-devel

如果系统没有安装,则安装:

yum install gcc-c++ -y
yum install ncurses-devel –y

cd到已下载安装包的所在目录,执行以下命令:

tar –zxvf cmake-2.8.8.tar.gz
cd cmake-2.8.5
./bootstrap;make;make install
cmake –version     #查看cmake版本

3.2安装配置mysql

3.2.1下载安装包

wget:mysql

3.2.2设置linux自动匹配环境变量

如果不是root账号,请切换到root账号下操作(su root

vim /etc/profile

将光标移至到文件末尾,添加以下语句:

PATH=$PATH:/sbin
export PATH=$PATH:/sbin

保存退出(wq

source/etc/profile  #该命令的作用是重新执行刚修改的初始化文件,使之立即生效。

3.2.3创建用户组

groupadd mysql
useradd –g mysql mysql –s /usr/sbin/nologin
mkdir /usr/local/mysql
mkdir /usr/local/mysql/data

3.2.4安装mysql

cd到已下载安装包的所在目录,执行以下命令:

tar –zxvf mysql-5.5.32.tar.gz
cd mysql-5.5.32
cmake–DCMAKE_INSTALL_PREFIX=/usr/local/mysql

注释:cmake的时候,参数可以不用那么多个,只要一个DCMAKE_INSTALL_PREFIX=/usr/local/mysql就行了,我们可以在my.cnf里面配置[mysql]中的内容

make && make install

如果需要更改配置,则

make clean
rm –f CmakeCache.txt

复制配置文件

cp support –files/my-medium.cnf/usr/local/mysql/my.cnf

设置权限

chmod +x /usr/local/mysql
chown –R mysql:mysql /usr/local/mysql

配置开机启动

cp/usr/local/mysql/support-files/mysql.server /etc/init.d/mysql
chmod +x /etc/init.d/mysql
chkconfig –list
chkconfig –add mysql
chkconfig mysql on
chkconfig –list mysql

修改my.cnf配置

vim /usr/local/mysql/my.cnf
[mysql]下添加:
datadir=/usr/local/mysql/data
default-storage-engine=MyISAM
log-error=/usr/local/mysql/mysql_error.log
pid-file=/usr/local/mysql/mysql.pid
user=mysql
tmpdir=/tmp

安装默认数据表

/usr/local/mysql/scripts/mysql_install_db–basedir=/usr/local/mysql –datadir=/usr/local/mysql/data –usr=mysql

启动mysql

servicemysql start

或者:

/etc/init.d/mysqlstart

设置mysql命令行路径

ln –s /usr/local/mysql/bin/mysql/usr/bin

测试mysql是否启动

1.查看是否有mysql进程

ps–ef | grep mysq

2.查看端口时候运行

netstat –tnl| grep 3306

至此mysql安装完成。



四、安装python

CentOS 6.5自带的python版本是2.6我们要升级到2.7的版本

python官网:https://www.python.org/downloads/

python安装包:Python-2.7.13.tgz

4.1安装devtoolset

yum install zlib-devel
yum install bzip2-devel
yum install openssl-devel
yum install ncurses-devel
yum install sqlite-devel

4.3编译安装python2.7.13

cdpython安装包所在的目录

tar –zxvf Python-2.7.13.tar.gz
./configure –prefix=/usr/local
make&&make altinstall

4.4python命令指向python 2.7.13

ln–s /usr/local/bin/python2.7 /usr/local/bin/python

4.5安装pip

首先到python网站下载pip程序包,解压后执行:

python setup.py install


如果没有安装setuptools系统会提示让你安装setuptools,那么在同样的网站上下载setuptools程序包,在安装setuptools之前要安装它的依赖包,为了让大家少踩点坑我把包名提供给大家(

appdirs、packaging、pyparsing、six将这些包下载下来解压安装后,再安装setuptools,然后安装pip包,安装成功。


注意:此时你的系统里会有两个pip,一个在python2.6下一个在python2.7下,默认的pip使用的是python2.6pip需要将pip命令映射到python2.7下的pip

ln –s /usr/local/bin/pip2.7/usr/bin/pip



五、安装django1.9

前提:服务器需要接入外网

pip install Django==1.9

5.1新建一个项目

格式django-admin.py startproject 项目名称


cd到存放Django项目的目录

django-admin.pystartproject mysite

运行此命令后会在当前目录下创建一个mysite的目录,cd到此目录下面,开启web服务

python manage.pyrunserver 127.0.0.1:8080

在浏览器地址栏输入127.0.0.1:8080就能访问到我们的站。

(有关于python django web框架这篇文章不过多说明)

至此我们的Django 就安装好了。

5.2安装MySQLdb模块

pip installMySQL-python

可能会报错:EnvironmentError: mysql_config not found,意思是没有找到mysql_config这个文件。


解决办法:

1.使用find命令找到mysql_config

find / -name mysql_config

通过返回信息发现在/usr/local/mysql/bin/目录下

2.将此目录加到环境变量:

vim /etc/profile

在文件的末尾加上下面这条语句:

PATH=$PATH:/usr/local/mysql/bin

保存退出并且使之立即生效:

source /etc/profile

重新安装就不会报错了,等安装成功以后,进入python shell,测试导入模块

>>>import MySQLdb

可能会报错:ImportError:libmysqlclient.so.18: cannot open shared object file: No such file or directory根据提示,找不到一个叫libmysqlclient.so.18的文件。

技术分享

解决办法:

找到这个文件,并做一个软连接

ln -s /usr/local/mysql/lib/libmysqlclient.so.18 /usr/lib64/libmysqlclient.so.18


重新导入,应该就没有问题了



六、安装uwsgi

export LDFLAGS=’-Xlinker –no-as-needed’
pip install uwsgi

6.1测试uwsgi 

新建一个uwsgiTest.py文件,代码如下:

#-*- coding:utf-8 -*-  
    
def application(env, start_response):  
  start_response(‘200 OK‘, [(‘Content-Type‘,‘text/html‘)])  
  return "Hello uwsgi"

进入文件所在目录,执行命令:

uwsgi --http :1992 --wsgi-file uwsgiTest.py

之后,在浏览器访问http://127.0.0.1:1992,如果出现Hello uwsgi字样,说明uwsgi安装成功。



七、安装nginx

在我的云盘上下载CentOS6.x所需要的nginx所需要的rpm文件。运行命令:

rpm –ivh nginx-release-centos-6-o.el6.ngx.noarch.rpm
yum install nginx

7.1 nginx常用命令

whereis nginx            #查看nginx安装位置
service nginx status        #查看nginx服务状态
service nginx start/stop/restart  #启动/停止/重启nginx服务

注意启动nginx服务要具有管理员权限

7.2测试nginx

启动nginx服务之后,在浏览器地址栏输入http://127.0.0.1,如果看到如下界面,说明nginx安装正确并启动成功。

技术分享

八、配置uwsginginx支持django

uwsginginx都可以单独工作,我们需要把两者联系起来,用来支持django项目。

8.1配置uwsgidjango通讯

首先我们进入django项目所在目录,也就是manage.py文件所在的目录新建一个django_uwsgi.py的文件,这个文件是要djangouwsgi的方式来运行,文件内容如下:

vim django_uwsgi.py
#__*__ decoding:utf-8 __*__

"""
WSGI config for xiaolei1Blog project.

It exposes the WSGI callable as a module-levelvariable named ‘application‘.

For more information on this file,see
https://docs.djangoproject.com/en/dev/howto/deployment/wsgi/
"""

import os
import sys
os.environ.setdefault(‘DJANGO_SETTINGS_MODULE‘,‘xiaolei_blog.settings‘)

#from django.core.wsgi import get_wsgi_application
#application=get_wsgi_application()

from django.core.wsgi importget_wsgi_application
application=get_wsgi_application()

8.2配置uwsginginx通讯

为了实现nginxuwsgi的连接,两者之间将采用soket通讯方式,在与django_uwsgi.py同一目录下新建django_socket.ini文件,该文件是uwsgi的参数配置文件,文件内容如下:

vim django_django_socket.ini
[uwsgi]
vhost = false
socket = 127.0.0.1:8079      ;通信端口
chdir=/djproject/xiaolei_blog  ;django项目所在目录
master = true
enable-threads = true
workers = 4                     ;开启4个线程
wsgi-file = django_uwsgi.py  ;指定模块,即上面创建的django_uwsgi.py

配置nginx,打开nginx配置文件nginx.conf,修改内容:

user nginx;
worker_processes  1;
 
error_log /var/log/nginx/error.log warn;
pid       /var/run/nginx.pid;
 
 
events {
   worker_connections  1024;
}
 
 
http {
   include      /etc/nginx/mime.types;
   default_type application/octet-stream;
 
   log_format  main  ‘$remote_addr - $remote_user [$time_local]"$request" ‘
                      ‘$status $body_bytes_sent"$http_referer" ‘
                     ‘"$http_user_agent" "$http_x_forwarded_for"‘;
 
   access_log /var/log/nginx/access.log  main;
 
   sendfile        on;
   #tcp_nopush     on;
 
   keepalive_timeout  65;
 
   #gzip  on;
 
   include /etc/nginx/conf.d/*.conf;
   server {
           listen   80;  #80端口
           server_name 127.0.0.1;  #最后访问的地址
           access_log /djproject/xiaolei_blog/log/access.log;  #日志
           error_log /djproject/xiaolei_blog/log/error.log;
           #charset koi8-r;
 
           #access_log logs/host.access.log  main;
 
           location / {
                include        uwsgi_params;
                uwsgi_pass    127.0.0.1:8079;  #前面django_socket.ini文件中配置的端口
           }
 
           #error_page  404              /404.html;
 
           # redirect server error pages to the static page /50x.html
           #
           error_page   500 502 503 504  /50x.html;
 
           #以下配置的静态文件
           location /static/ {
                    alias  /djproject/xiaolei_blog/static/; }
           location /kindeditor/ {
                    alias  /djproject/xiaolei_blog/static/kindeditor/;}
    }
}

说明:server就是django站点,可以配置多个,注意静态文件路径的配置格式。在上面的设置后,可以让Nginx来处理静态文件,非静态文件请求nginx会发给socket 8079,然后让uwsgi处理。

8.3启动网站

上述配置完成后,重启nginxservice nginx restart


启动uwsgi服务

进入django_uwsgi.py所在的目录运行如下命令:

uwsgi --ini django_socket.ini

显示如下信息:

[uWSGI] getting INI configuration fromdjango_socket.ini

*** Starting uWSGI 2.0.15 (64bit) on [FriJul 14 10:09:34 2017] ***

compiled with version: 4.4.7 20120313 (RedHat 4.4.7-4) on 12 July 2017 12:01:53

os: Linux-2.6.32-431.el6.x86_64 #1 SMP FriNov 22 03:15:09 UTC 2013

nodename: localhost.localdomain

machine: x86_64

clock source: unix

detected number of CPU cores: 4

current working directory:/djproject/xiaolei_blog

detected binary path: /usr/local/bin/uwsgi

!!! no internal routing support, rebuildwith pcre support !!!

uWSGI running as root, you can use--uid/--gid/--chroot options

*** WARNING: you are running uWSGI as root!!! (use the --uid flag) ***

chdir() to /djproject/xiaolei_blog

your processes number limit is 14740

your memory page size is 4096 bytes

detected max file descriptor number: 1024

lock engine: pthread robust mutexes

thunder lock: disabled (you can enable itwith --thunder-lock)

uwsgi socket 0 bound to TCP address127.0.0.1:8079      ;通信端口 fd 3

Python version: 2.7.13 (default, Jun  6 2017, 10:50:08)  [GCC 4.4.7 20120313 (Red Hat 4.4.7-4)]

Python main interpreter initialized at0xfe0380

python threads support enabled

your server socket listen backlog islimited to 100 connections

your mercy for graceful operations onworkers is 60 seconds

mapped 363840 bytes (355 KB) for 4 cores

*** Operational MODE: preforking ***

WSGI app 0 (mountpoint=‘‘) ready in 1seconds on interpreter 0xfe0380 pid: 3838 (default app)

*** uWSGI is running in multipleinterpreter mode ***

spawned uWSGI master process (pid: 3838)

spawned uWSGI worker 1 (pid: 3840, cores:1)

spawned uWSGI worker 2 (pid: 3841, cores:1)

spawned uWSGI worker 3 (pid: 3842, cores:1)

spawned uWSGI worker 4 (pid: 3843, cores:1)


查看上述信息,启动成功,并开启了4个线程。

之后访问站点:http://127.0.0.1 就可以看到你的django项目的页面。

至此所有的配置完成。


本文出自 “不倒翁先生” 博客,请务必保留此出处http://kudangren.blog.51cto.com/11300146/1952310

以上是关于nginx+uwsgi+django1.9+mysql+python2.7部署到CentOS6.5的主要内容,如果未能解决你的问题,请参考以下文章

通过 Nginx 的 uwsgi + django - uwsgi 设置/生成?

nginx 和uwsgi的区别与作用

nginx +uwsgi + django配置

Nginx与uWSGI交互

nginx + uwsgi: -- 请求的不可用修饰符:0 --

uWSGI + Nginx + Django 部署