案例

 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; }}---
相关文章
相关标签/搜索