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