django前后端项目部署

一、安装docker

注意:使用docker cp 完成文件的修改编辑操作 不要下载vim了

$PWD 当前路径

(1)yum 包更新到最新

sudo yum update

(2)安装需要的软件包, yum-util 提供yum-config-manager功能,另外两个是devicemapper驱动依赖的

sudo yum install -y yum-utils device-mapper-persistent-data lvm2

(3)设置yum源为阿里云

yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo

(4)安装docker

sudo yum install docker-ce

(5)安装后查看docker版本

docker -v

(6) 配置docker仓库

vi /etc/docker/daemon.json  

在该文件中输入如下内容:

{
  "registry-mirrors": [
  	"https://docker.mirrors.ustc.edu.cn",
    "https://hub-mirror.c.163.com",
    "https://mirror.baidubce.com"
  ]
}

重启服务

sudo systemctl daemon-reload
sudo systemctl restart docker

sudo systemctl start docker
sudo systemctl status docker

二、安装git

(1) yum命令安装:

sudo yum install -y git

(2) 查看版本

git --version

(3) 拉取项目

cd /opt
mkdir software
cd software
mkdir project

# 后端
git clone https://gitee.com/wy-kang/fullstack_api.git

# 前端
git clone https://gitee.com/wy-kang/fullstack_vue.git

git pull origin master

git config --global user.name "wy-kang"
git config --global user.email "1519676228@qq.com"
ssh-keygen -t rsa -C "1519676228@qq.com"
git config --list

cd /root/.ssh/



(4) 项目更新

# 修改完成以后,直接编译  npm run build
# 使用git提交代码版本
# git add .
# git commit -m "重新编译修改host地址"
# git push origin dev:dev
# 在公网服务器中,使用git pull 拉取最新代码

三、项目部署

前端项目

nginx安装配置

# 拉取镜像
docker pull nginx

# 创建文件夹
mkdir nginx
cd nginx
mkdir conf

# 初始化配置文件 - 配置在下面
cd conf
vim nginx.conf

# 创建容器
docker run -id --name=fullstack_vue \
-p 80:80 \
-v /opt/software/docker/nginx/conf/nginx.conf:/etc/nginx/nginx.conf \
-v /opt/software/docker/nginx/logs:/var/log/nginx \
-v /opt/software/project/fullstack_vue/dist:/usr/share/nginx/html \
nginx

# 进入容器
docker exec -it fullstack_vue /bin/bash

nginx.conf 配置如下

user  nginx;
worker_processes  1;

error_log  /var/log/nginx/error.log warn;
pid        /var/run/nginx.pid;


events {
    worker_connections  1024;
}


