django给mysql配主从_docker部署django项目、mysql主从搭建、django实现读写分离

我们使用python镜像源构建的出的容器,是一个纯净的debian系统下的python环境,在容器内部要想安装vim、nginx等,就不能使用yum install ...了,需要使用apt-get源。首先更新apt-get源,使用apt-get update ,之后就可以使用apt-get install ...了。

docker部署django项目

1.1 基于python基础镜像

将本地django项目打包并发到远程服务器上

本机是Windows系统,现在要将本机的一个django项目部署到远程的服务器上。

1.先将本地的django文件压缩成.zip格式的压缩包。

2.使用xshell远程连接服务器,在服务器上的/home/路径下创建一个文件夹名为test_project的文件夹,cd到该文件夹内;

3.直接将django的压缩包拖到xshell中。# 发现一直上传不成功,上网查询,发现需要在服务器端安装一个包lrzsz,直接使用yum install lrzsz 命令安装,之后再次拖曳就能上传到我们cd的文件夹了,具体如下图。

django给mysql配主从_docker部署django项目、mysql主从搭建、django实现读写分离_第1张图片

cbf1a28e5d2b98cbd0ec51fffbfa0802.png

将服务器上的.zip django项目解压

安装unzip、和zip 包

yum install -y unzip zip

# 解压django项目

unzip myproject.zip

django给mysql配主从_docker部署django项目、mysql主从搭建、django实现读写分离_第2张图片

部署的具体流程

# 前台运行一个python容器、端口映射及目录挂载

docker run -di --name=myproject -p 8080:8080 -v /home/myproject:/home python:3.6

# 进入容器I

docker exec -it myproject /bin/bash

# 切到项目路径下:安装依赖

pip install -r requirement.txt -i https://pypi.douban.com/simple/

# pip list

apt-get update

apt-get vim

# setting.py 改成下面

ALLOWED_HOSTS = [‘*‘]

# 运行项目(wsgiref)

python manage.py runserver 0.0.0.0:8080

# 换uwsgi跑

pip install uwsgi

# 在项目根路径下创建一个uwsgi.ini 文件,写入

[uwsgi]

#配置和nginx连接的socket连接

socket=0.0.0.0:8080

#也可以使用http

#http=0.0.0.0:8080

#配置项目路径,项目的所在目录

chdir=/home/django_test

#配置wsgi接口模块文件路径

wsgi-file=django_test/wsgi.py

#配置启动的进程数

processes=4

#配置每个进程的线程数

threads=2

#配置启动管理主进程

master=True

#配置存放主进程的进程号文件

pidfile=uwsgi.pid

#配置dump日志记录

daemonize=uwsgi.log

#启动,停止,重启,查看

uwsgi --ini uwsgi.ini #启动

lsof -i :8001 #按照端口号查询

ps aux | grep uwsgi   #按照程序名查询

kill -9 13844 #杀死进程

uwsgi --stop uwsgi.pid #通过uwsg停止uwsgi

uwsgi --reload uwsgi.pid #重启

# nginx转发

mkdir -p nginx/conf nginx/html nginx/logs

在conf目录下新建nginx.conf

worker_processes 1;

events {

worker_connections 1024;

}

http {

include mime.types;

default_type application/octet-stream;

sendfile on;

keepalive_timeout 65;

server {

listen 80;

server_name localhost;

location / {

#uwsgi_pass 101.133.225.166:8080;

proxy_pass http://101.133.225.166:8080;

}

error_page 500 502 503 504 /50x.html;

location = /50x.html {

root html;

}

}

}

docker run --name nginx -id -p 80:80 -v /home/nginx/conf/nginx.conf:/etc/nginx/nginx.conf -v /home/nginx/html:/etc/nginx/html -v /home/nginx/logs:/var/log/nginx nginx

# 在 python的docker中用uwsgi跑起项目来即可

外部访问:http://101.133.225.166/

