python生产环境搭建

安装mysql(查看mysql位置指令:which mysqld )

安装借鉴网址:https://jingyan.baidu.com/article/922554465e471a851648f4ed.html

1.第一步就是看linu是否安装了mysql,经过rpm -qa|grep mysql查看到centos下安装了mysql5.1,那就开始卸载咯

rpm -qa|grep mysql

2.接下来就是卸载mysql5.1了,命令:rpm -e mysql-libs --nodeps

rpm -e mysql-libs --nodeps

3.yum中之后mysql5.1,安装还是5.1,现在就要去增加一个新的repo

rpm -Uvh http://mirror.steadfast.net/epel/6/i386/epel-release-6-8.noarch.rpm

4.一共需要增加两个repo,现在增加另一个

rpm -Uvh http://rpms.famillecollet.com/enterprise/remi-release-6.rpm

5.现在查看一些是否增加成功了,yum --enablerepo=remi,remi-test list mysql mysql-server

看到下面这些就是安装成功了。

1、yum --enablerepo=remi,remi-test list mysql mysql-server
2、pip install mysqlclient

6.接下来就是安装mysql5.5了

yum --enablerepo=remi,remi-test install mysql mysql-server

报错:file /usr/share/mysql/ukrainian/errmsg.sys from install of mysql-libs-5.5.62-1.el6.remi.x86_64 conflicts with file from package mariadb-libs-1:5.5.56-2.el7.x86_64

解决方法:rpm -e --nodeps mariadb-libs-1:5.*

7.出现这个东西的时候一定要选择y。不然神都救不了你,就要重新安装了。

8.看到下面这个图片证明你的mysql安装成功了。

9.接下来需要启动一下mysql

/etc/init.d/mysqld start

10.下面这条命令设置开机自启动,省的我们每次开机就去启动一下mysql了。

chkconfig --levels 345 mysqld on

11.要启用MySQL 安全设置请输入以下命令

/usr/bin/mysql_secure_installation

一直‘ Y ’下去

12.到这里就要验证一下mysql是否安装成功了。如果输入看到以下界面的话,那么你就安装成功了。犒劳一下自己吧。

mysql -uroot -p设置的新密码

mysql密码重置(执行上面了,就不用这行这个)

第一步在linux上输入:mysqladmin -u root -p password
结果:Enter password: 输入原密码
New password: 输入新密码
Confirm new password:输入新密码

mysql远程连接

第一步输入:mysql -uroot -p
结果:Enter password: 输入密码

第二步输入:use mysql;(切换到mysql)
结果:Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A
Database changed

第三步输入:update user set host=’%’ where user=‘root’;
结果:Query OK, 1 row affected (0.00 sec)
Rows matched: 1 Changed: 1 Warnings: 0
第二种结果:ERROR 1062 (23000): Duplicate entry ‘%-root’ for key ‘PRIMARY’
不要理会直接刷新权限。
第三种结果:
ERROR 1054 (42S22): Unknown column ‘‘root’’ in ‘where clause’
格式错误,看下标点符号是否符合标注

结果:Query OK, 0 rows affected (0.00 sec)

第四步执行:flush privileges;

##python安装

  • 依赖下载
    1、yum -y install  python-devel  openssl-devel  bzip2-devel  zlib-devel  expat-devel ncurses-devel sqlite-devel gdbm-devel xz-devel tk-devel readline-devel  gcc 
    
  • 如上,汇总安装了python生产环境的各种第三方依赖包

  • 正式安装,从下一步开始

  • 将pyton的tar包发送给linux (建议位置:/usr/local/xx)

  • 解压tar包:tar -zxvf Python-3.5.2.tgz ,会在当前目录下,出现解压目录

  • 1、tar -zxvf Python-3.5.2.tgz
    
  • cd到解压目录中配置:

  • 1、./configure --prefix=/usr/local/python3.5.2 --enable-optimizations
    

目的:检测环境中依赖是否完整,设置python的安装位置,

​ 同时生成一个编译文件,用于进行python编译:make

  • cd 到解压目录中:先 make 编译 然后 make install 安装

  • 1、make
    2、make install
    
安装后的日志如下
....
Collecting setuptools
Collecting pip
Installing collected packages: setuptools, pip
Successfully installed pip-8.1.1 setuptools-20.10.1
  • 设置环境变量:/etc/profile中添加配置

    在文件末尾追加,不要改动文件的其他内容!!!!!!!
    export python_home=/usr/local/python3.5.2
    export PATH=$PATH:$python_home/bin
    

    注意,设置好后,为了让环境变量生效:source /etc/profile,然后 python3即可进入python3的环境

    1、source /etc/profile
    2、python3
    

    注意,此时系统自带的python2 依然是默认python解释器

  • 将python3 设置为系统默认python解释器

    • 将/usr/bin下的python文件删除或改名

      rm -rf /usr/bin/python
      
    • 将python3的执行文件链接到 /usr/bin/python

      1、ln -s /usr/local/python3.5.2/bin/python3 /usr/bin/python
      
    • 由于yum用python2编译执行,所以需要单独为yum设置为python2,找到/usr/bin/yum文件,修改文件头:#!/usr/bin/python2.7

    • vim /usr/libexec/urlgrabber-ext-down

      将/usr/bin/python改为/usr/bin/python2.7。

  • 更新pip

    • pip install --upgrade pip

