项目部署;流程

本文详细介绍了如何在Linux系统上使用Docker部署一个前端V2与后端Flask框架的项目。部署过程包括:安装Docker,拉取镜像,创建Nginx配置文件,导入数据库,启动容器,编译并上传Vue代码,最后导入数据库和运行后端Flask应用。

首先我们先分析一下项目部署需要哪些东西:

我要把我的一个前段用v2;结合后端的falsk 框架的这样类型的项目;

给部署上去;

我是项目在 linux系统上进行部署的;我需要一个docker容器来,安转我们各种需要的 应用;

首先我们 要 python3.7 和环境的搭建 、 mysql数据库(需要将我们的本地数据导入)

、 redis数据库 、 nginx1(来存放我们的前台代码)、   nginx2(来存放我们的台代码);

这样我们算一下我们需要五个容器; 另外我们还需要一个独角兽;在python内部进行下载;

来处理我们的接口,启动项目;

那么好我们上图来具体分析一下:

 

1.安装Docker

yum install -y yum-utils  #安装yum源管理工具
​
yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo # 添加阿里云的docker源
​
yum install -y docker-ce docker-compose  # 通过yum工具来安装docker
​
systemctl restart docker  # 启动docker
​
docker version # 检验docker是否安装成功

2. 拉取必要的镜像

docker pull nginx:1.22.1
docker pull python:3.7
docker pull mysql:5.6
docker pull redis:6.2.7
docker pull elasticsearch:7.17.6

拉取完成以后

3. 创建nginx的配置文件

在宿主机的 /home/www创建default.conf文件,输入以下内容

server {
    listen       80;
    listen  [::]:80;
    server_name  localhost;
    
    location / {
        root   /www;
        index  index.html index.htm;
    }
​
    error_page   500 502 503 504  /50x.html;
    location = /50x.html {
        root   /usr/share/nginx/html;
    }
}

4.上传本地开发时候数据库的SQL文件

4.1 导出sql(在自己电脑上的mysql里面)

# mysqldump -u 数据库用户名 -p 数据库名 > sql文件名
# 在cmd里面直接执行就可以了!注意!不是mysql里面,不用登录MySQL
mysqldump -u root -p 2202book > D:/book.sql

4.2 把sql文件上传到/home/www目录

cd /home/www
rz
# 如果没有rz命令  安装即可
# yum install -y lrzsz

5. 启动容器

# docker run [可选参数] 镜像名[:tag] [命令]
# --name 指定容器的名字,后续可以通过名字对容器进行操作
# -d 指定容器后台运行
# -i 指定容器以交互的形式运行
# -t 新开启一个终端 一般来说-it一块使用
# -e 设置一些容器内的环境变量,容器内的程序会用到
# -v 卷挂载!
# -p 端口映射!
​
# 启动nginx容器 - 前台
docker run --name=nginx -d -p 80:80 -v /home/www/home_app:/www -v /home/www/default.conf:/etc/nginx/conf.d/default.conf nginx:1.22.1
​
# 启动nginx容器 - 后台
docker run --name=nginx2 -d -p 8080:80 -v /home/www/admin_app:/www  -v /home/www/default.conf:/etc/nginx/conf.d/default.conf nginx:1.22.1
​
# 启动python容器
docker run --name=python37 -d -p 5000:5000 -v /home/www/api_app:/www python:3.7 /bin/sh -c "while true;do echo hi;sleep 5;done"
​
# 启动mysql容器
docker run --name=mysql -d -p 3306:3306 -v /home/www/book.sql:/book.sql -e MYSQL_ROOT_PASSWORD=123456 mysql:5.6
​
# 启动redis容器
docker run --name=redis -d -p 6379:6379 redis:6.2.7
​
# 启动es容器
docker run -d -p 9200:9200 -p 9300:9300 -e "discovery.type=single-node" -e ES_JAVA_OPTS="-Xms128m -Xmx512m" --name=es elasticsearch:7.17.6

启动完成后,效果如下

