安装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 makemigrationspython 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文档上传图片上传不上来,要详细的留言给我