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.pswp.cn/pingmian/93391.shtml
繁体地址,请注明出处:http://hk.pswp.cn/pingmian/93391.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【算法】模拟专题

什么是模拟? 是一种通过模仿现实世界或问题场景的运行过程来求解问题的算法思想。它不依赖复杂的数学推导或逻辑优化,而是按照问题的实际规则、步骤或流程,一步步地 “复现” 过程,最终得到结果。 使用场景:当问题的逻…

【FreeRTOS】刨根问底6: 应该如何防止任务栈溢出?

【加关注,不迷路】一、栈溢出:程序世界的“越界洪水”就象一个装水的玻璃杯(栈空间),每次调用函数就像向水杯中倒水(压入保护需要恢复的数据)。当函数嵌套调用过深(如递归失控&#…

牛客周赛 Round 105

A.小苯的xor构造题目描述小红喜欢整数 k&#xff0c;他想让小苯构造两个不相等的非负整数&#xff0c;使得两数的异或和等于 k。请你帮帮小苯。#include <bits/stdc.h> using namespace std; using ll long long; void solve() {int k;cin>>k;cout<<0<&l…

《R for Data Science (2e)》免费中文翻译 (第4章) --- Workflow: code style

写在前面 本系列推文为《R for Data Science (2)》的中文翻译版本。所有内容都通过开源免费的方式上传至Github&#xff0c;欢迎大家参与贡献&#xff0c;详细信息见&#xff1a; Books-zh-cn 项目介绍&#xff1a; Books-zh-cn&#xff1a;开源免费的中文书籍社区 r4ds-zh-cn …

11-verilog的RTC驱动代码

verilog的RTC驱动代码 1.例化parameter SLAVE_ADDR 7h51 ; // 器件地址 parameter BIT_CTRL 1b0 ; // 字地址位控制参数(16b/8b) parameter CLK_FREQ 26d50_000_000; // i2c_dri模块的驱动时钟频率(CLK_FREQ) parameter I2C_FR…

【k8s、docker】Headless Service(无头服务)

文章目录问题背景1、什么是Headless Service1.2 为什么 Zookeeper 使用 Headless Service&#xff1f;1.2 Headless Service 的 DNS 行为1.3 验证示例1.4 如何创建 Headless Service&#xff1f;2. zk-0.zookeeper.default.svc.cluster.local 域名是如何创建出来的&#xff1f;…

scikit-learn/sklearn学习|套索回归Lasso解读

【1】引言 前序学习进程中&#xff0c;对用scikit-learn表达线性回归进行了初步解读。 线性回归能够将因变量yyy表达成由自变量xxx、线性系数矩阵www和截距bbb组成的线性函数式&#xff1a; y∑i1nwi⋅xibwTxby\sum_{i1}^{n}w_{i}\cdot x_{i}bw^T{x}byi1∑n​wi​⋅xi​bwTxb实…

暴雨服务器:以定制化满足算力需求多样化

在数字经济与实体经济深度融合的浪潮下&#xff0c;互联网行业正经历着前所未有的技术变革。大数据分析、云计算服务、人工智能算法等技术的快速演进&#xff0c;推动着企业对于高性能计算基础设施的需求呈现指数级增长。据IDC数据显示&#xff0c;互联网行业已成为全球服务器采…

JavaScript字符串详解

创建字符串&#xff1a; 1.使用字面量(推荐)&#xff1a; 这是最常用、最直接的方式。你可以用单引号 ()、双引号 (") 或反引号 () 把文本包起来 let singleQuote 单引号; let doubleQuote "双引号"; let templateLiteral 反引号;2.使用String 构造函数&…

Kiro Preview 应用评测

Kiro应用评测 Kiro 是一个由亚马逊推出的 AI 驱动的智能开发环境&#xff0c;从原型到生产全程陪伴您的开发过程。它将"灵感编程"的流畅性与规范的清晰性相结合&#xff0c;帮助您更快地构建更好的软件。 昨天收到了Kiro的试用邮件&#xff0c;收到邮件后第一时间下载…

Flink2.0学习笔记:Flink服务器搭建与flink作业提交

一&#xff0c;下载flink:Downloads | Apache Flink,解压后放入IDE工作目录&#xff1a;我这里以1.17版本为例 可以看到&#xff0c;flink后期的版本中没有提供window启动脚本:start-cluster.bat 所以这里要通过windows自带的wsl 系统启动它 打开终端依次运行下列命令完成w…

MySQL锁的分类

MySQL锁可以按照多个维度进行分类&#xff0c;下面我用最清晰的方式为你梳理所有分类方式&#xff1a;一、按锁的粒度分类&#xff08;最常用分类&#xff09;锁类型作用范围特点适用引擎示例场景表级锁整张表开销小、加锁快&#xff0c;并发度低MyISAM, MEMORY数据迁移、全表统…

电脑上搭建HTTP服务器在局域网内其它客户端无法访问的解决方案

在电脑上开发一套HTTP服务器的程序在调试时&#xff0c;在本机内访问正常&#xff0c;但是在本机外访问就不正常&#xff0c;外部客户端无法访问或无法连接到本机的服务器的问题&#xff0c;这可能涉及网络配置、防火墙、端口转发或服务绑定等问题&#xff0c;在这里提供了解决…

双指针和codetop2(最短路问题BFS)

双指针和codetop21.双指针1.[复写0](https://leetcode.cn/problems/duplicate-zeros/)2.动态规划1.[珠宝的最高价值](https://leetcode.cn/problems/li-wu-de-zui-da-jie-zhi-lcof/description/)2.[解码方法](https://leetcode.cn/problems/decode-ways/)3.[下降路径最小和](ht…

基于K邻近算法(KNN)的数据回归预测模型

一、作品详细简介 1.1附件文件夹程序代码截图 全部完整源代码&#xff0c;请在个人首页置顶文章查看&#xff1a; 学行库小秘_CSDN博客https://blog.csdn.net/weixin_47760707?spm1000.2115.3001.5343 1.2各文件夹说明 1.2.1 main.m主函数文件 该MATLAB代码实现了一个基于…

【123页PPT】化工行业数字化解决方案(附下载方式)

篇幅所限&#xff0c;本文只提供部分资料内容&#xff0c;完整资料请看下面链接 https://download.csdn.net/download/2501_92808859/91654005 资料解读&#xff1a;【123页PPT】化工行业数字化解决方案 详细资料请看本解读文章的最后内容。化工行业作为国民经济的重要支柱之…

c++--文件头注释/doxygen

文件头注释 开源项目&#xff1a; /*** file robot_base.cpp* author Mr.Wu* date 2025-05-28* version 1.0.0* brief Robot basic drive to communicate with controller** copyright Copyright (c) 2025 google.** Licensed under the Apache License, Version 2.…

【教程】笔记本安装FnOS设置合盖息屏不休眠

重装FnOS好几次了&#xff0c;合盖后屏幕关闭但不休眠的问题每次都要网上找参差不齐的教程&#xff0c;麻烦死了&#xff0c;索性记录一下方便以后复制粘贴。 使用root登录 sudo -i修改系统配置文件编辑logind.conf文件&#xff1a; 打开终端&#xff0c;输入以下命令以编辑log…

深入解析 Monkey OCR:本地化、多语言文本识别的利器与实践指南

在信息爆炸的时代&#xff0c;从图片、扫描文档中高效提取结构化文本的需求日益迫切。OCR&#xff08;光学字符识别&#xff09;技术成为解决这一问题的核心工具。尽管市面上有 Abbyy FineReader、Adobe Acrobat 等商业巨头&#xff0c;以及 Tesseract、PaddleOCR 等开源方案&a…

动态规划法 - 53. 最大子数组和

什么是动态规划法&#xff1f; 简单说&#xff0c;动态规划&#xff08;Dynamic Programming&#xff0c;简称 DP&#xff09; 是一种**「把复杂问题拆解成小问题&#xff0c;通过解决小问题来解决大问题」**的方法。 核心思路有两个&#xff1a; 1.拆分问题&#xff1a;把原问…