Cenos(6.6/7.1)下從源碼安裝Python+Django+uwsgi+nginx到寫nginx的環境部署(一)

 

 

 

梳理下這幾個的關係:php

centos是redhat的社區版操做系統。css

Python2.7.5是開發語言(centos6.5下自帶的python是2.6.6版本,因此須要源碼更新,而centos7.1下面自帶的是2.7.5)html

pip1.5.4是一個安裝和管理 Python 包的工具 ,是easy_install的替代品,就像yum同樣。用它能夠安裝指定版本的Django和mysqlpython

Django是python下的web開發框架之一mysql

Nginx是繼Apache以後的高性能httpweb服務器,再也不贅述。nginx

WSGI是一種Web服務器網關接口。它是一個Web服務器(如nginx)與應用服務器(如uWSGI服務器)通訊的一種規範。c++

MySQLdb是python提供給mysql的接口模塊。web

 

1.首先安裝Centos7.1sql

網易的鏡像下載地址:shell

http://mirrors.163.com/centos/7.1.1503/isos/x86_64/CentOS-7-x86_64-DVD-1503-01.iso

下載下來用UltraISO將鏡像寫入到U盤裏面或者用虛擬機安裝,過程沒必要贅述。

儘可能不要裝精簡版:不然進去了以後要配yum源,甚至連ifconfig命令都沒有

yum配置

http://www.centoscn.com/CentOS/config/2015/0214/4718.html 

ifconfig命令安裝:

http://www.centoscn.com/CentosBug/osbug/2014/0916/3750.html

 

2.安裝python2.7.5(Centos7以上能夠略過,由於自己就是2.7.5版本)

[root@localhost ~]# wget http://www.python.org/ftp/python/2.7.5/Python-2.7.5.tar.bz2
[root@localhost ~]# tar -jxvf Python-2.7.5.tar.bz2
[root@localhost ~]# cd Python-2.7.5
[root@localhost Python-2.7.5]# ./configure --prefix=/usr/local/python2.7(指定目錄)
[root@localhost Python-2.7.5]# make && make install
[root@localhost Python-2.7.5]# echo "PATH=/usr/local/python2.7/bin:$PATH" >> /etc/profile
[root@localhost Python-2.7.5]# source /etc/profile
[root@localhost Python-2.7.5]# python -V
Python 2.7.5

 Python 2.7.5安裝成功。

 

3.安裝pip

#wget "https://pypi.python.org/packages/source/p/pip/pip-1.5.4.tar.gz#md5=834b2904f92d46aaa333267fb1c922bb" --no-check-certificate
# tar -xzvf pip-1.5.4.tar.gz
# cd pip-1.5.4
# python setup.py install

 pip安裝成功

 

4.利用pip安裝DJango

 

[root@localhost ~]# pip install Django==1.8.5

 

5.安裝MySQLdb

 
 
[root@localhost ~]# yum install MySQL-python.x86_64

 

6.安裝必須的一些系統庫

yum install gcc-c++ 
yum insatll libxml2*

 

7.安裝nginx

安裝nginx以前須要安裝PCRE庫的安裝

#wget ftp://ftp.csx.cam.ac.uk/pub/software/programming/pcre/
#tar –zxvf pcre-8.21.tar.gz
#cd pcre-8.21
#./configure #make #make install

安裝zlib庫安裝

tar -zxvf zlib-1.2.5.tar.gz
cd zlib-1.2.5
./configure
make
makeinstall

安裝openSSL庫

#wget http://www.openssl.org/source/
#tar –zxvf openssl-1.0.0.tar.gz
#cd openssl-1.0.0
#./configure#make #make install

以上三個庫確保安裝好後 接下來安裝nginx

#wget http://nginx.org/download/nginx-1.4.2.tar.gz 
#tar xf nginx-1.4.2.tar.gz
#cd nginx-1.4.2
#./configure --prefix=/usr/local/nginx --conf-path=/etc/nginx/nginx.conf  --with-pcre=/usr/src/pcre-8.21 --with-zlib=/usr/src/zlib-1.2.7
#make
#make install
#/usr/local/tengine/sbin/nginx 或者聲明到/etc/profile 中

將nginx的執行路徑聲明到全局變量裏面來

vim /etc/profile  在export上面增長這一句

PATH=$PATH:/usr/local/nginx/sbin          //這一句
export PATH USER LOGNAME MAIL HOSTNAME HISTSIZE HISTCONTROL

 

