当前位置: 首页 > 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.lryc.cn/news/623830.html

相关文章:

  • 【计算机网络面试】TCP/IP网络模型有哪几层
  • Matlab数字信号处理——基于最小均方误差(MMSE)估计的自适应脉冲压缩算法复现
  • ThinkPHP8学习篇(三):控制器
  • 7.Ansible自动化之-实施任务控制
  • 最优化:建模、算法与理论|02 Optimization Modeling and Typical Examples(1)
  • [优选算法专题二滑动窗口——将x减到0的最小操作数]
  • 【adb端口5555】烽火hg680-gy_烽火hg680-gc安卓9线刷烧录包 解决用一段时间就提示升级的问题
  • Shell脚本-for循环语法结构
  • 【前端基础】19、CSS的flex布局
  • 蓝凌EKP产品:JSP 性能优化和 JSTL/EL要点检查列表
  • rt-thread audio框架移植stm32 adc+dac,用wavplayer录音和播放
  • 【从零开始学习Redis】项目实战-黑马点评D2
  • scikit-learn/sklearn学习|多任务套索回归MultiTaskLasso解读
  • Windows_Server软件定义网络架构
  • 【Linux系列】如何在 Linux 服务器上快速获取公网
  • 每日两道算法题:DAY3
  • uniappx 安卓端本地打包的一些总结
  • 【位运算】查询子数组最大异或值|2693
  • CNV检测--单细胞空间vs基因组WGS/WES
  • AutoSar BSW介绍
  • 《Nursing Research》(护理 SCI)LaTeX 模板详细教程:从入门到投稿(二)
  • http工作流程
  • 数据电台询价的询价要求
  • 数据链路层(1)
  • FX10/20 (CYUSB401X)开发笔记5 固件架构
  • 基于Netty的高并发WebSocket连接管理与性能优化实践指南
  • prototype 和 _ _ proto _ _的关联
  • multiboot 规范实践分析
  • 交叉编译 手动安装 SQLite 库 移植ARM
  • Python数据分析案例82——基于机器学习的航空公司满意度分析