苍穹外卖Docker部署到阿里云服务器

苍穹外卖Docker部署到阿里云服务器

在部署前,建议看一下黑马的Docker快速部署课程,大概3个小时左右。

PS:B站的画质有点糊,建议去找黑马官方要百度网盘资源,在B站评论区里面有说。

课程视频:

黑马程序员Docker快速入门到项目部署,MySQL部署+Nginx部署+docker自定义镜像+DockerCompose项目实战一套搞定_哔哩哔哩_bilibili

课程文档:

‬⁠‍⁠⁠‬‬‬⁠‌‍⁠‬‬⁠⁠‍⁠⁠‬‌‌day02-Docker - 飞书云文档

服务器选择

Vmware安装Linux虚拟机 VS 云服务器,我建议使用云服务器。本地虚拟机我也试过,但遇到的问题更多,比如镜像源、网络这些。

我这里使用的是阿里云的ECS服务器,轻量级服务器不知道可不可以用,我没试过。

关于阿里云服务器的优惠力度:

  1. 学生身份可以免费领取300优惠券
  2. 新用户注册阿里云有免费试用
  3. 99/年这款产品用来学习也很不错

好了,关于怎么选择阿里云服务器,大家可以去网上找一找,下面是我的配置。
在这里插入图片描述

服务器设置

这里需要把redis,mysql等我们要用到的端口号都添加上
在这里插入图片描述

服务器连接

在本地安装MobaXterm工具,使用它连接阿里云服务器,因为使用阿里云的在线控制台页面不是很友好。

MobaXterm的使用可以参考‬⁠‍⁠⁠‬‬‬⁠‌‍⁠‬‬⁠⁠‍⁠⁠‬‌‌day02-Docker - 飞书云文档

项目部署

Docker安装

  1. 卸载旧版

    首先如果系统中已经存在旧的Docker,则先卸载:

    yum remove docker \
        docker-client \
        docker-client-latest \
        docker-common \
        docker-latest \
        docker-latest-logrotate \
        docker-logrotate \
        docker-engine \
        docker-selinux 
    
  2. 配置Docker的yum库

    首先要安装一个yum工具

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

    安装成功后,执行命令,配置Docker的yum源(已更新为阿里云源):

    sudo yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
    
    sudo sed -i 's+download.docker.com+mirrors.aliyun.com/docker-ce+' /etc/yum.repos.d/docker-ce.repo
    

    更新yum,建立缓存

    sudo yum makecache fast
    
  3. 安装Docker
    yum install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
    
  4. 启动和校验

    建议分步执行下面命令测试

    # 启动Docker
    systemctl start docker
    
    # 停止Docker
    systemctl stop docker
    
    # 重启
    systemctl restart docker
    
    # 设置开机自启
    systemctl enable docker
    
    # 执行docker ps命令,如果不报错,说明安装启动成功
    docker ps
    
  5. 配置镜像加速

    我这里是阿里云,使用自己的哈~

    去阿里云→产品→容器→容器镜像服务ACR→管理控制台→镜像工具→镜像加速器

    在这里插入图片描述
    在这里插入图片描述
    找到镜像工具下的镜像加速器:
    外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

    页面向下滚动,即可找到配置的文档说明:

    在这里插入图片描述
    在这里插入图片描述

    具体命令如下:

    # 创建目录
    mkdir -p /etc/docker
    
    # 复制内容,注意把其中的镜像加速地址改成你自己的
    tee /etc/docker/daemon.json <<-'EOF'
    {
      "registry-mirrors": ["https://xxxx.mirror.aliyuncs.com"]
    }
    EOF
    
    # 重新加载配置
    systemctl daemon-reload
    
    # 重启Docker
    systemctl restart docker
    

如果你看完了黑马的Docker快速部署3小时视频,用docker compose部署应该是最为方便的,我下面用docker compose部署方法来演示。

镜像拉取

分别拉取我们所需要的nginx,redis,mysql镜像,jdk镜像;另外还要自己制作一个后端程序的镜像。

# mysql镜像拉取
docker pull mysql
# nginx镜像拉取
docker pull nginx
# redis镜像拉取
docker pull redis
# jdk镜像拉取 这里的jdk版本看你开发时是用的哪个版本即可
docker pull openjdk:11

拉取好后,可以用 docker images命令查看

docker images

如下:

[root@iZbp1e3hvj3iwmp4gvf3lbZ ~]# docker images
REPOSITORY   TAG       IMAGE ID       CREATED       SIZE
nginx        latest    605c77e624dd   3 years ago   141MB
openjdk      11        5505a9a39df1   3 years ago   659MB
redis        latest    7614ae9453d1   3 years ago   113MB
mysql        latest    3218b38490ce   3 years ago   516MB

后端程序镜像制作

先将自己的项目在IDEA上打包

在打包之前需要调一下application-dev.yml文件。redis这里我没有设置密码。

在这里插入图片描述

由于我们使用的docker compose部署,这里用容器名字就可以了。

设置好后,去掉测试模块后点击package就可以打包了。建议在打包前先clean,我这里打包后重命名为sky.jar,默认名字实在太长。
在这里插入图片描述

然后还要准备一个Dockerfile文件

Dockerfile文件用于我们一键制作镜像,相当于给docker指令,让它自动制作镜像。

Dockerfile文件

# 基础镜像
FROM openjdk:11
# 设定时区
ENV TZ=Asia/Shanghai
RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone
# 拷贝jar包
COPY sky.jar /app.jar
# 入口
ENTRYPOINT ["java", "-jar", "/app.jar"]

在这里插入图片描述

准备好这两个文件后,将这两个文件拖入我们服务器的root目录下
在这里插入图片描述