##Django 安装

  • pip install django=="2.0.2"

  • python3 -m pip install django==2.0.2

  • 测试使用:

    新建目录
    1、cd /usr/local/
    2、mkdir projects
    3、pwd
    4、cd projects/
    ~~~

    • 执行生成testproj
      1、django-admin startproject testproj
      
    • 1、cd testproj/testporj目录下
      2、settings.py 修改配置:ALLOWED_HOSTS = ["*"]
      
    • 启动django内置的web服务器。

    • cd到testproj目录下,

    • 执行
      python manage.py runserver ip:port
      
    • 在浏览器中访问:ip:port

##WSGI 协议

  • 一种Web服务器网关接口。是一个协议,是一个规范。

  • 一个Web服务器(如nginx,uWSGI等服务器)与web应用(如用Django框架写的程序)通信的规范

  • python-web应用的中能写什么,服务器能识别什么,都遵循统一的WSGI规范。进而保证双方的通信

  • WSGI使得 Server 和 App 解强耦合 ,中间连接的是WSGI协议

##uWSGI服务器安装

WSGI协议下web服务器很多:django内置,uWSGI,gunicorn

新建文件夹
1、cd /usr/local
2、mkdir uwsgi-tar新建文件夹
  • 将uwsgi-2.0.17.tar.gz发送uwsgi-tar文件夹

  • 解压tar:tar -zxvf uwsgi-2.0.17.tar.gz

  • cd uwsgi-2.0.17到解压目录下

  • 编译:make

  • 为了可以更方便的执行 uwsgi #启动uWSGI服务器 ,定制链接:

    ln -s /usr/local/uwsgi-tar/uwsgi-2.0.17/uwsgi /usr/bin/uwsgi

    则可以在任意目录下执行 uwsgi 去启动uWSGI服务器

  • 测试使用python的wsgi服务器-uWSGI

    • 在任意的一个目录中定义一个phthon脚本:hilo.py

      def application(env, start_response):
          start_response('200 OK', [('Content-Type','text/html;charset=utf-8')])
          return [b'hello']
      
    • 启动uWSGI服务器,并部署hilo.py程序

      uwsgi --http 192.168.248.128:8001 --wsgi-file hilo.py #注意hilo.py可以写成绝对路径

    • 浏览器访问:192.168.248.128:8001