http {
    include       /etc/nginx/mime.types;
    default_type  application/octet-stream;

    log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                      '$status $body_bytes_sent "$http_referer" '
                      '"$http_user_agent" "$http_x_forwarded_for"';

    access_log  /var/log/nginx/access.log  main;

    sendfile        on;
    #tcp_nopush     on;

    keepalive_timeout  65;

    #gzip  on;

    include /etc/nginx/conf.d/*.conf;
}

后端项目

安装mysql

(1)拉取mysql镜像

docker pull centos/mysql-57-centos7

(2)创建容器,设置端口映射、目录映射

# 有问题 - 连接有问题
docker run \
--restart always \
-p 3306:3306 \
-v /opt/mysql/conf:/etc/mysql/conf.d \
-v /opt/mysql/logs:/var/log/mysql \
-v /opt/mysql/data:/var/lib/mysql \
-e MYSQL_ROOT_PASSWORD=123456 \
-d -it --name mysql centos/mysql-57-centos7

# 用这个简单的
docker run -di --name=fullstack_mysql -p 3306:3306 -e MYSQL_ROOT_PASSWORD=fullstack123456 centos/mysql-57-centos7

(3) 进入容器,操作mysql

docker exec –it fullstack_mysql /bin/bash

(4) 数据导入

方式很多,推荐使用navicate 等数据库工具导入

安装redis

(1)拉取镜像

docker pull redis:5.0

(2)创建容器,设置端口映射

docker run -di --name=fullstack_redis -p 6379:6379 redis:5.0

(3)进入容器,操作mysql

docker container exec -it fullstack_redis bash
./redis-cli.exe -h 192.168.149.135 -p 6379

安装python环境

使用dockerfile完成python环境的搭建

# 建立 python3.9 环境
FROM centos:7.5.1804
FROM python:3.9

# RUN apt-get update
# RUN apt-get install vim

MAINTAINER django:v3
 # 设置 python 环境变量
ENV PYTHONUNBUFFERED 1

 # 设置pip源为国内源
WORKDIR ./project
COPY requirements.txt requirement.txt

 # 利用 pip 安装依赖
RUN pip install --upgrade pip -i  https://mirrors.aliyun.com/pypi/simple/
RUN pip install -r requirement.txt -i  https://mirrors.aliyun.com/pypi/simple/

# 暴露端口
# EXPOSE 8000
# CMD python manage_prod.py runserver 0:8000

构建容器

cd /opt/software/project/fullstack_api
git pull origin master


# dockerfile构建镜像
sudo docker build -t django_docker_img:v1 .

# 启动容器
docker run -id --name=fullstack_v1  \
-p 8000:8000 \
-v /opt/software/project/fullstack_api:/project \
django_docker_img:v1

# 进入容器内部
docker exec -it fullstack_v1 /bin/bash


# 有坑
vi /usr/local/lib/python3.9/site-packages/xadmin/plugins/importexport.py

# from import_export.admin import DEFAULT_FORMATS, SKIP_ADMIN_LOG, TMP_STORAGE_CLASS
from import_export.admin import DEFAULT_FORMATS, ImportMixin, ImportExportMixinBase



python manage_prod.py makemigrations
python manage_prod.py migrate
python manage_prod.py runserver 0.0.0.0:8000

# 修改容器名称
docker rename tensquare_mysql fullstack_mysql

# 或者 - d 守护进程,不进入
docker exec -itd fullstack_v1 python manage_prod.py runserver 0.0.0.0:8000

四、项目部署2

收集静态资源

当Django运行在生产环境中,我们会关闭debug调试,那么项目将不再提供静态文件的支持,需要将静态文件交给静态文件的nginx服务器来提供访问。

我们先收集所有静态文件。项目中的静态文件除了我们使用的上传文件之外,django本身还有自己的静态文件,如rest_framework、xadmin、admin、ckeditor等。我们需要收集这些静态文件,集中一起放到静态文件服务器中。

我们要将收集的静态文件放到项目的static目录中,所以先创建目录static。

Django提供了收集静态文件的方法。先在配置文件中配置收集之后存放的目录

settings/prod.py和dev.py ,代码:

STATIC_ROOT = os.path.join(os.path.dirname(BASE_DIR), 'static')

因为目前在本地我们依然使用了dev.py文件运行项目,所以我们在本地项目收集静态文件就需要把配置信息同步到dev.py

# 本地上传
git add .
git commit 'saveresoucre'
git push origin master

# 服务器拉取
git pull origin master

uwsgi启动django服务

  1. 修改wsgi.py

    os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'fullstack_api.settings.prod')
    
  2. 安装uwsgi模块

    pip install uwsgi
    uwsgi --version    # 查看 uwsgi 版本
    
  3. 在项目根目录下创建uwsgi配置文件uwsgi.ini

    [uwsgi]
    #使用nginx连接时使用,Django程序所在服务器地址
    # socket=0.0.0.0:8000
    #直接做web服务器使用,Django程序所在服务器地址
    http=0.0.0.0:8000
    #项目目录
    chdir=/project
    #项目中wsgi.py文件的目录,相对于项目目录
    wsgi-file=fullstack_api/wsgi.py
    # 进程数
    processes=4
    # 线程数
    threads=2
    # uwsgi服务器的角色
    master=True
    # 存放进程编号的文件
    pidfile=logs/uwsgi.pid
    # 日志文件,因为uwsgi可以脱离终端在后台运行,日志看不见。我们以前的runserver是依赖终端的
    daemonize=logs/uwsgi.log
    # 指定依赖的虚拟环境
    # virtualenv=/root/.virtualenvs/luffy
    
  4. 启动uwsgi服务器

    必须在uwsgi.ini配置文件所在的目录中运行下面的命令

    注意,在本地环境中必须先把runserver关闭

    uwsgi --ini uwsgi.ini
    

    停止uwsgi服务器,还可以通过使用kill命令停止

    uwsgi --stop uwsgi.pid
    
  5. 上传到服务器

    dockerfile

     # 建立 python3.9 环境
    FROM centos:7.5.1804
    FROM python:3.9
    
    
    MAINTAINER django:v1
     # 设置 python 环境变量
    ENV PYTHONUNBUFFERED 1
    
    # RUN apt update
    # RUN apt-get install -y vim
    
    # RUN apt-get update && RUN apt-get install -y vim
    
    
     # 设置pip源为国内源
    WORKDIR ./project
    COPY requirements.txt requirements.txt
    
    # RUN pip install virtualenv -i https://pypi.douban.com/simple/
    # RUN pip install virtualenvwrapper  -i https://pypi.douban.com/simple/
    
    
    # 创建虚拟环境
    # RUN mkvirtualenv env -p python3
    
     # 利用 pip 安装依赖
    RUN pip install --upgrade pip -i  https://mirrors.aliyun.com/pypi/simple/
    RUN pip install -r requirements.txt -i  https://mirrors.aliyun.com/pypi/simple/
    # 安装uwsgi
    RUN pip install uwsgi -i  https://mirrors.aliyun.com/pypi/simple/
    
    
    

COPY deal_bug/importexport.py /usr/local/lib/python3.9/site-packages/xadmin/plugins/importexport.py


使用

```python
# 创建镜像
sudo docker build -t django_uwsgi_docker_img:v1 .

# 构建容器
docker run -id --name=fullstack_uwsgi_v1  \
-p 8000:8000 \
-v /opt/software/project/fullstack_api:/project \
django_uwsgi_docker_img:v1

    
# 或者 - d 守护进程,不进入
docker exec -it fullstack_uwsgi_v1 /bin/bash
# 启动
uwsgi --ini uwsgi.ini
# 状态
ps aux | grep uwsgi
# 日志
cat logs/uwsgi.log
cat logs/fullstack_api.log
# 停止
uwsgi --stop logs/uwsgi.pid

python manage_prod.py runserver 0.0.0.0:8000
docker exec -it fullstack_uwsgi_v1 uwsgi --ini uwsgi.ini

nginx反向代理

dockerfile

FROM centos:7.8.2003
FROM nginx

RUN apt-get update &&  apt-get install -y vim

# dockerfile构建镜像
sudo docker build -t nginx_docker_img:v1 .

使用

# 创建容器
docker run -id --name=nginx_vue \
-p 80:80 \
-v /opt/software/project/fullstack_vue/dist:/usr/share/nginx/html \
nginx_docker_img:v1


# 进入容器
docker exec -it nginx_vue /bin/bash

# 编写
vim /etc/nginx/conf.d/default.conf

# 重启
nginx -s reload

default.conf

# 在文件的末尾添加
upstream fullstack {
    server 116.204.113.225:8000;
    # server 120.77.220.233:8001;
}

server {
    listen  80;
    server_name  127.0.0.1:80; # 域名 或 127.0.0.1:80

    location / {
        include uwsgi_params;
        uwsgi_pass fullstack;
    }
    
    
}

最后一步操作

修改uwsgi.ini

[uwsgi]
#使用nginx连接时使用,Django程序所在服务器地址
socket=0.0.0.0:8000  #使用这个
#直接做web服务器使用,Django程序所在服务器地址
# http=0.0.0.0:8000 # 这个注释掉



#项目目录
chdir=/project
#项目中wsgi.py文件的目录,相对于项目目录
wsgi-file=fullstack_api/wsgi.py
# 进程数
processes=4
# 线程数
threads=2
# uwsgi服务器的角色
master=True
# 存放进程编号的文件
pidfile=logs/uwsgi.pid
# 日志文件,因为uwsgi可以脱离终端在后台运行,日志看不见。我们以前的runserver是依赖终端的
daemonize=logs/uwsgi.log
# 指定依赖的虚拟环境
# virtualenv=/root/.virtualenvs/luffy

为网站提供静态资源支持

# 没有实际操作
# dockerfile构建镜像
sudo docker build -t nginx_docker_img:v1 .


# 创建容器
docker run -id --name=nginx_vue_static \
-p 80:80 \
-v /opt/software/project/fullstack_api/static:/usr/share/nginx/static \
-v /opt/software/project/fullstack_vue/dist:/usr/share/nginx/html \
nginx_docker_img:v1


# 进入容器
docker exec -it nginx_vue /bin/bash

# 编写
vim /etc/nginx/conf.d/default.conf


# 重启
nginx -s reload
# 在原本的default.conf 中 添加 一行
    location / {
        root   /usr/share/nginx/html;
        index  index.html index.htm;
        try_files $uri $uri/ /index.html; # 这个是添加的 , 原本的那个
    }

五、完整案例 - 终版

docker 安装

sudo yum update
sudo yum install -y yum-utils device-mapper-persistent-data lvm2
yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
sudo yum install docker-ce
vi /etc/docker/daemon.json  

在该文件中输入如下内容:

{
  "registry-mirrors": [
  	"https://docker.mirrors.ustc.edu.cn",
    "https://hub-mirror.c.163.com",
    "https://mirror.baidubce.com"
  ]
}

重启服务

sudo systemctl daemon-reload
sudo systemctl restart docker

sudo systemctl enable docker
sudo systemctl status docker

git安装与使用

sudo yum install -y git
git --version

git config --global user.name "wy-kang"
git config --global user.email "1519676228@qq.com"
git config --list

ssh-keygen -t rsa -C "1519676228@qq.com"
cat /root/.ssh/id_rsa.pub   #上传到git服务器

# 项目
cd /home/
mkdir project

# 后端
git clone https://gitee.com/wy-kang/fullstack_api.git

# 前端
git clone https://gitee.com/wy-kang/fullstack_vue.git

# 拉取项目
git pull origin master

# 项目更新
# 前端 - 做以下操作
 npm run build
# 后端 - 无操作

# 上传操作
git add .
git commit -m "提交说明"
git push origin master

数据库

mysql

docker pull centos/mysql-57-centos7
docker run -di --name=fullstack_mysql -p 3306:3306 -e MYSQL_ROOT_PASSWORD=fullstack123456 centos/mysql-57-centos7

docker exec –it fullstack_mysql /bin/bash

# 别忘了对数据做迁移

redis

docker pull redis:5.0
docker run -di --name=fullstack_redis -p 6379:6379 redis:5.0

项目路径

cd /home
mkdir project

# 后端
git clone https://gitee.com/wy-kang/fullstack_api.git

# 前端
git clone https://gitee.com/wy-kang/fullstack_vue.git

# 拉取项目
git pull origin master

前端部署

nginx - dockerfile

 # 建立 nginx环境
FROM centos:7.8.2003
FROM nginx
# RUN apt-get update &&  apt-get install -y vim

使用

# dockerfile构建镜像
sudo docker build -t nginx_docker_img:v1 .
    
# 创建容器
docker run -id --name=nginx_vue \
-p 80:80 \
-v /home/project/fullstack_api/static:/usr/share/nginx/static \
-v /home/project/fullstack_vue/dist:/usr/share/nginx/html \
nginx_docker_img:v1
    
# 将容器配置拷贝到宿主机中中
docker cp  nginx_vue:/etc/nginx/conf.d/default.conf /home/project/fullstack_vue/conf

# 编写default.conf  配置反向代理内容
vi /home/project/fullstack_vue/conf/default.conf 


# 宿主机中的文件拷贝到容器中 
docker cp  /home/project/fullstack_vue/conf/default.conf nginx_vue:/etc/nginx/conf.d/default.conf
    
    
# 进入容器 -d 不进入容器
docker exec -itd nginx_vue nginx -s reload


# 重启
nginx -s reload

default.conf


 # 在文件的末尾添加
upstream fullstack {
    server 123.249.68.131:8000;
}

server {
    listen  80;
    server_name  127.0.0.1:80; # 域名 或 127.0.0.1:80

    location / {
        include uwsgi_params;
        uwsgi_pass fullstack;
        
    location /static {
        root /usr/share/nginx;
    }
    }
        
# 在原本的default.conf 中 添加 一行
    location / {
        root   /usr/share/nginx/html;
        index  index.html index.htm;
        try_files $uri $uri/ /index.html; # 这个是添加的 , 原本的那个
}

完整版

server {
    listen       80;
    listen  [::]:80;
    server_name  localhost;

    #access_log  /var/log/nginx/host.access.log  main;

    location / {
        root   /usr/share/nginx/html;
        index  index.html index.htm;
         try_files $uri $uri/ /index.html;
    }

    #error_page  404              /404.html;

    # redirect server error pages to the static page /50x.html
    #
    error_page   500 502 503 504  /50x.html;
    location = /50x.html {
        root   /usr/share/nginx/html;
    }

    # proxy the PHP scripts to Apache listening on 127.0.0.1:80
    #
    #location ~ \.php$ {
    #    proxy_pass   http://127.0.0.1;
    #}

    # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
    #
    #location ~ \.php$ {
    #    root           html;
    #    fastcgi_pass   127.0.0.1:9000;
    #    fastcgi_index  index.php;
    #    fastcgi_param  SCRIPT_FILENAME  /scripts$fastcgi_script_name;
    #    include        fastcgi_params;
    #}

    # deny access to .htaccess files, if Apache's document root
    # concurs with nginx's one
    #
    #location ~ /\.ht {
    #    deny  all;
    #}
}
 # 在文件的末尾添加
upstream fullstack {
    server 123.249.68.131:8000;
}

server {
    listen  80;
    server_name  127.0.0.1:80; # 域名 或 127.0.0.1:80

    location / {
        include uwsgi_params;
        uwsgi_pass fullstack;
        }
    location /static {
        root /usr/share/nginx;
    }

 }



后端部署

python - django -dockerfile

 # 建立 python3.9 环境
FROM centos:7.5.1804
FROM python:3.9


MAINTAINER django:v1
 # 设置 python 环境变量
ENV PYTHONUNBUFFERED 1


# RUN apt update
# RUN apt-get install -y vim

# RUN apt-get update && RUN apt-get install -y vim





 # 设置pip源为国内源
WORKDIR ./project
COPY requirements.txt requirements.txt

# RUN pip install virtualenv -i https://pypi.douban.com/simple/
# RUN pip install virtualenvwrapper  -i https://pypi.douban.com/simple/



# 创建虚拟环境
# RUN mkvirtualenv env -p python3


 # 利用 pip 安装依赖
RUN pip install --upgrade pip -i  https://mirrors.aliyun.com/pypi/simple/
RUN pip install -r requirements.txt -i  https://mirrors.aliyun.com/pypi/simple/
# 安装uwsgi
RUN pip install uwsgi -i  https://mirrors.aliyun.com/pypi/simple/


COPY deal_bug/importexport.py /usr/local/lib/python3.9/site-packages/xadmin/plugins/importexport.py

# 暴露端口
# EXPOSE 8000
# CMD python manage_prod.py runserver 0:8000

uwsgi.ini

[uwsgi]
#使用nginx连接时使用,Django程序所在服务器地址 - 一般来说两个用一个
socket=0.0.0.0:8000
#直接做web服务器使用,Django程序所在服务器地址
# http=0.0.0.0:8000
#项目目录
chdir=/project
#项目中wsgi.py文件的目录,相对于项目目录
wsgi-file=fullstack_api/wsgi.py
# 进程数
processes=4
# 线程数
threads=2
# uwsgi服务器的角色
master=True
# 存放进程编号的文件
pidfile=logs/uwsgi.pid
# 日志文件,因为uwsgi可以脱离终端在后台运行,日志看不见。我们以前的runserver是依赖终端的
daemonize=logs/uwsgi.log
# 指定依赖的虚拟环境
# virtualenv=/root/.virtualenvs/luffy

使用

# 创建镜像
sudo docker build -t django_uwsgi_docker_img:v1 .

# 构建容器
docker run -id --name=django_uwsgi \
-p 8000:8000 \
-v /home/project/fullstack_api:/project \
django_uwsgi_docker_img:v1
    

    
# 或者 - d 守护进程,不进入
docker exec -it django_uwsgi /bin/bash
# 启动
uwsgi --ini uwsgi.ini
# 状态
ps aux | grep uwsgi
# 日志
cat logs/uwsgi.log
cat logs/fullstack_api.log
# 停止
uwsgi --stop logs/uwsgi.pid

python manage_prod.py runserver 0.0.0.0:8000
docker exec -it django_uwsgi uwsgi --ini uwsgi.ini
posted @   派森的猫  阅读(209)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
· winform 绘制太阳,地球,月球 运作规律
点击右上角即可分享
微信分享提示