当前位置: 首页 > 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.dtcms.com/a/336088.html

相关文章:

  • Effective C++ 条款46:需要类型转换时请为模板定义非成员函数
  • tauri2项目WindowConfig配置中titleBarStyle样式区别,仅macOS有效
  • 如何在Windows系统中更改用户名(中文转英文全流程)
  • Deepseek一体机
  • 视觉图像界面设计【QT-creator高级编程 - 01】图像显如何保证跟随主窗口变化,且保留必要的设定窗口
  • MiracleVision-美图旗下AI视觉大模型
  • 2001-2024年中国冬小麦30米分辨率种植分布数据集
  • 【Luogu】每日一题——Day20. P4366 [Code+#4] 最短路 (图论)
  • SWE-bench:真实世界软件工程任务的“试金石”
  • 2025年- H97-Lc205--23.合并k个升序链表(链表、小根堆、优先队列)--Java版
  • 【Python练习】097. 编写一个函数,实现简单的版本控制工具
  • C++ 标准模板库 (^^ゞ 致敬 STL 创始人 Alexander Stepanov
  • 基于Python的旅游推荐系统 Python+Django+Vue.js
  • 计算机网络 TCP三次握手、四次挥手超详细流程【报文交换、状态变化】
  • 工作中使用到的 TRPS 【Temporal Residual Pattern Similarity】和 K-sigma 算法
  • C++——特殊类设计 类型转换 IO流
  • Redis学习--集群 数据分片、哈希槽、集群配置、主从容错迁移、扩缩容
  • live555 rtsp server
  • 通达信【二板爆量涨停】副图/选股指标,首板次日继续强势封板,整合MACD和KDJ指标确保趋势向上,专注二板机会
  • 【计算机网络面试】TCP/IP网络模型有哪几层
  • Python中f - 字符串(f-string)
  • 软考 系统架构设计师系列知识点之杂项集萃(127)
  • 第2章 高并发IO的底层原理
  • 数据结构:二叉搜索树(Binary Search Tree)
  • 【Android】Activity创建、显式和隐式跳转、清单文件声明
  • Pytorch模型复现笔记-VGG讲解+架构搭建(可直接copy运行)+冒烟测试
  • MLArena:一款不错的AutoML工具介绍
  • 【股票数据API接口33】如何获取股票所属指数数据之Python、Java等多种主流语言实例代码演示通过股票数据接口获取数据
  • PCA 实现多向量压缩:首个主成分的深层意义
  • JZ57 和为S的两个数字