黑马程序员瑞吉外卖部署(docker-compose版)

1.创建部署目录结构

reggie-take-out
	- mysql-master
		- conf
		- data
		- logs
	- mysql-slave
		- conf
		- data
		- logs
	- redis
		- conf
			- redis.conf
		- data
		- logs
	- nginx
		- conf
	- reggie-server
	- docker-compose.yaml

2.完善nginx映射目录

1.运行一个nginx容器

docker run -d --name nginx nginx

2.复制文件

docker cp nginx:/usr/share/nginx/html nginx
docker cp nginx:/etc/nginx/nginx.conf nginx/conf/nginx.conf
docker cp nginx:/var/log/nginx nginx/logs

3.删除容器

docker rm -f nginx

4.修改nginx/conf的nginx.conf

#user  nobody;
worker_processes  1;
#error_log  logs/error.log;
#error_log  logs/error.log  notice;
#error_log  logs/error.log  info;
#pid        logs/nginx.pid;

events {
    worker_connections  1024;
}

http {
    include       mime.types;
    default_type  application/octet-stream;
    sendfile        on;
    #tcp_nopush     on;
    #keepalive_timeout  0;
    keepalive_timeout  65;
    #gzip  on;

    # 瑞吉外卖
    server {
		listen	80;
		server_name localhost;

		# 瑞吉外卖前端项目访问
		location / {
			root	/usr/share/nginx/html/dist;
			index	index.html;
		}

		# 配置瑞吉外卖(前端访问后端)反向代理并重写url(若访问路径存在api则删除)
		location ^~ /api/ {
			rewrite ^/api/(.*)$ /$1 break;
			proxy_pass http://reggie-server:8080;
		}

		error_page   500 502 503 504  /50x.html;
		location = /50x.html {
			root   html;
		}
    }
}

5.将瑞吉外卖的前端文件放入到html中(也就是 5 优化篇 资料中的dist)

3.编写redis的配置文件redis.conf

参照下面链接中的目录即可

搭建redis

下面是redis 6.2.6版本的配置文件

protected-mode yes

port 6379

tcp-backlog 511

timeout 0

tcp-keepalive 300

daemonize no

pidfile /var/run/redis_6379.pid

loglevel notice

logfile "/logs"

databases 16

always-show-logo no

set-proc-title yes

proc-title-template "{title} {listen-addr} {server-mode}"

stop-writes-on-bgsave-error yes

rdbcompression yes

rdbchecksum yes

dbfilename dump.rdb

rdb-del-sync-files no

dir ./

replica-serve-stale-data yes

replica-read-only yes

repl-diskless-sync no

repl-diskless-sync-delay 5

repl-diskless-load disabled

repl-disable-tcp-nodelay no

replica-priority 100

acllog-max-len 128

requirepass majunjie

lazyfree-lazy-eviction no
lazyfree-lazy-expire no
lazyfree-lazy-server-del no
replica-lazy-flush no

lazyfree-lazy-user-del no

lazyfree-lazy-user-flush no

oom-score-adj no

oom-score-adj-values 0 200 800

disable-thp yes

appendonly yes

appendfilename "appendonly.aof"

appendfsync everysec

no-appendfsync-on-rewrite no

auto-aof-rewrite-percentage 100
auto-aof-rewrite-min-size 64mb

aof-load-truncated yes

aof-use-rdb-preamble yes

lua-time-limit 5000

slowlog-log-slower-than 10000

slowlog-max-len 128

latency-monitor-threshold 0

notify-keyspace-events ""

hash-max-ziplist-entries 512
hash-max-ziplist-value 64

list-max-ziplist-size -2

list-compress-depth 0

set-max-intset-entries 512

zset-max-ziplist-entries 128
zset-max-ziplist-value 64

hll-sparse-max-bytes 3000

stream-node-max-bytes 4096
stream-node-max-entries 100

activerehashing yes

client-output-buffer-limit normal 0 0 0
client-output-buffer-limit replica 256mb 64mb 60
client-output-buffer-limit pubsub 32mb 8mb 60

hz 10

dynamic-hz yes

aof-rewrite-incremental-fsync yes

rdb-save-incremental-fsync yes

jemalloc-bg-thread yes

4.编写docker-compose.yaml

