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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

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

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

目錄

  • 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实现读写分离的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。