自动镜像制作命令
docker build -t sky .

镜像做好后docker images查看一下
在这里插入图片描述

到这一步,我们所有需要的镜像都有了。

使用docker compose一键部署,我们需要准备一个docker-compose.yml文件

docker-compose.yml文件

services:
  mysql:
    image: mysql
    container_name: mysql
    ports:
      - "3306:3306"
    environment:
      TZ: Asia/Shanghai
      MYSQL_ROOT_PASSWORD: 123
    volumes:
      - "./mysql/conf:/etc/mysql/conf.d"
      - "./mysql/data:/var/lib/mysql"
      - "./mysql/init:/docker-entrypoint-initdb.d"
    networks:
      - sky-net
  redis:
    image: redis
    container_name: redis
    ports:
      - "6379:6379"
    volumes:
      - "./redis/data:/data"
    networks:
      - sky-net
  sky:
    image: sky
    container_name: sky
    ports:
      - "8080:8080"
    depends_on:
      - mysql
    networks:
      - sky-net
  nginx:
    image: nginx
    container_name: nginx
    ports:
      - "80:80"
    volumes:
      - "./nginx/nginx.conf:/etc/nginx/nginx.conf"
      - "./nginx/html:/usr/share/nginx/html"
    depends_on:
      - sky
    networks:
      - sky-net
networks:
  sky-net:
    name: sky-net

docker-compose.yml文件做好后同样托入到root目录下
在这里插入图片描述

nginx

另外我们这里的前端文件需要自己创建一下挂载目录。正常来说,它会自动创建并挂载目录,但我们这里有一个nginx.conf文件,所以不手动创建是会报错的。另外,我们的前端的文件要做一些修改。
在这里插入图片描述

在自己电脑桌面上创建一个nginx文件夹,之后还是拖入上传到服务器的root目录下。

nginx目录下有一个html文件夹和一个nginx.conf文件。

html文件直接从黑马资料中拷贝
在这里插入图片描述

nginx.conf同样拷贝

拷贝过来最后如图:
在这里插入图片描述

对nginx.conf文件做如下修改。左边是未修改,右边是修改后。一共3个地方修改了。
在这里插入图片描述

然后还要做一些修改,找到我们nginx/html/sky/js目录下的app.d0aa4eb3.js文件打开,Ctrl + F搜索ws://localhost/ws/,然后将localhost改成自己服务器的公网IP地址。(这样就可以使用websocket语音提醒了)
在这里插入图片描述

在这里插入图片描述

最后把我们的整个nginx目录文件拖入服务器root目录下
在这里插入图片描述

docker compose 一键部署命令

docker compose up -d

在这里插入图片描述

# 查看运行中的容器命令
docker ps

在这里插入图片描述

# 停止容器命令
docker compose stop

在这里插入图片描述
我们停止容器后再单独启动一下mysql容器,因为我们的mysql还没有数据库

# 启动mysql容器
docker start mysql

使用Navicat连接mysql
在这里插入图片描述

接下来就是手动创建sky_take_out数据库了

先连接一下我们本地localhost的数据库,然后找到sky_take_out数据库,导出SQL脚本

然后再在我们的服务器数据库中创建sky_take_out数据库后新建查询

导入sql脚本后运行后就有数据了

然后启动所有的服务。

# 重启
docker compose restart

在这里插入图片描述

测试

管理端测试

在登录进去后,建议手动进行一下营业状态设置,这样我们的redis中就有SHOP_STATUS这个字段了。
在这里插入图片描述

redis测试

使用Another Redis Desktop Manager测试可以正常连接
在这里插入图片描述

微信小程序用户端测试

微信小程序需要做一些修改

在微信开发者工具中,找到vendor.js文件。
ctrl+f 搜索 baseUrl,将baseUrl的值修改为如下:

localhost改成服务器公网IP
在这里插入图片描述

然后编译运行我们的微信小程序

登录微信后查询几条数据没有任何问题

在这里插入图片描述

另外我们redis中的字段也有了

在这里插入图片描述

问题解决

问题一:redis中无status字段解决

当我们部署好所有服务后,第一次登录管理端,会有一个报错,如图:
在这里插入图片描述
这是因为我们的redis数据库中还没有SHOP_STATUS这个字段。
我们需要登录端后手动设置一下营业状态
在这里插入图片描述
这样我们的redis中就有这个字段了
在这里插入图片描述
然后我们退出后重新登录就没有这个500错误了。
在这里插入图片描述

问题二:服务器上Mysql容器中的表数据会丢失

参考解决:提升mysql容器内权限

docker-compose.yml文件参考

services:
  mysql:
    image: mysql
    container_name: mysql
    ports:
      - "3306:3306"
    privileged: true
    environment:
      TZ: Asia/Shanghai
      MYSQL_ROOT_PASSWORD: 123
    volumes:
      - "./mysql/conf:/etc/mysql/conf.d"
      - "./mysql/data:/var/lib/mysql"
      - "./mysql/init:/docker-entrypoint-initdb.d"
    networks:
      - sky-net
  redis:
    image: redis
    container_name: redis
    ports:
      - "6379:6379"
    volumes:
      - "./redis/data:/data"
    depends_on:
      - mysql
    networks:
      - sky-net
  sky:
    image: sky
    container_name: sky
    ports:
      - "8080:8080"
    depends_on:
      - mysql
    networks:
      - sky-net
  nginx:
    image: nginx
    container_name: nginx
    ports:
      - "80:80"
    volumes:
      - "./nginx/nginx.conf:/etc/nginx/nginx.conf"
      - "./nginx/html:/usr/share/nginx/html"
    depends_on:
      - sky
    networks:
      - sky-net
networks:
  sky-net:
    name: sky-net
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值