案例

 1、部署說明html

  部署Python語言開發的web項目
  Centos7.5 + Nginx + Python + Django + uwsgi + MySQL
  uwsgi做用是把Python變成一個服務

2、部署流程python

  • Nginx安裝:

  略。mysql

  • MySQL5安裝:

    

  使用的工具包版本:cmake-3.6.0-rc1.tar.gz    boost_1_59_0.tar.gz  mysql-5.7.27.tar.gznginx

  以上版本已通過測試,工具包保存在騰訊微雲和U盤,其餘版本慎重選擇c++

  說明:安裝MySQL5只能使用boost_1_59_0.tar.gz,安裝MySQL8須要安裝最新版的boostweb

  官網:cmake.org   boost.orgsql

  1)安裝依賴包
  yum -y install ncurses-devel gcc-* bzip2-* bison
yum -y install gcc-*
  2)安裝cmake工具(MySQL使用cmake命令代替configure來配置)
        wget https://cmake.org/files/v3.6/cmake-3.6.0-rc1.tar.gz
  tar xf cmake-3.6.0-rc1.tar.gz
  cd cmake-3.6.0-rc1
  ./configure
make -j4
  make install
  cmake --version
  3)放好boost庫文件,編譯時會自動解壓
  wget https://dl.bintray.com/boostorg/release/1.59.0/source/boost_1_59_0.tar.gz
  mkdir /usr/local/boost #沒有就建立
  cp boost_1_59_0.tar.gz /usr/local/boost/
  4)安裝MySQL
  ①下載MySQL5.7.27源碼包,(採用源碼安裝)
  ②tar xf mysql-5.7.27.tar.gz
  ③cd mysql-5.7.27
  -----------------------編譯-----------------
  ④
  cmake . -DCMAKE_INSTALL_PREFIX=/usr/local/mysql -DMYSQL_DATADIR=/usr/local/mysql/data -DMYSQL_UNIX_ADDR=/usr/local/mysql/mysql.sock -DWITH_INNOBASE_STORAGE_ENGINE=1 -DWITH_MYISAM_STORAGE_ENGINE=1 -DENABLED_LOCAL_INFILE=1 -DEXTRA_CHARSETS=all -DDEFAULT_CHARSET=utf8 -DDEFAULT_COLLATION=utf8_general_ci -DWITH_DEBUG=0 -DWITH_EMBEDDED_SERVER=1 -DDOWNLOAD_BOOST=1 -DENABLE_DOWNLOADS=1 -DWITH_BOOST=/usr/local/boost
  ---------------------------------------------
  cmake . \
  -DCMAKE_INSTALL_PREFIX=/usr/local/mysql \ #指定安裝路徑
  -DMYSQL_DATADIR=/usr/local/mysql/data \ #指定數據目錄
  -DMYSQL_UNIX_ADDR=/usr/local/mysql/mysql.sock \ #指定sock文件路徑
  -DWITH_INNOBASE_STORAGE_ENGINE=1 \ #安裝Innodb存儲引擎
  -DWITH_MYISAM_STORAGE_ENGINE=1 \ #安裝myisam存儲引擎
  -DENABLED_LOCAL_INFILE=1 \ #容許使用Load data命令從本地導入數據
  -DEXTRA_CHARSETS=all -DDEFAULT_CHARSET=utf8 -DDEFAULT_COLLATION=utf8_general_ci \ #安裝全部字符集,默認字符集utf-8,校驗字符
  -DWITH_DEBUG=0\ #關閉DEBUG
  -DWITH_EMBEDDED_SERVER=1 \ #生成一個libmysqld.a(.so)的庫,這個庫同時完成了MySQL服務與客戶端API
  -DDOWNLOAD_BOOST=1 -DENABLE_DOWNLOADS=1 -DWITH_BOOST=/usr/local/boost #容許boost,容許下載boost庫文件
  -------------------
  若是編譯過程出錯,想從新配置,先`rm -f CMakeCache.txt`再從新配置便可,若是還不行,就刪除剛剛解壓的mysql-5.7.27目錄,從新編譯
  ⑤4核同時工做繼續編譯:make -j4
      若是出現`c++: 編譯器內部錯誤:已殺死(程序 cc1plus)`多是內存不足,增長內存再試
  ⑥make install
  ⑦初始化
  cp /usr/local/mysql/support-files/mysql.server /etc/init.d/mysql
  chmod 755 /etc/init.d/mysql
  useradd -s /sbin/nologin -r mysql
  chown mysql.mysql /usr/local/mysql/ -R #下面的ln語句一塊兒複製

