日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

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

發(fā)布時(shí)間:2024/9/20 数据库 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 docker部署django项目、mysql主从搭建、django实现读写分离 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

目錄

  • docker部署django項(xiàng)目
    • 1.1 基于python基礎(chǔ)鏡像
      • 將本地django項(xiàng)目打包并發(fā)到遠(yuǎn)程服務(wù)器上
      • 將服務(wù)器上的.zip django項(xiàng)目解壓
      • 部署的具體流程
    • 1.2 基于dockerfile
  • 2 mysql主從搭建
  • 3 django實(shí)現(xiàn)讀寫分離

?

我們使用python鏡像源構(gòu)建的出的容器,是一個(gè)純凈的debian系統(tǒng)下的python環(huán)境,在容器內(nèi)部要想安裝vim、nginx等,就不能使用yum install ...了,需要使用apt-get源。首先更新apt-get源,使用apt-get update ,之后就可以使用apt-get install ...了。

docker部署django項(xiàng)目

1.1 基于python基礎(chǔ)鏡像

將本地django項(xiàng)目打包并發(fā)到遠(yuǎn)程服務(wù)器上

本機(jī)是Windows系統(tǒng),現(xiàn)在要將本機(jī)的一個(gè)django項(xiàng)目部署到遠(yuǎn)程的服務(wù)器上。 1.先將本地的django文件壓縮成.zip格式的壓縮包。 2.使用xshell遠(yuǎn)程連接服務(wù)器,在服務(wù)器上的/home/路徑下創(chuàng)建一個(gè)文件夾名為test_project的文件夾,cd到該文件夾內(nèi); 3.直接將django的壓縮包拖到xshell中。# 發(fā)現(xiàn)一直上傳不成功,上網(wǎng)查詢,發(fā)現(xiàn)需要在服務(wù)器端安裝一個(gè)包lrzsz,直接使用yum install lrzsz 命令安裝,之后再次拖曳就能上傳到我們cd的文件夾了,具體如下圖。

將服務(wù)器上的.zip django項(xiàng)目解壓

安裝unzip、和zip 包 yum install -y unzip zip# 解壓django項(xiàng)目 unzip myproject.zip

部署的具體流程

# 前臺(tái)運(yùn)行一個(gè)python容器、端口映射及目錄掛載 docker run -di --name=myproject -p 8080:8080 -v /home/myproject:/home python:3.6 # 進(jìn)入容器I docker exec -it myproject /bin/bash # 切到項(xiàng)目路徑下:安裝依賴 pip install -r requirement.txt -i https://pypi.douban.com/simple/ # pip list apt-get update apt-get vim # setting.py 改成下面 ALLOWED_HOSTS = ['*'] # 運(yùn)行項(xiàng)目(wsgiref) python manage.py runserver 0.0.0.0:8080 # 換uwsgi跑 pip install uwsgi # 在項(xiàng)目根路徑下創(chuàng)建一個(gè)uwsgi.ini 文件,寫入[uwsgi] #配置和nginx連接的socket連接 socket=0.0.0.0:8080 #也可以使用http #http=0.0.0.0:8080 #配置項(xiàng)目路徑,項(xiàng)目的所在目錄 chdir=/home/django_test #配置wsgi接口模塊文件路徑 wsgi-file=django_test/wsgi.py #配置啟動(dòng)的進(jìn)程數(shù) processes=4 #配置每個(gè)進(jìn)程的線程數(shù) threads=2 #配置啟動(dòng)管理主進(jìn)程 master=True #配置存放主進(jìn)程的進(jìn)程號(hào)文件 pidfile=uwsgi.pid #配置dump日志記錄 daemonize=uwsgi.log#啟動(dòng),停止,重啟,查看 uwsgi --ini uwsgi.ini #啟動(dòng) lsof -i :8001 #按照端口號(hào)查詢 ps aux | grep uwsgi   #按照程序名查詢 kill -9 13844 #殺死進(jìn)程 uwsgi --stop uwsgi.pid #通過uwsg停止uwsgi uwsgi --reload uwsgi.pid #重啟# nginx轉(zhuǎn)發(fā)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跑起項(xiàng)目來即可外部訪問:http://101.133.225.166/

基于wsgiref:

向django后臺(tái)發(fā)送請(qǐng)求:

后臺(tái)的views的 index函數(shù)內(nèi)部print(request.Meta)結(jié)果:

1.2 基于dockerfile

# 第二種方式:dockerfile# 寫一個(gè)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"] # 這句命令,是后臺(tái)執(zhí)行的,不會(huì)夯住,容器里面就停了# dockerfile路徑下要有一個(gè)django_test.tar#構(gòu)建鏡像 docker build -t='django_1.11.9' . # 運(yùn)行容器 docker run -di --name=mydjango -p 8080:8080 -v /home/myproject:/home django_1.11.9# 以后只需要從git上拉下最新代碼,重啟,完事(最新代碼)

2 mysql主從搭建

# 為什么要搭建mysql主從?提高并發(fā)量(兩臺(tái)機(jī)器) 主mysql 從mysql,當(dāng)主mysql數(shù)據(jù)發(fā)送變化,從mysql也跟著變化 10請(qǐng)求,3個(gè)寫的,7個(gè)讀請(qǐng)求 讀寫分離:寫往主庫中寫 ,讀從從庫中讀# mysql版本必須一致,兩個(gè)庫的server-id 不能一致 # docker 模擬# 創(chuàng)建文件夾 mysql 配置文件 # 創(chuàng)建文件夾 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# 遠(yuǎn)程連接主庫 mysql -h 101.133.225.166 -P 33307 -u root -p123456 #在主庫創(chuàng)建用戶并授權(quán) ##創(chuàng)建test用戶 create user 'test'@'%' identified by '123'; ##授權(quán)用戶 grant all privileges on *.* to 'test'@'%' ; ###刷新權(quán)限 flush privileges; #查看主服務(wù)器狀態(tài)(顯示如下圖) show master status; # 遠(yuǎn)程連接從庫 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; #查看從庫狀態(tài)(如下圖) show slave status\G;# 以后只向主庫寫數(shù)據(jù) # 從庫用來讀(讀和寫的分離),你如果還向從庫寫東西(數(shù)據(jù)不統(tǒng)一)

3 django實(shí)現(xiàn)讀寫分離

migrate app01 --databse="db1"# 手動(dòng)操作(queryset對(duì)象) ret=Book.objects.all().using("db1")# 自動(dòng)做(通過配置,程序,讀去從庫讀,寫去主庫寫) # 寫一個(gè)router 在項(xiàng)目路徑下創(chuàng)建db_router.py 在里面寫一個(gè)類 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:

動(dòng)態(tài)請(qǐng)求和靜態(tài)請(qǐng)求(css,js,圖片)

來源:https://www.cnblogs.com/zhangchaocoming/p/12683505.html

總結(jié)

以上是生活随笔為你收集整理的docker部署django项目、mysql主从搭建、django实现读写分离的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。