基于wsgiref:

django给mysql配主从_docker部署django项目、mysql主从搭建、django实现读写分离_第3张图片

向django后台发送请求:

django给mysql配主从_docker部署django项目、mysql主从搭建、django实现读写分离_第4张图片

后台的views的 index函数内部print(request.Meta)结果:

django给mysql配主从_docker部署django项目、mysql主从搭建、django实现读写分离_第5张图片

1.2 基于dockerfile

# 第二种方式:dockerfile

# 写一个dockerfile即可

FROM python:3.6

MAINTAINER lqz

WORKDIR /home

RUN pip install django==1.11.9

RUN pip install uwsgi

EXPOSE 8080

CMD ["uwsgi","--ini","/home/django_test/uwsgi.ini"]

# 这句命令,是后台执行的,不会夯住,容器里面就停了

# dockerfile路径下要有一个django_test.tar

#构建镜像

docker build -t=‘django_1.11.9‘ .

# 运行容器

docker run -di --name=mydjango -p 8080:8080 -v /home/myproject:/home django_1.11.9

# 以后只需要从git上拉下最新代码,重启,完事(最新代码)

2 mysql主从搭建

# 为什么要搭建mysql主从?提高并发量(两台机器)

主mysql 从mysql,当主mysql数据发送变化,从mysql也跟着变化

10请求,3个写的,7个读请求

读写分离:写往主库中写 ,读从从库中读

# mysql版本必须一致,两个库的server-id 不能一致

# docker 模拟

# 创建文件夹 mysql 配置文件

# 创建文件夹 mysql2 配置文件

docker run -di -v /home/mysql/data/:/var/lib/mysql -v /home/mysql/conf.d:/etc/mysql/conf.d -v /home/mysql/my.cnf:/etc/mysql/my.cnf -p 33307:3306 --name mysql-master -e MYSQL_ROOT_PASSWORD=123456 mysql:5.7

# 从库

docker run -di -v /home/mysql2/data/:/var/lib/mysql -v /home/mysql2/conf.d:/etc/mysql/conf.d -v /home/mysql2/my.cnf:/etc/mysql/my.cnf -p 33306:3306 --name mysql-slave -e MYSQL_ROOT_PASSWORD=123456 mysql:5.7

# 远程连接主库

mysql -h 101.133.225.166 -P 33307 -u root -p123456

#在主库创建用户并授权

##创建test用户

create user [email protected]%‘ identified by ‘123‘;

##授权用户

grant all privileges on *.* to [email protected]%‘ ;

###刷新权限

flush privileges;

#查看主服务器状态(显示如下图)

show master status;

# 远程连接从库

mysql -h 101.133.225.166 -P 33306 -u root -p123456

change master to master_host=‘101.133.225.166‘,master_port=33307,master_user=‘test‘,master_password=‘123‘,master_log_file=‘mysql-bin.000003‘,master_log_pos=0;

#启用从库

start slave;

#查看从库状态(如下图)

show slave status\G;

# 以后只向主库写数据

# 从库用来读(读和写的分离),你如果还向从库写东西(数据不统一)

3 django实现读写分离

migrate app01 --databse="db1"

# 手动操作(queryset对象)

ret=Book.objects.all().using("db1")

# 自动做(通过配置,程序,读去从库读,写去主库写)

# 写一个router

在项目路径下创建db_router.py

在里面写一个类

class Router1:

def db_for_read(self, model, **hints):

return ‘db1‘

def db_for_write(self, model, **hints):

return ‘default‘

#在setting中配置

DATABASE_ROUTERS = [‘db_router.Router1‘,]

# 只要是写的操作,都到default上,只要是读的操作,都到db1上了

nginx:

动态请求和静态请求(css,js,图片)

原文:https://www.cnblogs.com/zhangchaocoming/p/12683505.html

你可能感兴趣的:(django给mysql配主从)