services:
  redis:
    # 6.2.6
    image: redis
    container_name: redis
    privileged: true
    command: redis-server /etc/redis.conf
    expose:
      - 6379
    volumes:
      - ./redis/conf/redis.conf:/etc/redis.conf
      - ./redis/data:/data
      - ./redis/logs:/logs
  mysql-master:
    image: mysql:8.0.30
    container_name: mysql-master
    expose:
      - 3306
    volumes:
      - ./mysql-master/conf:/etc/mysql/conf.d
      - ./mysql-master/data:/var/lib/mysql
      - ./mysql-master/logs:/var/log/mysql
    environment:
      MYSQL_ROOT_PASSWORD: root
  mysql-slave:
    image: mysql:8.0.30
    container_name: mysql-slave
    expose:
      - 3306
    volumes:
      - ./mysql-slave/conf:/etc/mysql/conf.d
      - ./mysql-slave/data:/var/lib/mysql
      - ./mysql-slave/logs:/var/log/mysql
    environment:
      MYSQL_ROOT_PASSWORD: root
  nginx:
    image: nginx
    container_name: nginx
    privileged: true
    volumes:
      - ./nginx/html:/usr/share/nginx/html
      - ./nginx/conf/nginx.conf:/etc/nginx/nginx.conf
      - ./nginx/logs:/var/log/nginx
    ports:
      - 80:80
    depends_on:
      - reggie-server
  reggie-server:
    image: mujiu/alpine_eclipse-temurin_jre:17
    container_name: reggie-server
    command: java -jar /java/reggie-server/reggie_take_out.jar
    expose:
      - 8080
    volumes:
      - ./reggie-server:/java/reggie-server

5.修改瑞吉外卖的application.yaml(.yml或者.properties)

docker-compose部署的容器可以内部通信不需要直接指定ip和端口号了,直接输入服务名即可,下面以.yaml为例

server:
  port: 8080
spring:
  application:
    name: reggie_take_out
  shardingsphere:
    datasource:
      names: master,slave
      master:
        type: com.alibaba.druid.pool.DruidDataSource
        driver-class-name: com.mysql.cj.jdbc.Driver
        # 这里直接写docker-compose.yaml中mysql主节点的服务名就行
        url: jdbc:mysql://mysql-master/reggie?allowPublicKeyRetrieval=true&serverTimezone=UTC&characterEncoding=UTF-8&useSSL=false
        username: root
        password: root
      slave:
        type: com.alibaba.druid.pool.DruidDataSource
        driver-class-name: com.mysql.cj.jdbc.Driver
        # 这里直接写docker-compose.yaml中mysql从节点的服务名
        url: jdbc:mysql://mysql-slave/reggie?allowPublicKeyRetrieval=true&serverTimezone=UTC&characterEncoding=UTF-8&useSSL=false
        username: root
        password: root
    masterslave:
      load-balance-algorithm-type: round_robin
      name: dataSource
      master-data-source-name: master
      slave-data-source-names: slave
  props:
    sql:
      show: true
  main:
    allow-bean-definition-overriding: true
  redis:
  	# 这里直接写docker-compose.yaml中redis的服务名
    host: redis
    port: 6379
    database: 0
    password: majunjie
  cache:
    redis:
      time-to-live: 1800000 #设置缓存数据的过期时间
mybatis-plus:
  configuration:
    log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
    map-underscore-to-camel-case: true
  global-config:
    db-config:
      id-type: ASSIGN_ID
reggie:
  # 这里存储图片的路径,可以不修改,如需修改docker-compose.yaml中的路径对应修改即可
  path: /images

6.构建jre17运行环境(我的项目使用Openjdk17写的,jdk17可以直接跳过)

注:

使用jdk1.8的请修改docker-compose.yaml中的reggie-server的image为jre8的环境,或自己构建镜像

使用jdk17的可以自己手动构建镜像(并不是很难),或者使用我构建好的,我已经将其推送到了dockerhub,所以docker-compose.yaml可以直接使用,无需修改

构建镜像时,下载jre版本换成自己使用的版本就行

构建jre17教程

7.将瑞吉外卖项目打包为jar包

注:

通过在pom.xml的中可添加reggie_take_out来指定jar包的名字为reggie_take_out.jar

8.将jar包放到部署目录中的reggie-server中

9.最终的目录结构为

reggie-take-out
	- mysql-master
		- conf
			- my.cnf
		- data
		- logs
	- mysql-slave
		- conf
			- my.cnf
		- data
		- logs
	- redis
		- conf
			- redis.conf
		- data
		- logs
	- nginx
		- conf
			- nginx.conf
		- html
		 - dist
		 - 50x.html
		 - index.html
		- logs
	- reggie-server
		- reggie-take-out.jar
	- docker-compose.yaml

10.启动docker-compose

docker-compose up -d

11.配置mysql主从复制

参考mysql启动后的命令即可

搭建mysql主从复制

12.在主节点mysql中创建reggie数据库并导入sql

这一步图形化操作即可

13.停止服务后再次启动

# 停止服务
docker-compose down
# 开启服务
docker-compose up -d

14.验证是否搭建成功

# 查询虚拟机ip
ip address
# 在本机浏览器输入查询到的ip
如果出现页面并且可以登录成功,即完成部署

我自己学习使用的黑马瑞吉项目的地址,上文目录内容在projectDeployment文件夹中
沐玖的瑞吉外卖(个人使用)

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值