目录

  • docker部署django项目

    • 1.1 基于python基础镜像

      • 将本地django项目打包并发到远程服务器上
      • 将服务器上的.zip django项目解压
      • 部署的具体流程
    • 1.2 基于dockerfile
  • 2 mysql主从搭建
  • 3 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的文件夹了,具体如下图。

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

安装unzip、和zip 包
yum install -y unzip zip# 解压django项目
unzip  myproject.zip

部署的具体流程

# 前台运行一个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.confworker_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后台发送请求:

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

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 'test'@'%' identified by '123';
##授权用户
grant all privileges on *.* to 'test'@'%' ;
###刷新权限
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

docker部署django项目、mysql主从搭建、django实现读写分离相关推荐

  1. Mysql主从配置,实现读写分离

    大型网站为了软解大量的并发访问,除了在网站实现分布式负载均衡,远远不够.到了数据业务层.数据访问层,如果还是传统的数据结构,或者只是单单靠一台服务器扛,如此多的数据库连接操作,数据库必然会崩溃,数据丢 ...

  2. MySQL主从配置与Mycat读写分离

    MySQL主从配置与Mycat读写分离 一.主数据库配置 编辑配置文件 添加如下内容 server-id=1 binlog-do-db=master_db1 #备份的数据库 log-bin=mysql ...

  3. 黄聪mysql_黄聪:Mysql主从配置,实现读写分离

    大型网站为了软解大量的并发访问,除了在网站实现分布式负载均衡,远远不够.到了数据业务层.数据访问层,如果还是传统的数据结构,或者只是单单靠一台服务器扛,如此多的数据库连接操作,数据库必然会崩溃,数据丢 ...

  4. mysql备机写binlp_MySQL主从搭建,实现读写分离(基于docker)

    一 主从配置原理 mysql主从配置的流程大体如图: 1)master会将变动记录到二进制日志里面: 2)master有一个I/O线程将二进制日志发送到slave; 3) slave有一个I/O线程把 ...

  5. 基于mysql主从同步的proxy读写分离

    mysql-proxy 简介 MySQL Proxy是一个处于你的client端和MySQL server端之间的简单程序,它可以监测.分析或改变它们的通信.它使用灵活,没有限制,常见的用途包括:负载 ...

  6. centos mysql proxy_CentOS7搭建MysqlProxy实现读写分离

    环境要求:1.主从服务器操作系统版本和位数一致. 2.Mysql版本一致.TIPS:为了保证稳定性,最好是服务器操作系统和Mysql数据库环境一致. 服务器配置角色IPMaster192.168.1. ...

  7. 容器数据卷,Docker安装Mysql5.7以及MySQL主从搭建过程

    容器数据卷 文章目录 容器数据卷 Docker安装Mysql5.7 MySQL主从搭建过程 容器卷就是目录或文件,存在于一个或多个容器中,由docker挂载到容器,但不属于联合文件系统,容器卷的设计目 ...

  8. 配置mysql读写主从_Mysql主从配置,实现读写分离

    MySQL数据库监控功能作为SUM服务器监控软件的一项基本功能,从SUM服务器监控软件发布开始就一直作为其核心功能之一,大量用户环境中正式使用,具有稳定.易用.指标齐全等特点. 通过SUM可以快速监控 ...

  9. mysql主从配置 简书_Mysql主从配置,实现读写分离-Go语言中文社区

    转载:https://www.cnblogs.com/alvin_xp/p/4162249.html 大型网站为了软解大量的并发访问,除了在网站实现分布式负载均衡,远远不够.到了数据业务层.数据访问层 ...

  10. mysql主从配置访问_Mysql主从配置,实现读写分离

    大型网站为了软解大量的并发访问,除了在网站实现分布式负载均衡,远远不够.到了数据业务层.数据访问层,如果还是传统的数据结构,或者只是单单靠一台服务器扛,如此多的数据库连接操作,数据库必然会崩溃,数据丢 ...

最新文章

  1. IT人士群聚喝酒的讲究(转载)
  2. oracle 学习笔记之触发器
  3. Kali Linux更新后无法启动解决了
  4. 阿里云产品搭建web应用梳理
  5. Qt元对象QMetaObject的indexOfSlot等函数获取类方法注意问题
  6. type const mysql_Mysql Explain之type详解
  7. python一些简单操作_python列表的基本操作有哪些
  8. Matlab--m代码转C与C++代码)2(详尽示例与描述)
  9. SNIP物体检测算法理解
  10. Netty实现高性能IOT服务器(Groza)之手撕MQTT协议篇上
  11. STL中常用容器的数据结构与底层实现
  12. pe系统安装win10系统
  13. C语言: 输出一个图形
  14. 从“H1N1病毒”看危机意识的重要性
  15. 结构光激光器选择时应该注意的问题二:功率
  16. linux fstab错误无法启动,Linux 系统 fstab错误导致系统无法启动的修复
  17. (Note)阿克西斯ACASIS DT-3608双盘位硬盘阵列盒RAID设置
  18. 在 Linux 中查找用户帐户和登录详细信息的 11 种方法
  19. 自由职业需要我们知道什么呢?
  20. 【效能平台】接口模块——获取列表数据、查看详情数据、增加以及更新项目接口、删除接口相关功能开发(六)

热门文章

  1. C++STL的 list容器
  2. 经典C语言程序100例之四四
  3. 南卫理公会大学计算机科学,南卫理公会大学哪个专业好?
  4. css 背景图怎么设置自动填充满_CSS-布局与定位
  5. r语言mvstats包_R语言交互式可视化包CanvasXpress
  6. stata中计算公式命令_#stata中哪个命令和stats命令等价#stata中计算命令
  7. 「SVN」Ubuntu 版本库搭建+使用 完整教程
  8. Linux 中挖矿病毒处理过程
  9. SQL性能优化应该考虑哪些?
  10. idea java web运行_使用IDEA创建JavaWeb项目 部署本地tomcat并运行