程序员Zero
程序员Zero
Published on 2024-10-13 / 29 Visits
1
0

微服务项目部署

前言

微服务目录结构参考:黑马 学成在线微服务模版

打包教程:鱼皮微服务打包教程:https://www.bilibili.com/video/BV1Cp4y1F7eA?vd_source=a5916dd0c483eddb098610c4f50ae397

这个教程跟鱼皮的不太重复,扩展点如下:

  1. 目录结构不同。相应的docker-compose需要定制化调整

  2. 引入了python微服务。不同语言的服务如何一键部署

  3. 解决了docker 仓库的网络问题,拉取镜像不再是烦恼

  4. 又引入了es和xxl-job两个中间件

  5. 小小的踩了一下坑

项目整理

服务名

端口

版本

备注

nacos

8848

2.3.2

注册配置中心

RabbitMQ

5672|15672

3.13.2

消息队列、 guest |guest

ElasticSearch

9200

8.11.1

搜索引擎、elastic|123456

Redis

6379

5.0.14

缓存

MySQL

3306

8.0.30

数据库

xxl-job

9000

分布式定时任务

Python服务

10086

爬虫服务

ischool-gateway

9001

网关微服务

ischool-user

9002

用户微服务

ischool-search

9003

搜索微服务

ischool-community

9004

社区微服务

crawl-announcement-executor

9005

和搜索微服务在一个微服务下,只需暴露端口

创建Docker-compose和dockerfile文件

  • 目前Python程序写入数据库和Java程序调用Python程序都写死了ip,先将就着用

流程

安装docker及相关组件

docker官方文档:CentOS 操作系统 |Docker 文档

  1. 安装软件包并设置存储库

    sudo yum install -y yum-utils
    sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
  2. 在安装docker前,执行下面命令配置一下镜像,不然安装不成功

               ​   24年中不知道国家出于什么方向的考虑,把docker源和国内主流的docker镜像源全封了,包括但不限于阿里、各家大学的镜像源。因此下载的时候需要费一些功夫
    sudo mkdir -p /etc/docker  #创建目录
    
    sudo touch /etc/docker/daemon.json   # 创建文件
    
    sudo vi /etc/docker/daemon.json      # 添加镜像配置

    PS:如果安装过docker直接vi就行了,不用创建目录和文件

    镜像源是这个直接粘贴到上面那个文件中,注意这些都可能会被国家封了,到时候需要自己找镜像源

    {
    "registry-mirrors": ["https://docker.1panel.live", "https://hub.rat.dev/", "https://docker.chenby.cn", "https://docker.m.daocloud.io"]
    }
  3. 再去下载docker和docker套件就好了,注意网络不稳定,可能失败,再重装一下即可

    sudo yum install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
  4. 验证是否安装成功

    sudo systemctl start docker
    
    sudo docker run hello-world   # 出现hello docker就显示安装成功了

启动项目

  1. 安装maven

    sudo yum install maven
  2. 打包 (注意时间可能较长)

    sudo mvn package -DskipTests

    我推荐直接在本地打jar包上传到远程,这样步骤1、2就不用做了,好像在云服务器打还会出现找不到java的情况需要安装java,可能是我maven配置有问题

  3. 执行docker-compose文件命令

    sudo docker compose -f docker-compose.env.yml up
    sudo docker compose -f docker-compose.service.yml up

注意:发布到线上还需要做两件事情:

  1. 同步nacos配置

  2. 创建mysql表结构

  3. xxl-job新建执行器、同步xxl-job表结构

  4. es新建索引

踩踩坑

如果同时通过命令行或docker-compose和内部配置文件指定了环境,会以前者的环境为准

1:解决java -jar打包失败报ischool-user-service | no main manifest attribute, in /app/iSchool-user-1.0-SNAPSHOT.jar

给需要打jar包的微服务加上这段配置

!注意别删除之前的配置,不然可能有时候你Java代码不写参数名本来可以跑但是编译以后由于没有带参数导致跑不了了

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
                <executions>
                    <execution>
                        <id>repackage</id>
                        <goals>
                            <goal>repackage</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>
        </plugins>
    </build>

2:解决redis RDB没有权限问题

sudo chown -R 1000:1000 /home/code/data/.redis-data
sudo chmod -R 777  /home/code/data/.redis-data

解决es没有获得节点锁的问题

sudo chown -R 1000:1000 /home/code/data/.elasticsearch-data
sudo chmod -R 777  /home/code/data/.elasticsearch-data

3:解决es访问失败问题(加上安全配置)

  elasticsearch:
    image: elasticsearch:8.11.1
    container_name: ischool-elasticsearch
    environment:
      - xpack.security.enabled=false
      - discovery.type=single-node
      - ELASTIC_PASSWORD=123456
      - ES_JAVA_OPTS=-Xms1g -Xmx1g # 一定要加,不然低配云服务器内存会被撑爆
    ports:
      - "9200:9200"
    volumes:
      - ./.elasticsearch-data:/usr/share/elasticsearch/data
    networks:
      - mynetwork

4:解决使用element-plus组件库内置img属性时图片不生效问题。是因为vite默认不会处理某种格式的图片,nginx加一个转发即可

location /public/ {
    alias /usr/share/nginx/html/dist/;  # 图片路径
}

附录

查看停止的docker容器日志:

docker inspect --format '{{.LogPath}}' 60f486ec7c33
cat xxx

删除所有容器和容器镜像

docker rm -f $(docker ps -aq)

docker rmi -f $(docker images -q)

修改mysql容器密码(没改密码,有个人把我mysql表和数据全删了!!!真的无语,不能理解这种人的动机):

docker exec -it ischool-mysql bash
mysql -u root -p
ALTER USER 'root'@'localhost' IDENTIFIED BY 'xxx';

docker-compose模版与各个微服务的Dockerfile链接: 智搜通—大数据量下的综合性教务公告检索平台

根据自己需要改写配置文件,线上中间件一定要设置密码,接口文档不要暴露出来(不过你不配nginx转发好像默认就404hh)。

​ 然后我们一般的处理方式是创建一个开发环境和一个生产环境的配置文件,在这种场景下,每个微服务的生产环境配置文件一般写一个nacos配置即可,剩下配置比如mysql账号密码,网关转发配置的在线上nacos里面配置。本地调通发到线上解决这个docker相关配置文件编写即可,需要帮助可进qq粉丝群提问,我看到都会答疑的!


Comment