重讀一下配置文件或者新開一個shell就能夠看到

[root@localhost ~]# echo $PATH
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/usr/local/nginx/sbin:/root/bin

而後nginx就能夠直接執行nginx程序了 

查看nginx80端口

[root@localhost ~]# netstat -tnlp
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name
tcp        0      0 127.0.0.1:9000          0.0.0.0:*               LISTEN      1568/uwsgi
tcp        0      0 0.0.0.0:80              0.0.0.0:*               LISTEN      1330/nginx: master
tcp        0      0 192.168.122.1:53        0.0.0.0:*               LISTEN      2148/dnsmasq
tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN      901/sshd
tcp        0      0 127.0.0.1:25            0.0.0.0:*               LISTEN      2063/master
tcp6       0      0 :::22                   :::*                    LISTEN      901/sshd
tcp6       0      0 ::1:25                  :::*                    LISTEN      2063/master 

表示已經啓動成功  在瀏覽器輸入本機IP便可訪問nginxweb頁面

index頁面默認存放於cd /usr/local/nginx/html 裏面的index.html

 

 8.安裝Django

 上文已經安裝過了,此處咱們查看Django的版本

[root@localhost ~]# python -c "import django; print(django.get_version())"
1.8.5

Django框架已經安裝成功,版本爲1.8.5

 

建立一個Django項目

        Django的項目 不像 php的項目,通常php的項目會將全部的代碼放到服務器上(/wwwroot/xx.php)這樣運行,但實際上這樣的方法不太安全,也更容易被別人看到代碼。

    Django的項目代碼能夠放在任何目錄下,如 /usr/local/xweb/

    

[root@localhost ~]# cd /usr/local/xweb/   
[root@localhost xweb]# tree xweb/    d//jango-admin.py startproject xweb 建立一個名爲 xweb 的項目
xweb/
├── __init__.py
├── __init__.pyc
├── settings.py
├── settings.pyc
├── urls.py
├── urls.pyc
├── wsgi.py
├── wsgi.pyc
└── xweb.ini

0 directories, 9 files

    外層的 xweb只是一個包含項目的 名稱, 能夠將該目錄名修改

    內層的 xweb 目錄裏面 有一個空的__init__.py ,這是python的寫法,告訴python這是一個將被引用的包

    manage.py 是項目管理的主要方法 

    # xweb/manage.py help 能夠看到好多方法

     下面是 django官網關於django-admin.py & manage.py 的命令方法介紹:

     

https://docs.djangoproject.com/en/1.6/ref/django-admin/

 

    運行一個Django項目

    簡單的運行方式爲:

  1. #python manage.py runserver
    Validating models...
    0 errors found July 28, 2014 - 14:18:04 Django version 1.6.5, using settings 'dj.settings' Starting development server at http://127.0.0.1:8000/ Quit the server with CONTROL-C. 

    若是你想將端口號修改,或者ip修改,能夠執行:  

#  python manage.py runserver 8080 / 0.0.0.0:8000

    訪問上述地址,就會看到 Welcome to Django 頁面了。

    這只是使用Django自帶的webserver,下面咱們要經過uwsgi將nginx與django組合到一塊兒。

 

9.安裝uwsgi

 

    經過uwsgi將Nginx與Django組合一塊兒

    官方文檔:

http://uwsgi-docs.readthedocs.org/en/latest/WSGIquickstart.html#installing-uwsgi-with-python-support

 

    先安裝uwsgi  

  # yum install python-devel
    # pip install uwsgi
  1. total build time: 178 seconds
    *** uWSGI is ready, launch it with /usr/bin/uwsgi ***
    Successfully installed uwsgi
    Cleaning up...

    # 小小的試驗一下

    # uwsgi --help  // 一堆命令參數,仍是看文檔吧

    # 配置nginx

在nginx.conf 的server裏面添加以下
location ~ .*\.(gif|jpg|jpeg|png|bmp|swf|js|css)$ {
root /opt/xspeeder/xweb;
}
location / {
root /opt/xspeeder/xweb/xapp/templates/login;
index login.html;
uwsgi_pass 127.0.0.1:9000;
include uwsgi_params;
}

    # uwsgi 調用參數

    # 根據官網的說明:

     # 假設你的django項目目錄在/usr/local/xweb

