一、部署说明

1、python语言介绍

  python简介

2、实验环境

  实验机器:Vmware虚拟机 8核10G

  网卡:桥接模式

  系统:centos7.5

  防火墙:关闭

  Selinux:关闭

  网段:192.168.10.0/25

  WEB01:192.168.10.42

二、部署流程

  Centos7.5 + Nginx + python + Django + uwsgi + mysql来部署网站(服务)。

1、部署Nginx

  1. $ wget http://nginx.org/download/nginx-1.15.5.tar.gz -P /usr/src # 下载nginx
  2. $ cd /usr/src
  3. $ tar xvf nginx-1.15..tar.gz
  4. $ cd nginx-1.15.
  5. $ yum -y install gcc # nginx是c写的
  6. $ yum -y install pcre-devel # url重写用到的包
  7. $ yum -y install zlib zlib-devel # 解压缩用到的包
  8. # 配置安装环境
  9. $ ./configure --prefix=/usr/local/nginx
  10.  
  11. # 编译源码生成可执行程序 依赖gcc
  12. $ make -j4
  13. # 安装程序
  14. $ make install
  15.  
  16. # 启动nginx
  17. $ /usr/local/nginx/sbin/nginx
  18. # 访问nginx首页
  19. $ elinks http://192.168.10.42 -dump
  20. # 当前系统监听tcp端口的进程
  21. $ netstat -ntpl
  22.  
  23. # 删除不再需要的源码
  24. $ rm -rf nginx-1.15.

