文章中的方法是自己琢磨出來的,或許有更優解,共同學習,共同進步!
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