uwsgi --socket 127.0.0.1:9000 --chdir /usr/local/xweb/ --wsgi-file xweb/wsgi.py --master --processes 2 --threads 2

    # ok! 再次訪問nginx配置的頁面,發現是否是看到了django的歡迎界面!

    # 再次驗證了一點,python的項目不須要放在 wwwroot相似的目錄中,能夠放在任意目錄下!

    # 每次這麼寫是否是很麻煩~uwsgi提供用配置文件的方式執行:

    # 建立一個 xweb.ini(放在和__init__.py同一路徑下)

 

 
 


[uwsgi]
socket = 127.0.0.1:9000
pidfile=/run/uwsgi.pid
chdir = /xspeeder/xweb/
wsgi-file = xweb/wsgi.py
master = true
processes = 2
threads = 2



uwsgi添加系統服務啓動項

 

[Unit]
Description=uwsgi
After=network.target syslog.target xsdaemon.service


[Service]
Type=forking
PIDFile=/run/uwsgi.pid
ExecStart=/usr/bin/uwsgi /xspeeder/xweb/xweb/xweb.ini
ExecStop=/usr/bin/kill -9 `cat /run/uwsgi.pid`
PrivateTmp=true


[Install]
WantedBy=multi-user.target

 參考: 

http://www.cnblogs.com/zhouej/archive/2012/03/25/2379646.html

 

 

 

    # uwsgi xweb.ini 

此時再使用此命令可溶氧實現上面冗長命令的的功能。

全路徑uwsgi /usr/local/xweb/xweb/xweb.ini  而後將這句命令寫到/etc/rc.d/rc.local裏面進行開機啓動執行(注意:centos7rc.local已經再也不是6系列的開機啓動最後一個腳本了,爲了兼容,若是想使用rc.local就必須給他加上x權限。)

        # 到此,你的django就能夠經過uwsgi在nginx下運行了!

 

 10.編寫cenos7下面的nginx服務腳本

在/usr/lib/systemd/system下建立nginx.service文件內容以下

[Unit]
Description=nginx
Documentation=http://nginx.org/en/docs/
After=network.target  remote-fs.target nss-lookup.target

[Service]
Type=forking
PIDFile=/usr/local/nginx/logs/nginx.pid
ExecStartPre=/usr/local/nginx/sbin/nginx -t -c /etc/nginx/nginx.conf
ExecStart=/usr/local/nginx/sbin/nginx -c /etc/nginx/nginx.conf
ExecReload=/usr/bin/kill -s HUP $MAINPID
ExecStop=/usr/bin/kill -s QUIT $MAINPID
PrivateTmp=true

[Install]
WantedBy=multi-user.target

關於這個service文件的具體內容,我會另外詳細學習和理解。

 

啓動服務
$ sudo systemctl start nginx.service

#重啓
$ sudo systemctl restart nginx.service
 
#重載
$ sudo systemctl reload nginx.service
 
#中止
$ sudo systemctl stop nginx.service

[root@localhost ~]# systemctl status nginx.service
nginx.service - nginx
Loaded: loaded (/usr/lib/systemd/system/nginx.service; enabled)
Active: active (running) since 一 2015-11-16 14:47:40 CST; 1h 42min ago
Docs: http://nginx.org/en/docs/
Process: 1324 ExecStart=/usr/local/nginx/sbin/nginx -c /etc/nginx/nginx.conf (code=exited, status=0/SUCCESS)
Process: 907 ExecStartPre=/usr/local/nginx/sbin/nginx -t -c /etc/nginx/nginx.conf (code=exited, status=0/SUCCESS)
Main PID: 1330 (nginx)
CGroup: /system.slice/nginx.service
├─1330 nginx: master process /usr/local/nginx/sbin/nginx -c /etc/nginx/nginx.conf
└─1332 nginx: worker process

11月 16 14:47:39 localhost.localdomain nginx[907]: nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
11月 16 14:47:39 localhost.localdomain nginx[907]: nginx: configuration file /etc/nginx/nginx.conf test is successful
11月 16 14:47:40 localhost.localdomain systemd[1]: Failed to read PID from file /usr/local/nginx/logs/nginx.pid: Invalid...ument
11月 16 14:47:40 localhost.localdomain systemd[1]: Started nginx.
Hint: Some lines were ellipsized, use -l to show in full.

至此,項目已經能夠經過nginx開機自啓動了。

 

附:systemd的有關在:

http://www.cnblogs.com/sysk/p/4969368.html
相關文章
相關標籤/搜索