2、Mysql安装部署

  Mysql是一个关系型数据库,由瑞典的AB公司开发,后卖给oracle公司,目前分为商业版和社区版。

  现在主要是使用两大Myql版本:mysql5和mysql8。目前大多数公司使用5版本,因此在这里使用5.7的最新版本。

  1. # .安装依赖包
  2. $ yum -y install ncurses-devel gcc-* bzip2-* bison
  3.  
  4. # .升级cmake工具
  5. # 软件获取:https://cmake.org/download
  6. $ wget https://cmake.org/files/v3.13/cmake-3.13.0-rc2.tar.gz
  7. $ tar xf cmake-3.13.-rc2.tar.gz # 解压
  8. $ ./configure # 配置
  9. $ make -j4 # 多核编译减少等待时间
  10. $ make install # 安装
  11. # 检查是否安装完成
  12. $ cmake --version
  13.  
  14. # . 升级boost库文件
  15. # boost库获取:https://www.boost.org
  16. # 由于这里是安装5.7的mysql,因此下载的是boost_1_59_0.tar.bz2
  17. $ tar xf boost_1_59_0.tar.bz2 # 解压
  18. $ mv boost_1_59_0 /usr/local/boost

  在上面部署准备完成后,开始执行mysql安装

  1. # .安装mysql
  2. # 添加用户与组
  3. $ useradd -s /sbin/nologin -r mysql
  4. $ mkdir -pv /usr/local/mysql/data
  5.  
  6. # 软件获取:https://www.oracle.com=>下载=>myql=>社区版本,此处下载mysql-5.7.24.tar.gz
  7. # wget https://cdn.mysql.com//Downloads/MySQL-5.7/mysql-5.7.24-linux-glibc2.12-x86_64.tar.gz
  8.  
  9. $ tar xf mysql-5.7..tar.gz # mysql解压
  10.  
  11. # 用cmake配置
  12. # 如果配置失败要重新配置,删除CMakeCache.txt文件即可
  13. $ cmake . \
  14. -DCMAKE_INSTALL_PREFIX=/usr/local/mysql \
  15. -DMYSQL_DATADIR=/usr/local/mysql/data/ \
  16. -DMYSQL_UNIX_ADDR=/usr/local/mysql/mysql.sock \
  17. -DWITH_INNBASE_STORAGE_EGNINE= \
  18. -DWITH_MYISAM_STORAGE_ENGINE= \
  19. -DENABLED_LOCAL_INFILE= \
  20. -DEXTRA_CHARSETS=all -DDEFAULT_CHARSET=utf- -DDEFAULT_COLLATION=utf8_general_ci \
  21. -DWITH_DEBUG= \
  22. -DWITH_EMBEDDED_SERVER= \
  23. -DDOWNLOAD_BOOST= -DENABLE_DOWNLOADS= -DWITH_BOOST=/usr/local/boost
  24.  
  25. # 解释
  26. $ cmake . \
  27. -DCMAKE_INSTALL_PREFIX=/usr/local/mysql \ # 指定安装路径
  28. -DMYSQL_DATADIR=/usr/local/mysql/data/ \ # 指定数据目录
  29. -DMYSQL_UNIX_ADDR=/usr/local/mysql/mysql.sock \ # 指定sock文件路径
  30. -DWITH_INNBASE_STORAGE_EGNINE= \ # 安装Innodb存储引擎
  31. -DWITH_MYISAM_STORAGE_ENGINE= \ # 安装myisam存储引擎
  32. -DENABLED_LOCAL_INFILE= \ # 运行使用Load data命令从本地导入数据
  33. -DEXTRA_CHARSETS=all -DDEFAULT_CHARSET=utf- -DDEFAULT_COLLATION=utf8_general_ci \ # 安装所有字符集、默认字符集utf-、检验字符
  34. -DWITH_DEBUG= \ # 关闭debug
  35. -DWITH_EMBEDDED_SERVER= \ # 生成一个libmysqld.a(.so)的库,这个库同时集成了mysql服务与客户端API
  36. -DDOWNLOAD_BOOST= -DENABLE_DOWNLOADS= -DWITH_BOOST=/usr/local/boost # 运行boost 允许下载boost库文件
  37.  
  38. # 编译
  39. $ make -j4
  40. # 安装
  41. $ make install
  42.  
  43. # .启动测试
  44. $ cp /usr/local/mysql/support-files/mysql.server /etc/init.d/mysql
  45. $ chmod /etc/init.d/mysql # 赋权限
  46. $ useradd -s /sbin/nologin -r mysql # 添加用户
  47. $ chown mysql:mysql /usr/local/mysql/ -R # 修改目录权属
  48. # 建立链接
  49. $ ln -sf /usr/local/mysql/bin/* /usr/bin/
  50. $ ln -sf /usr/local/mysql/lib/* /usr/lib/
  51. $ ln -sf /usr/local/mysql/libexec/* /usr/local/libexec
  52. $ ln -sf /usr/local/mysql/share/man/man1/* /usr/share/man/man1
  53. $ ln -sf /usr/local/mysql/share/man/man8/* /usr/share/man/man8
  54.  
  55. # 修改配置文件 /etc/my.cnf
  56. [mysqld]
  57. basedir=/usr/local/mysql # mysql软件在哪
  58. datadir=/usr/local/mysql/data # mysql的数据在哪
  59. socket=/usr/local/mysql/mysql.sock
  60. symbolic-links=0
  61. [mysqld_safe]
  62. log-error=/var/log/mysql.log
  63. pid-file=/var/run/mysql.pid
  64.  
  65. # 初始化数据库
  66. $ /usr/local/mysql/bin/mysqld --initialize --user=mysql --basedir=/usr/local/mysql/ --datadir=/usr/local/mysqld/data/
  67. # 注意:初始化后会得到一个临时密码
  68.  
  69. # 启动数据库
  70. $ /etc/init.d/mysql start
  71. $ lsof -i :3306 # 查看端口情况
  72.  
  73. # 修改密码
  74. $ mysql_secure_installation # 要使用刚刚得到的临时密码
  75.  
  76. # 登录数据库
  77. $ mysql -uroot -pabc123

3、python安装

  1. # 下载python包
  2. $ wget https://www.python.org/ftp/python/3.7.1/Python-3.7.1.tar.xz
  3.  
  4. # python安装
  5. $ tar xf python-3.7..tar.xz
  6. $ cd Python-3.7.
  7. $ yum -y install gcc-* openssl-* libffi-devel sqlite-devel
  8. $ ./configure --prefix=/usr/local/python3
  9. --enable-optimizations --with-openssl=/usr/bin/oponssl # --enable-optimizations是包优化参数
  10. $ make -j4 # 由于有加配置优化,这个步骤会很久
  11. $ make install

  python的默认安装路径:/usr/local/lib/python3.7

  安装测试:

  1. [root@web01 Python-3.7.]# python3
  2. Python 3.7. (default, Oct , ::)
  3. [GCC 4.8. (Red Hat 4.8.-)] on linux
  4. Type "help", "copyright", "credits" or "license" for more information.
  5. >>>
  6. >>> exit();

  当我们从Python官方网站下载并安装好Python 3.7后,我们就直接获得一个官方版本的解释 :CPython。

4、升级pip

  pip是python包管理工具,该工具提供对python包的查找、下载、安装、卸载功能。由于我们下载了最新的python,因此需要更新pip。

  1. $ pip3 install --upgrade pip

  如果出现报错:pip is configured with locations that require TLS/SSL,however the ssl module in Python is not available.

  需要修改 ~/Python-3.7.1/Modules/Setup文件,将注释去除。

  1. SSL=/usr/local/ssl
  2. _ssl _ssl.c \
  3. -DUSE_SSL -l$(SSL)/include -l$(SSL)/include/openssl \
  4. -L$(SSL)/lib -lssl -lcrypto

  然后重新执行make && make install。

5、安装python虚拟环境

  virtualenv 是一个创建隔绝的Python环境的工具。

  virtualenv创建一个包含所有必要的可执行文件的文件夹,用来使用 Python 工程所需的包。

  1. [root@web01 ~]# pip3 install virtualenv

6、使用虚拟环境及安装django

  1. [root@web01 ~]# virtualenv web01 # 创建环境
  2. [root@web01 ~]# source web01/bin/activate # 环境生效
  3.  
  4. # 前面带有(web01)说明在环境中
  5. (web01) [root@web01 ~]# pip3 install django
  6. # 用django新建一个项目
  7. (web01) [root@web01 ~]#django-admin.py startproject myweb
  8. # django启动
  9. (web01) [root@web01 ~]#python3 manage.py runserver 192.168.10.42:
  10. # 修改ALLOWED_HOSTS
  11. (web01) [root@web01 ~]# vim myweb/settings.py
  12. ALLOWED_HOSTS = ['*']

  此时在网站上可以看到django初始页面:

  

三、发布WEB

1、业务逻辑图

  

2、安装uwsgi

  uwsgi是服务器和服务端应用程序的通信协议,规定了怎么把请求转发给应用程序和返回。

  uWSGI是一个Web服务器,它实现了WSGI协议、uwsgi、http等协议。Nginx中HttpUwsgiModule的作用是与uWSGI服务器进行交换。

  nginx 和 uWSGI交互就必须使用同一个协议,而上面说了uwsgi支持fastcgi、uwsgi、http协议,这些都是nginx支持的协议,只要大家沟通好使用哪个协议,就可以正常运行了。

  1. [root@web01 ~]# pip3 install uwsgi
  2. # 运行uwsgi 报错:[uwsgi: command not found] 解决方案:建立软链接
  3. [root@web01 ~]# ln -s /usr/local/python3/bin/uwsgi /usr/bin/uwsgi

(1)编辑uwsgi配置文件

  1. [root@web01 ~]# mkdir /etc/uwsgi
  2. [root@web01 ~]# vim /etc/uwsgi/uwsgi.ini
  3. [uwsgi]
  4. chdir=/home/huangqs/EduCRM
  5. module=EduCRM.wsgi:application
  6. socket=127.0.0.1:
  7. wsgi-file=EduCRM/wsgi.py
  8. master=true //主进程
  9. reload-mercy=
  10. processes=
  11. threads=
  12. vacuum=true // 退出、重启时清理文件
  13. max-requests=
  14. limit-as=
  15. pidfile=/var/run/uwsgi7070.pid
  16. daemonize=/var/log/uwsgi7070.log
  17. home=/home/huangqs/educrm_env

(2)启动uwsgi

  1. [root@web01 ~]# uwsgi --ini /etc/uwsgi/uwsgi.ini

(3)关闭uwsgi

  1. [root@web01 ~]# cat /var/run/uwsgi7070.pid
  2. 101446
  3. [root@web01 ~]# kill -9 101446

3、uwsgi服务脚本管理

(1)定制uwsgi管理脚本

  vim /etc/init.d/uwsgi  ,init脚本内容如下所示:

  1. #! /bin/sh
  2. DESC="uwsgi daemon"
  3. NAME=uwsgi
  4. DAEMON=/usr/bin/uwsgi #指向uwsgi的命令路径
  5. CONFFILE=/etc/uwsgi/$NAME.ini #uwsgi.ini配置文件路径
  6. PIDFILE=/var/run/${NAME}7070.pid #pid文件路径
  7. SCRIPTNAME=/etc/init.d/$NAME #启动脚本路径
  8. FIFOFILE=/tmp/uwsgififo
  9. set -e
  10. [ -x "$DAEMON" ] || exit 0
  11.  
  12. do_start() {
  13. if [ ! -f $PIDFILE ];then
  14. $DAEMON $CONFIGFILE || echo -n uwsgi running
  15. else
  16. echo "The PID is exist..."
  17. fi
  18. }
  19.  
  20. do_stop() {
  21. if [ -f $PIDFILE ];then
  22. $DAEMON --stop $PIDFILE || echo -n "uwsgi not running"
  23. rm -f $PIDFILE
  24. echo "$DAEMON STOPED."
  25. else
  26. echo "The $PIDFILE doesn't found."
  27. fi
  28. }
  29.  
  30. do_reload() {
  31. if [ -p $FIFOFILE ];then
  32. echo w > $FIFOFILE
  33. else
  34. $DAEMON --touch-workers-reload $PIDFILE || echo -n "uwsgi can't reload"
  35. fi
  36. }
  37.  
  38. do_status() {
  39. ps aux|grep $DAEMON
  40. }
  41.  
  42. case "$1" in
  43. status)
  44. echo -en "Status $NAME: \n"
  45. do_status
  46. ;;
  47. start)
  48. echo -en "Starting $NAME: \n"
  49. do_start
  50. ;;
  51. stop)
  52. echo -en "Stopping $NAME: \n"
  53. do_stop
  54. ;;
  55. reload|graceful)
  56. echo -en "Reloading $NAME: \n"
  57. do_reload
  58. ;;
  59. *)
  60. echo "Usage: $SCRIPTNAME {start|stop|reload}" >&2
  61. exit 3
  62. ;;
  63. esac
  64. exit 0

(2)脚本配置和使用

  1. #授权
  2. [root@home-ct75211 html]# chmod 755 /etc/init.d/uwsgi
  3.  
  4. #关闭
  5. [root@home-ct75211 html]# /etc/init.d/uwsgi stop
  6. Stopping uwsgi:
  7. /usr/local/bin/uwsgi STOPED.
  8. #启动
  9. [root@home-ct75211 html]# /etc/init.d/uwsgi start
  10. Starting uwsgi:
  11. [uWSGI] getting INI configuration from /etc/uwsgi/uwsgi.ini
  12.  
  13. #查看
  14. [root@home-ct75211 html]# netstat -ntpl
  15. Active Internet connections (only servers)
  16. Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
  17. tcp 0 0 127.0.0.1:21190 0.0.0.0:* LISTEN 26572/uwsgi
  18. tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN 26560/nginx: master
  19. tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 1081/sshd
  20. tcp 0 0 127.0.0.1:25 0.0.0.0:* LISTEN 1380/master
  21. tcp6 0 0 :::3306 :::* LISTEN 2425/mysqld
  22. tcp6 0 0 :::22 :::* LISTEN 1081/sshd
  23. tcp6 0 0 ::1:25 :::* LISTEN 1380/master

(3)设置开机启动

  1. $ chkconfig --add /etc/init.d/uwsgi
  2. # 'service uwsgi does not support chkconfig' 如果出现了这样的报错,是因为添加脚本用service启动,必须要脚本里面包含这2行:
  3. # chkconfig: -
  4. # description: nginx is a World Wide Web server. It is used to serve
  5.  
  6. $ cd /etc/init.d
  7. $ chkconfig --level uwsgi on
  8. $ chkconfig --list
  9.  
  10. Note: This output shows SysV services only and does not include native
  11. systemd services. SysV configuration data might be overridden by native
  12. systemd configuration.
  13.  
  14. If you want to list systemd services use 'systemctl list-unit-files'.
  15. To see services enabled on particular target use
  16. 'systemctl list-dependencies [target]'.
  17.  
  18. jenkins :off :off :on :on :on :on :off
  19. jexec :off :on :on :on :on :on :off
  20. netconsole :off :off :off :off :off :off :off
  21. network :off :off :on :on :on :on :off
  22. uwsgi :off :off :on :on :on :on :off 

4、nginx服务配置

  nginx服务网站页面目录默认在/root/myweb目录下,但是/root目录权限不足,需要将应用目录换地方:

  1. $ ls -ld /root/
  2. dr-xr-x--- . 10 root root 4096 10 28 07:55 /root/
  3. $ mv /root/myweb /usr/local/nginx/html

  修改默认配置文件:/usr/local/nginx/conf/nginx.conf

  1. http {
  2. include mime.types;
  3. default_type application/octet-stream;
  4. sendfile on;
  5. keepalive_timeout ;
  6. server {
  7. listen ;
  8. server_name localhost;
  9.  
  10. location / {
  11. include uwsgi_params;
  12. uwsgi_pass 127.0.0.1:; // 必须与uwsgi配置一致
  13. uwsgi_param UWSGI_CHDIR /home/huangqs/EduCRM; // 项目根目录
  14. uwsgi_param UWSGI_SCRIPT EduCRM.EduCRM.wsgi; // 入口文件,即wsgi.py相对项目根目录的位置
  15. index index.html index.htm;
  16. client_max_body_size 35m;
  17. }
  18. location /static {
  19. alias /home/huangqs/EduCRM/statics;
  20. }
  21. }
  22. }

四、测试WEB

  重启uwsgi和启动nginx:

  1. $ /etc/init.d/uwsgi stop
  2. $ /etc/init.d/uwsgi start
  3. $ netstat -ntpl # 查看服务状态
  4.  
  5. $ /usr/local/nginx/sbin/nginx # 启动nginx

  访问查看页面:

  

部署基于python语言的WEB发布环境的更多相关文章

  1. 部署一个基于python语言的web发布环境

    ---恢复内容开始--- 1) 一门面向对象的语言 2)拥有丰富的库 3)可移植性 4)免费.开源 5)简单易易学 可做软件开发.人工智能.web开发等等 部署流程: Cnetos7.5+Nginx+ ...

  2. centos7 打造基于python语言Selenium2自动化开发环境

    1. 准备 安装模块 # yum groupinstall "Development tools" # yum install zlib-devel bzip2-devel ope ...

  3. MAC OS环境下搭建基于Python语言的appium自动化测试环境

    #1 安装JDK java -version #2 下载SDK http://adt.android-studio.org/ 下载adt #3 配置sdk环境变量 打开终端,依次输入命令 vim .b ...

  4. MAC OS环境下搭建基于Python语言的Selenium2自动化测试环境

    #1安装Python Mac OS上自带python2.7,在此介绍安装python3.x版本 去官网下载Python for MAC版本 https://www.python.org 安装文件为pk ...

  5. selenium2环境搭建----基于python语言

    selenium支持多种语言如java.c#.Python.PHP等,这里基于python语言,所以这里搭建环境时需做俩步操作: ----1.Python环境的搭建 ----2.selenium的安装 ...

  6. selenium2自动化测试实战--基于Python语言

    自动化测试基础 一. 软件测试分类 1.1 根据项目流程阶段划分软件测试 1.1.1 单元测试 单元测试(或模块测试)是对程序中的单个子程序或具有独立功能的代码段进行测试的过程. 1.1.2 集成测试 ...

  7. 关于《Selenium3自动化测试实战--基于python语言》

    2016年1月,机缘巧合下我出版了<Selenium2自动化测试实战--基于python语言>这本书,当时写书的原因是,大部分讲Selenium的书并不讲编程语言和单元测试框,如果想在项目 ...

  8. 关于《selenium2自动测试实战--基于Python语言》

    关于本书的类型: 首先在我看来技术书分为两类,一类是“思想”,一类是“操作手册”. 对于思想类的书,一般作者有很多年经验积累,这类书需要细读与品位.高手读了会深有体会,豁然开朗.新手读了不止所云,甚至 ...

  9. 《Selenium2自动化测试实战--基于Python语言》 --即将面市

    发展历程: <selenium_webdriver(python)第一版>   将本博客中的这个系列整理为pdf文档,免费. <selenium_webdriver(python)第 ...

随机推荐

  1. Navigator 传值

    iOS 导航器 http://wiki.jikexueyuan.com/project/react-native/navigator-ios.html import React, { Componen ...

  2. oracle安装注意

    安装环境:widows7相关教程:https://jingyan.baidu.com/article/4d58d5411e16de9dd4e9c0ec.html oracle安装情况:标准版2.8Go ...

  3. 对EM算法的理解

    EM算法中要寻找的参数θ,与K-means聚类中的质心是对应的,在高斯混合模型中确定了θ,便可为样本进行类别的划分,属于哪个高斯分布的概率大就是哪一类,而这一点与K-means中的质心一样,质心确定了 ...

  4. Angular material mat-icon 资源参考_Hardware

    ul,li>ol { margin-bottom: 0 } dt { font-weight: 700 } dd { margin: 0 1.5em 1.5em } img { height: ...

  5. ONTAK2010 Peaks加强版(离线&在线)

    题面 弱化版:luogu 强制在线版:bzoj 题解 本题有两种解法 离线算法:线段树合并 先看一道简单题[USACO18JAN]MooTube 本题就是在此基础上求第\(k\)高的点 首先把询问和路 ...

  6. UML-5-进化式需求

    1.需求管理定义 瀑布式式中,研发之前,完全定义和固化需求. 但,需求是不断变化的,你之前可能会有45%的需求,不会被使用到,经常使用到的只占20%左右. 因此,如何寻找这20%的需求,是重点.其方法 ...

  7. 在Vue项目中使用html2canvas生成页面截图并上传

    使用方法 项目中引入 npm install html2canvas html代码 //html代码 <!-- 把需要生成截图的元素放在一个元素容器里,设置一个ref --> <di ...

  8. 码云+jenkins+自动回复邮件

    码云和jenkins的配置流程在Gitee Jenkins Plugin上介绍的很仔细. 附上码云官方Gitee Jenkins Plugin的介绍: https://gitee.com/help/a ...

  9. C# winform窗体传值 利用委托 子窗体传值给父窗体

    首先在Form2中定义委托和事件: //声明委托 和 事件 public delegate void TransfDelegate(String value); public partial clas ...

  10. 记.net 遇到的几个bug

    这两个bug都是查了挺久才查到的,随手记是个好习惯. 1.public static CultureInfo GetCultureInfo(string name); 方法,传参错误时,某些操作系统环 ...