[root@iZbp12a0ywbz3y7pgqefacZ www]# docker ps -a
CONTAINER ID   IMAGE                  COMMAND                  CREATED          STATUS          PORTS                                                                                  NAMES
f9d8e33494fe   elasticsearch:7.17.6   "/bin/tini -- /usr/l…"   7 seconds ago    Up 6 seconds    0.0.0.0:9200->9200/tcp, :::9200->9200/tcp, 0.0.0.0:9300->9300/tcp, :::9300->9300/tcp   es
77b6b36859cc   redis:6.2.7            "docker-entrypoint.s…"   11 seconds ago   Up 10 seconds   0.0.0.0:6379->6379/tcp, :::6379->6379/tcp                                              redis
a5f3735a1ed7   mysql:5.6              "docker-entrypoint.s…"   15 seconds ago   Up 14 seconds   0.0.0.0:3306->3306/tcp, :::3306->3306/tcp                                              mysql
a97c50875471   python:3.7             "/bin/sh -c 'while t…"   19 seconds ago   Up 18 seconds   0.0.0.0:5000->5000/tcp, :::5000->5000/tcp                                              python37
3d023bb2b0dc   nginx:1.22.1           "/docker-entrypoint.…"   24 seconds ago   Up 23 seconds   0.0.0.0:8080->80/tcp, :::8080->80/tcp                                                  nginx2
5cd2b87b8c0e   nginx:1.22.1           "/docker-entrypoint.…"   31 seconds ago   Up 30 seconds   0.0.0.0:80->80/tcp, :::80->80/tcp                                                      nginx

/home/www目录下,内容有这些东西:

[root@iZbp12a0ywbz3y7pgqefacZ www]# ll
total 96
drwxr-xr-x 2 root root  4096 Nov  4 10:26 admin_app # 放后台的前端代码
drwxr-xr-x 2 root root  4096 Nov  4 10:26 api_app # 放flask程序
-rw-r--r-- 1 root root 78545 Nov  3 09:55 book.sql  # sql文件
-rw-r--r-- 1 root root   284 Nov  4 10:26 default.conf # 放nginx的配置文件
drwxr-xr-x 2 root root  4096 Nov  4 10:10 home_app # 放前台的前端代码

6. 编译并上传前后台的vue代码

# 修改前端代码的配置文件和main.js里面的baseURL地址
...
axios.defaults.baseURL = "http://114.55.114.218:5000/home"
...
​
# 后台项目的.env.production文件里面添加
VUE_APP_BASE_HOST = 'http://114.55.114.218:5000/'
VUE_APP_BASE_API = 'http://114.55.114.218:5000/admin'
​
# 前台代码编译
npm run build
​
# 后台代码编译
npm run build:prod
​
# 编译完以后,会出现一个dist的文件夹,把整个dist文件夹里面的内容,不包括dist目录,上传到对应的目录里面去就可以了。建议:压缩包上传
​
# zip压缩包上传完成后解压即可
unzip dist.zip
​
# 如果unzip没有这个命令,安装即可
# yum install -y unzip

7. 导入数据库

# 进入数据库容器
docker exec -it mysql /bin/bash
​
# 进入以后,连接数据库
mysql -uroot -p
​
# 连接上数据库以后,创建数据库
create database 2202book charset=utf8;
​
# 选中数据库
use 2202book;
​
# 导入
source /book.sql

8. 上传后端代码并运行

8.1 修改flask的配置

# 查看redis容器的ip
docker inspect redis | grep IPAddress
# 172.17.0.6  这就是redis容器的ip
​
# 查看mysql容器的ip
docker inspect mysql | grep IPAddress
# 172.17.0.5  这就是redis容器的ip
​
# 查看es容器的ip
docker inspect es | grep IPAddress
# 172.17.0.7  这就是redis容器的ip
​
# 修该对应代码位置的ip

8.2 上传后端代码

cd api_app/
rz

8.3 进入python37容器,并安装相应的环境

# 进入容器
docker exec -it python37 /bin/bash
​
# 进入flask源代码的根目录
cd /www
​
# 安装依赖
pip install -r requirements.txt -i https://pypi.tuna.tsinghua.edu.cn/simple some-package
​
# 安装独角兽
pip install gunicorn -i https://pypi.tuna.tsinghua.edu.cn/simple some-package

8.4 启动flask程序

cd /www
nohup gunicorn -w 8 -b 0.0.0.0:5000 app:app &
# -w 指定工作进程个数
# app:app  第一个app指的是根目录下的app.py文件。也就是入口文件名字
# 第二个app指的是 app.py下面的flask核心对象的变量名字

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值