##uWSGI服务器启动,并部署django项目

  • 设置mysql的引擎默认为:innodb

    /etc/my.cnf[mysqld]中添加配置:

    1、default-storage-engine=InnoDB
    
  • 建议设置为严格模式:

    /etc/my.cnf[mysqld]中添加配置 :

    sql_mode=STRICT_TRANS_TABLES
    
    • mysql> show variables where variable_name like '%mode%';#可以查看mysql的配置参数
  • 在数据库中建好项目需要的database:“db9”

    • 使用Navicat创建即可,注意字符集为 utf8
  • 在Django项目的settings.py中修改配置

    DEBUG = False  #去掉开发模式
    ALLOWED_HOSTS = ["*"] #开放访问host
    DATABASES = { #合适数据库参数
        'default': {
            'ENGINE': 'django.db.backends.mysql',
            'NAME': 'db9',
            'USER': 'root',
            'HOST': 'localhost',
            'PORT': '3306',
            'PASSWORD': '222222'
        }
    }
    
  • 发送项目到linux并做移植

    项目可以放到linux的任意目录下,建议在 /usr/local下

    然后cd的项目目录下,移植:

    python manage.py makemigrations

    python manage.py migrate

  • 编写uWSGI的配置文件

    随意找一个目录,定义一个文件:config.ini
    [uwsgi]
    http = 192.168.248.128:9000 # uWSGI服务器访问地址
    #uWSGI和nginx通信的port
    socket = 192.168.248.128:9001
    # the base directory (full path)
    chdir = /usr/local/projects/ems129 #项目所在目录
    # Django's wsgi file
    wsgi-file = /usr/local/cookie练习/cookie练习/wsgi.py #基于项目目录的相对路径
    # maximum number of worker processes
    processes = 4
    #thread numbers startched in each worker process
    threads = 2
    #monitor uwsgi status
    stats = 192.168.248.128:9002
    # clear environment on exit
    vacuum = true
    pidfile = /usr/local/django_projects/ems/uwsgi.pid #进程ID存放于此文件,位置可以自定义
    #daemonize-run ,file-to-record-log
    daemonize = /usr/local/cookie练习/uwsgi.log #后台启动模式,日志文件记录位置自定义
    #http://ip:port/static/...请求会进入该目录找资源,此处可以指向某个app下的static目录
    #或是将所有静态文件汇总到项目的某一个目录下,然后配置在此是更好的选择
    #汇集所有已安装app的静态资源到一个目录下,请参见后续内容
    #http://ip:port/static/a/b/c/d.png   ==>  /usr/local/xxxx/static9/a/b/c/d.png
    static-map =/static=/usr/local/xxx/static9(后面在加,先启动uwsgi,或者不加)
    
  • 启动成功

    结果:[uWSGI] getting INI configuration from config_1.ini
    
  • 根据如上配置启动uWSGI服务器

    uwsgi --ini config.ini(#注意:config.ini是一个相对路径)
    
  • 关闭服务器

    uwsgi --stop /usr/local/projects/uwsgi.pid #通过进程id文件
    
  • 部署项目技巧:静态资源管理之汇总

    • 在project的settings.py中添加配置:STATIC_ROOT = os.path.join(BASE_DIR,'static9')

      STATIC_ROOT指向project目录下的static9目录

    • 执行汇总指令:python manage.py collectstatic

      会将所有已安装 APP下的静态资源 以及

      额外添加的静态目录 STATICFILES_DIRS 汇总到指定目录

    • 然后在uWSGI的配置文件中:static-map =/static=/usr/local/xxx/xxx ==>指定目录

安装nginx

uWSGI属于应用服务器,更适合做动态内容的执行

nginx属于web服务器,更合做静态内容的处理(js,css,image)

请求直接访问 web服务器(nginx,apache)留下静态部分处理,

​ 动态部分转发给应用服务器(uWSGI,gunicorn)

最终实现“动静分离”

  • 将tar包发送的linux

  • 解压 tar -zxvf nginx-1.11.1.tar.gz

  • 安装依赖 yum install gcc zlib-devel pcre-devel 不过gcc和zlib-devel已经安装过

  • cd /usr/local/nginx-1.11.1到解压目录:./configure #配置检测

  • cd到解压目录:make && make install #编译并安装

    结果不管:make[1]: Leaving directory `/usr/local/nginx-1.11.1'
    
  • 安装完成,安装路径为/usr/local/nginx ,日志路径为 /usr/local/nginx/logs ,

    可执行文件路径为 /usr/local/nginx/sbin ,配置文件路径为 /usr/local/nginx/conf

    欢迎页面路径为 /usr/local/nginx/html

  • ln -s /usr/local/nginx/sbin/nginx /usr/bin/nginx 制作连接,便于执行nginx指令

  • nginx #启动
    nginx -s stop #关闭
    nginx -s reload #重启

    http://ip:80即可访问nginx欢迎页面

##nginx配置

到配置路径中的nginx.conf

#添加 upstream
upstream django99{
	server 192.168.19.128:9001; # uWSGI's socket = 192.168.x.x:8001
	#可以在添加其他的uWSGI的服务器
}
server {
	listen 80;
    server_name  localhost;
	charset utf-8;
	location / {
		uwsgi_pass  django99; #和上面的upstream转接
		include  /usr/local/uwsgi_params; # the uwsgi_params file you installed
	}	
    
	location /static { #http://ip:80/static/a/b/c/d.png==>/usr/local/static/a/b/c/d.png	
		# your Django project's static files - amend as required
		alias /usr/local/static; #静态资源路径
	}
}

配置好后,重启nginx即可

注意关闭防火墙!!

两台虚拟主机,一个运行nginx,其中保存project的静态资源;一个运行uwsgi,其中保存并部署project(动态内容)

##负载均衡策略

搭建uWSGI集群,只需要多做几份uWSGI的配置文件,文件中设置不同的ip:port,指向不同的project,然后启动多个uWSGI即可

注意:在nginx的配置文件中,在upstream节点中配置好后又的uwsgi的ip:port

*默认:轮询 rr
		upstream django {
			server 192.168.0.103:8989;
			server 192.168.0.104:8990;
		}
*iphash:基于ip的负载均衡.
		upstream django {
			ip_hash;
			server 192.168.0.103:8989;
			server 192.168.0.104:8990;
		}
*权重轮询:
        upstream django {
			server 192.168.0.103:8989 weight=1;
			server 192.168.0.104:8990 weight=2;
		}
*最小连接数:
		upstream django {
			least_conn;
			server 192.168.0.103:8989;
			server 192.168.0.104:8990;
		}

至此,一个uWSGI集群搭建完成,nginx作为反向代理服务器和web服务器接收请求,然后处理静态的部分,动态部分按照负载均衡策略转发给某一个uWSGI服务器。

至此python-web-project成功运行于 一个对高并发有更好支持,具有高可用性(high-available)的系统中

写的md文档上传图片上传不上来,要详细的留言给我
转载携带下连接,测试不宜谢谢。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

读书小孩

您的打赏将是我前行的动力源

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值