当前位置: 首页 > news >正文

gitee 流水线+docker-compose部署 nodejs服务+mysql+redis

文章中的方法是自己琢磨出来的,或许有更优解,共同学习,共同进步!

docker-compose.yml 文件配置:

说明:【配置中有个别字段冗余,但不影响使用】该文件推荐放在nodejs项目的根目录中,gitee流水线中也用到了路径 ,如果修改,需要同步处理,避免异常情况

name: "node_server"services:node_server:image: node:20-alpine  # 使用官方 Node.js 镜像(版本按需调整)container_name: node_serverports:- "8088:8088"volumes:- ./node:/usr/src/app  # 挂载本地代码目录到容器- /usr/src/app/node_modules  # 避免覆盖容器内的 node_modulesworking_dir: /usr/src/app  # 设置容器内部的工作目录networks:- node_server_netdepends_on: # 确保依赖的容器先起来- node_mysql_dev- node_redisenvironment:- DB_HOST=node_mysql_dev  # 使用服务名(Docker 网络内 DNS 自动解析)- DB_PORT=3306- DB_USER=root- DB_PASSWORD=PASSWORD- DB_NAME=node_test01  # 按需修改- npm_config_registry=https://registry.npmjs.org- TZ=Asia/Shanghairestart: unless-stoppedcommand: sh -c "npm install --legacy-peer-deps && npm start"  # 启动命令node_mysql_dev:image: node_mysql  # 你的自定义MySQL镜像,若用官方镜像可改为 `mysql:latest`container_name: node_mysql_devports:- "3306:3306"volumes:- ./mysql/conf.d:/etc/mysql/conf.d- ./mysql/data:/var/lib/mysql- ./mysql/mysql-files:/var/lib/mysql-files- ./mysql/init-scripts:/docker-entrypoint-initdb.d # sql文件位置networks:- node_server_netenvironment:- MYSQL_ROOT_PASSWORD=w43903- MYSQL_DATABASE:node_test01- TZ=Asia/Shanghai # 指定时区command:--character-set-server=utf8mb4--collation-server=utf8mb4_unicode_cirestart: unless-stoppedtty: true  # 相当于 -itd 中的 -tnode_redis:image: redis:latest  # 官方Redis镜像container_name: node_redisports:- "6379:6379"volumes:- ./redis/data:/data- ./redis/conf/redis.conf:/etc/redis/redis.confnetworks:- node_server_netenvironment:- TZ=Asia/Shanghaicommand: redis-server /etc/redis/redis.conf  # 指定配置文件启动restart: unless-stopped# 自定义的网络
networks:node_server_net:

gitee流水线配置:

默认已有 服务器、仓库、及代码,并且远程仓库和本地已有关联

新建流水线操作可以查看另一篇文章:gitee_配置自动部署vue项目-CSDN博客

这篇文章只介绍【流水线的脚本配置、docker-compose.yml 文件的配置】

流水线配置:【#-控制台不会输出;echo-控制台输出】

# NodeJs构建echo '拉取最新代码'
git pull --rebase origin devlelopment # 分支名根据实际填写npm config set registry https://registry.npmmirror.com && npm install# nodejs 项目不用打包,下载依赖后在服务器运行即可,下面是将项目相关文件转为压缩包。压缩包名称要与后续步骤关联
tar -czf output.tar.gz node_modules src docker-compose.yml package.json server.jsecho '创建文件夹、移动压缩包、列举 dist 文件夹'
# 下游操作需要获取当前操作的 dist 产出物,类似于 vue 项目打包后的 dist 文件夹
mkdir -p dist && mv output.tar.gz ./dist/ && ls dist/
# 主机部署脚本# 宿主机中存放 nodejs 源码的位置
mkdir -p ~/docker/node_server/node# 清空,避免缓存
rm -rf ~/docker/node_server/node/*echo '解压内容'
# output.tar.gz 压缩包是上游的产出物,内部包含 dist 文件夹
tar zxvf ~/docker/node_server/gitee_go/deploy/output.tar.gz -C ~/docker/node_server/nodeecho '查看 ~/docker/node_server/node'
ls ~/docker/node_server/nodeecho '解压文件到指定路径'
# 这个 output.tar.gz 压缩包是上游操作中手动执行压缩的项目文件,内部包含 docker-compose.yml 文件
tar zxvf ~/docker/node_server/node/dist/output.tar.gz -C ~/docker/node_server/nodeecho '移动 docker-compose.yml 到~/docker/node_server 并查看'
mv ~/docker/node_server/node/docker-compose.yml ~/docker/node_server && ls ~/docker/node_server/echo '删除多余文件夹'
rm -rf ~/docker/node_server/node/dist ~/docker/node_server/gitee_go# 以上操作会进入内部文件夹,直接执行构建镜像操作会导致找不到配置文件
cd ~/docker/node_serverecho '移除容器、构建镜像并启动容器'
# 移除容器:如果不移除并直接执行打包的话,会导致镜像不更新
docker compose down && docker compose build && docker compose up -d
echo 'Hello Gitee Go!'

脚本执行完毕后,容器会根据依赖关系挨个启动,需要短暂时间更新状态

可以执行一下指令查看状态:

查看已经启动的容器
    docker compose ps

启动被停止的容器(重启容器)
    docker compose start/restart [容器名]

进入容器
    docker compose exec 容器名 bash

查看服务日志
    docker compose logs [-f]
        -f 代表输出实时日志

用于停止和移除由 docker compose up 创建的容器、网络和卷
    docker compose down

http://www.xdnf.cn/news/1319311.html

相关文章:

  • Matlab数字图像处理——基于BM4D压缩感知的三维图像信号重构算法
  • ai测试(六)
  • 中级统计师-会计学基础知识-第五章 财务报告
  • (MST,并查集)nflsoj #4114 货车运输/洛谷 P1967NOIP2003 货车运输
  • 反向代理、负载均衡器与API网关选型决策
  • C++算法题目分享:二叉搜索树相关的习题
  • 【165页PPT】基于IPD的研发项目管理(附下载方式)
  • RISC-V汇编新手入门
  • 计算机视觉(一):nvidia与cuda介绍
  • Android 组件封装实践:从解耦到架构演进
  • Python使用数据类dataclasses管理数据对象
  • metasploit 框架安装更新遇到无法下载问题如何解决
  • Redis面试精讲 Day 24:Redis实现限流、计数与排行榜
  • C#中List、Path、字符串操作等常用方法总结
  • ​​Vue 3 开发速成手册
  • 说一下事件传播机制
  • Python注解
  • Python入门第7课:异常处理机制:让你的程序更健壮(try-except详解)
  • 配置 NVIDIA RTX 5090 + sm_120 + flashattention,已跑通一个大模型 ~~
  • C语言(12)——进阶函数
  • Day3--滑动窗口与双指针--2461. 长度为 K 子数组中的最大和,1423. 可获得的最大点数,1052. 爱生气的书店老板
  • 数字货币的法律属性与监管完善路径探析
  • 实变函数中集合E的边界与其补集的边界是否相等
  • Android中使用Compose实现各种样式Dialog
  • Dify 从入门到精通(第 40/100 篇):Dify 的企业级权限管理
  • Mutually aided uncertainty
  • Windchill 11.0使用枚举类型自定义实用程序实现生命周期状态管理
  • Makefile介绍(Makefile教程)(C/C++编译构建、自动化构建工具)
  • 计算机网络 TCP、UDP 区别
  • 从需求到部署全套方案:餐饮服务许可证数据可视化分析系统的大数据技术实战