ln -sf /usr/local/mysql/bin/* /usr/bin/
ln -sf /usr/local/mysql/lib/* /usr/lib/
ln -sf /usr/local/mysql/libexec/* /usr/local/libexec
ln -sf /usr/local/mysql/share/man/man1/* /usr/share/man/man1
ln -sf /usr/local/mysql/share/man/man8/* /usr/share/man/man8django

      ⑧ vim /etc/my.cnf
  修改5個地方:basedir、 datadir、 socket、 log-error、 pid-file

          

      ⑨ 生成root的臨時密碼,記住這個密碼
  /usr/local/mysql/bin/mysqld --initialize --user=mysql --basedir=/usr/local/mysql/ --datadir=/usr/local/mysql/data/
  5)啓動測試
  /etc/init.d/mysql start
  isof -i :3306
  修改密碼:mysql_secure_installation 刪除匿名用戶
  登陸:mysql -u root -p12345678

 

  • Python安裝:
①下載:
  wget https://www.python.org/ftp/python/3.7.4/Python-3.7.4.tar.xz
②解壓:
  tar xf Python-3.7.4.tar.xz
③編譯:
  yum -y install gcc-* openssl-* libffi-devel sqlite-devel
  ./configure --enable-optimizations --with-openssl=/usr/bin/openssl
④安裝:
  make -j4
  make install
⑤完成
  可執行文件安裝路徑:/usr/local/lib/Python3.7
  輸入:Python3進行測試
  升級pip:pip3 install --upgrade pip
能夠選擇刪除安裝文件夾:rm -rf Python3.7.4

  

⑥裝虛擬環境  pip3 install virtualenv
virtualenv是一個建立隔絕的Python環境的工具。virtualenv建立一個包含全部必要的可執行文件的文件夾,用來使用Python工程所需的包
由於用Python開發了好幾個項目,每一個項目使用的環境和插件都不同,這樣就須要來回裝插件和卸插件,
若是有了虛擬化環境,就把Python虛擬成多個環境,每一個項目使用一個環境
附通常使用方法:

    

1.好比某項目,須要獨立Python環境,先建立目錄:
  mkdir myproject; cd myproject;
2.使用命令`virtualenv`建立一個獨立的Python運行環境,參數--no-site-packages表示不復制全部已經安裝在系統的Python環境中的第三方包,獲得乾淨的Python環境
  virtualenv --no-site-packages venv
3.新建的Python環境放在當前目錄下的venv目錄,能夠用source進入該環境
  source venv/bin/activate
4.注意到命令提示符變了,有個前綴,表示當前環境是一個名爲的Python環境,
在環境下,用安裝的包都被安裝到這個環境下,系統Python環境不受任何影響。也就是說,環境是專門針對這個應用建立的
退出當前的環境,使用命令:
  deactivate
⑦安裝Django
  pip3 install django==2.2(venv)venvvenvpipvenvvenvmyprojectvenvdeactivate
  •  發佈網站

  

 

 

實驗結果:訪問127.0.0.1出現Django的歡迎界面,直接訪問127.0.0.1:9090不會出現Django的歡迎界面,不知道爲何
Django項目所在路徑:/usr/local/nginx/html/myweb
wsgi文件所在路徑在項目下的:myweb/wsgi.py myweb.wsgi
所用的Python虛擬環境:/usr/local/nginx/html/myweb/venv

①安裝uwsgi
uwsgi是服務器和服務端應用程序的通訊協議,規定了怎麼把請求轉發給應用服務器和返回
uWSGI是一個web服務器,它實現了WSGI協議、uwsgi、http等協議。
Nginx中HTTPUwsgiModule的做用是與uWSGI服務器進行交換。
Nginx和uWSGI交互就必須使用同一個協議。而上面說了uwsgi支持fastcgi,uwsgi,http協議,這些都是nginx支持的協議
只要你們溝通好使用哪一個協議,就能夠正常運行了。
pip3 install uwsgi

②編輯uwsgi配置文件,添加uwsgi帳戶
useradd -s /sbin/nologin -r uwsgi
mkdir /etc/uwsgi
vim /etc/uwsgi/uwsgi.ini
----------
[uwsgi]
uid = uwsgi //uwsgi服務全部者
gid = uwsgi //uwsgi服務全部組
socket=127.0.0.1:9090 //監聽的端口,至關於Django項目的8000端口,這裏改爲了9090
master = true //啓動主進程
vhost = true //多站模式,能夠發佈多個網站
no-site = true //多站模式時不設置入口模塊和文件
workers = 2 //子進程數
reload-mercy=10 //平滑的重啓
vacuum=true //退出、重啓時清理文件
max-requests=1000 //開啓10000個進程後,自動respawn下,處理多少個請求後,從新生成一個請求
limit-as=512 //將進程的總內存量控制在512M
buffer-size = 30000
pidfile = /var/run/uwsgi9090.pid //pid文件,用於下面的腳本啓動、中止該進程
daemonize = /var/log/uwsgi9090.log //uwsgi運行日誌
pythonpath = /usr/local/nginx/html/myweb/venv/lib/python3.7/site-packages #該項目的Python虛擬環境中的Django包所在目錄,加入到Python環境變量
--------------
③啓動uwsgi
uwsgi --ini /etc/uwsgi/uwsgi.ini
netstat -ntpl
④中止uwsgi
cat /var/run/uwsgi9090.pid
101445
kill -9 101445
⑤啓停uwsgi的腳本
vim /etc/init.d/uwsgi
chmod 755 /etc/init.d/uwsgi
⑥腳本使用
/etc/init.d/uwsgi status
/etc/init.d/uwsgi start
/etc/init.d/uwsgi stop
--------------
#! /bin/sh
DESC="uwsgi daemon"
NAME=uwsgi
DAEMON=/usr/local/bin/uwsgi
CONFIGFILE=/etc/uwsgi/$NAME.ini
PIDFILE=/var/run/{$NAME}9090.pid
SCRIPTNAME=/etc/init.d/$NAME
FIFOFILE=/tmp/uwsgififo
set -e
[ -x "$DAEMON" ] || exit 0

do_start() {
if [ ! -f $PIDFILE ];then
$DAEMON $CONFIGFILE || echo -n "uwsgi already running"
else
echo "The PID is exist..."
fi
}

do_stop() {
if [ ! -f $PIDFILE ];then
$DAEMON --stop $PIDFILE || echo -n "uwsgi not running"
rm -f $PIDFILE
echo "$DAEMON STOPED."
else
echo "The $PIDFILE doesn't found"
fi
}

do_reload() {
if [ -p $FIFOFILE ];then
echo w > $FIFOFILE
else
$DAEMON --touch-workers-reload $PIDFILE || echo -n "uwsgi can't reload"
fi
}

do_status() {
ps aux|grep $DAEMON
}

case "$1" in
status)
echo -en "Status $NAME: \n"
do_status
;;
start)
echo -en "Starting $NAME: \n"
do_start
;;
stop)
echo -en "Stopping $NAME: \n"
do_stop
;;
reload|graceful)
echo -en "Reloading $NAME: \n"
do_reload
;;
*)
echo "Usage: $SCRIPTNAME {start|stop|reload}" >&2
exit 3
;;
esac
exit 0
---------------
Nginx發佈網站
nginx配置文件
`訪問127.0.0.1出現Django的歡迎界面`
-----
server {
listen 80;
server_name localhost;
#access_log logs/abc.log main;
location / { //此處配置的是動態頁面的處理,即相似交給127.0.0.1:8000端口進行處理,靜態頁面或文件另配一個location
include uwsgi_params;
uwsgi_pass 127.0.0.1:9090;
uwsgi_param UWSGI_SCRIPT myweb.wsgi; //uwsgi運行的參數1:Django項目中的uwsgi.py文件的位置,至關於myweb/wsgi.py
uwsgi_param UWSGI_CHDIR /usr/local/nginx/html/myweb; //uwsgi運行的參數2:Django項目的路徑 index index.html index.htm; client_max_body_size 35m; //客戶端最大請求體大小 #下面是線上優化方案,能夠直接用 #uwsgi_cache_valid 1m; #uwsgi_temp_file_write_size 64k; #uwsgi_busy_buffers_size 64k; #uwsgi_buffers 8 64k; #uwsgi_buffer_size 64k; #uwsgi_read_timeout 300; #uwsgi_send_timeout 300; #uwsgi_connect_timeout 300; }}---
相關文章
相關標籤/搜索