服务器迁移及docker部署-元一软件
背景这段时间负责公司运维工作多个私有云服务器快到期了因此线上服务和数据需要迁移备份但是如果在同一台机器上部署多个实例难免有端口冲突为了做到相互隔离和维护方便docker可能是最佳选择于是开始了我的迁移之旅备份服务器迁移过程中最重要的是数据为了确保数据不丢失最好是晚上停机备份# redis拷贝rdb文件和conf配置文件# mysql全量备份mysqldump --all-databases-uroot-pmysql_backup.sql# mysql容器备份配置文件/etc/mysql/mysql.conf.d/mysqld.cnfdockerexec-itid(container)mysqldump --all-databases-uroot-pmysql_backup.sql# 导出单个库如果在db_name 前加--databases 最终在xxx.sql里面会有create database db_name;和use db_name;语句dockerexec-itid(container)mysqldump-uroot-pdb_namemysql_backup.sql# mongo备份整库到指定文件mongodump--authenticationDatabaseadmin-uadmin-p123-dxc_log--archive./xc_log.archive# 数据量大时可使用gzip压缩mongodump--authenticationDatabaseadmin-uadmin-p123-dxc_log--port27017-o./mongo_back/--gzip# mongodb容器导出数据dockerexecmongo-cexec mongodump -uadmin -p123456 --authenticationDatabaseadmin -d xc_log --archive./xc_log.archive[mongodump命令详解]备份文件传输可使用scp命令和xftp软件推荐使用rsync同步整个项目目录# 将backup文件夹传送到远程的目录可列出多个回车后需要输入密码scp-r backup rootip:/workspace/shlg# 传送文件scp mysql_backup.sql mysqld.conf rootip:/workspace/shlg部署服务器环境配置如 gitnginx等这里不多讲docker安装安装过程请自行搜索[Ubuntu安装docker]创建自定义网络虚拟网桥这样容器可以与同一网络中的其他容器通信# 默认为 bridge 模式dockernetwork create tongji_net# 打印所有网络dockernetworkls# 查看网络信息dockernetwork inspect tongji_net关于network的更多解释见数据库redis如有备份文件请把rdb文件拷贝至data目录下# 拉取合适的版本dockerpull redis:5.0-alpine# 生成容器dockerrun-itd--nameshlg_redis-v/workspace/shlg/redis/data:/data-v/workspace/shlg/redis/redis.conf:/etc/redis/redis.conf--networktongji_net--ip172.18.0.25--restartalways redis:5.0-alpine配置文件需改为如下设置# 关闭守护进程否则起不来 daemonize no # 生产上可不用修改默认为127.0.0.1仅限本机访问 bind 0.0.0.0mysql如需设置时区请加上-e TZAsia/Shanghai# --name 容器名称# -p 端口映射# -v 目录挂载# -e 设置root密码等# --network 绑定网络# --ip 绑定ipdockerrun-d--nameshlg_mysql-p3406:3306-v/workspace/shlg/mysql/data:/var/lib/mysql-v/workspace/shlg/mysql/my.cnf:/etc/my.cnf-eMYSQL_ROOT_PASSWORD123456--networktongji_net--ip172.18.0.24 mysql:5.7.31数据恢复dockerexec-itid(container)mysql-uroot-p123456./mysql_backup.sql# 数据库实例恢复单数据库mysql-uroot-pqd_xc_v3./qd_xc_v3.sql# 数据库实例恢复所有数据库mysql-uroot-p./mysql_backup.sql用户角色配置# 5.7之前的版本 grant all privileges on *.* to test172.18.0.% identified by password with grant option; # 如果想配置某个数据库的权限改成 grant all privileges on database_name.* to test172.18.0.% identified by password with grant option; flush privileges; show grants for test127.0.0.1; # 8.0之后的版本 CREATE USER test% IDENTIFIED BY password; GRANT ALL PRIVILEGES ON *.* TO test% WITH GRANT OPTION; FLUSH PRIVILEGES; # 撤销权限 revoke shutdown on *.* from user%;mongodbdocker run-itd--name shlg_mongodb-v/workspace/shlg/mongodb/data:/data/db--network tongji_net--ip172.18.0.26mongo:4.0数据恢复# 此命令暂未生效dockerexec-ishlg_mongodb mongorestore-uadmin-p123--authenticationDatabaseadmin-dxc_log--gzip/workspace/shlg/mongodb/xc_log# 有效dockerexec-ishlg_mongodbsh-cexec mongorestore -u admin -p 123 --authenticationDatabase admin --archive/workspace/shlg/xc_log.archive可以直接进入容器内部无需密码设置用户角色docker exec -it shlg_mongodb mongo use admin db.createUser({user:admin,pwd:mongo123,roles:[{role:root,db:admin}]}) use xc_log db.createUser({user:shlg,pwd:123456,roles:[{role:dbOwner,db:xc_log}]})然后在/etc/mongod.conf文件的 security 下加上下面的代码重启服务即可生效security: authorization: enabled[mongorestore命令]node服务这里有多个node服务exports、log、join、xiaochuang_3.0shared是公共字典将它们部署到一个容器内需要打包成镜像再根据镜像生成容器在项目同级目录下新建Dockerfile文件内容如下FROM node:10.24-alpine ENVTZAsia/Shanghai RUN apk updateapkaddtzdataecho${TZ}/etc/timezoneln-sf/usr/share/zoneinfo/${TZ}/etc/localtimerm/var/cache/apk/* COPY exports /workspace/exports COPY log /workspace/log COPYjoin/workspace/join COPY xiaochuang_3.0 /workspace/xiaochuang_3.0 COPY shared /workspace/shared COPY script.sh /workspace/script.sh ENTRYPOINT[./workspace/script.sh]注意如果系统的文件存储在项目所在目录下且存的是绝对地址的话容器内的项目根目录必须保持和原系统一致否则会找不到文件。配置容器内项目启动脚本当前目录新建 script.sh 内容如下#!/bin/shcd/workspace/lognpmrun start-prodcd/workspace/exportsnpmrun start-prodcd/workspace/joinnpmrun start-prodcd/workspace/xiaochuangnpmrun start-prod给当前文件新增可执行权限chmod 755 script.sh在项目上一级目录新建init.sh名字自定义内容如下# 删除旧镜像docker rmi shlg_node:old# 标记新镜像为旧镜像docker tag shlg_node:latestshlg_node:olddocker rmi shlg_node:latest# 根据该目录下的Dockerfile打包镜像如果打包过程报错提示包无法下载请加上 --networkhostdocker build-t shlg_node:latest/workspace/shlg/workspace/--networkhost# 生成新的容器docker rm-f shlg_nodedocker run-d--name shlg_node-v/workspace/shlg/workspace/xiaochuang_3.0:/workspace/xiaochuang-v/workspace/shlg/workspace/exports:/workspace/exports-v/workspace/shlg/workspace/log:/workspace/log-v/workspace/shlg/workspace/join:/workspace/join-v/workspace/shlg/workspace/shared:/workspace/shared-v/workspace/shlg/workspace/logs:/root/logs--network tongji_net--ip172.18.0.52shlg_node:latest# 查看最新20条并跟踪启动日志docker logs--tail20-f shlg_node如果遇到容器无法启动的情况可能是因为docker容器运行必须有一个前台进程如果没有前台进程执行容器认为空闲就会自行退出。xiaochuang_3.0是项目主体所以得去掉package.json 中启动命令start-prod里的--daemon选项。如果后端项目要连接宿主机的数据库请把连接信息中的host改为该容器的网关ip可使用docker inspect container查看Gateway设置即为虚拟网卡ip确保路径映射和ip无误后最后运行脚本sh init.sh稍等几分钟中途没有报错的话容器自动运行最后大功告成~_~

相关新闻

Python语言基础:1_完整详细介绍

Python语言基础:1_完整详细介绍

Python 完整详细介绍一、Python 基础概述1. 起源与开发者Python 由荷兰程序员 吉多・范罗苏姆(Guido van Rossum) 在 1989 年圣诞节期间开发,初衷是替代 ABC 语言,追求简洁易读、人性化的编程语言。 名称取自喜剧《蒙提・派森》&a…

2026/9/21 13:19:12 阅读更多 →
《驾驭你的AI同事:WorkBuddy深度精通》035:17.1 数据主权与合规

《驾驭你的AI同事:WorkBuddy深度精通》035:17.1 数据主权与合规

《驾驭你的AI同事:WorkBuddy深度精通》035:17.1 数据主权与合规 本文是《唤醒你的 AI 同事:WorkBuddy 全栈指南》系列 卷二(深度精通) 的 第 35 篇。卷一带你"上手",卷二带你"看穿"——这一篇,我们进入企业版的"红线区":数据主权与合规,…

2026/9/19 2:09:40 阅读更多 →
Web Application Basics

Web Application Basics

Web Application Basics URL Scheme:often https User(rare) Host/Domain:website address typosquatting:mimic a website to trick people into giving up sensitive info. Port:usually 80-http,443-https Path:file path Query String:have ?—Modify-able Fragment—M…

2026/9/19 7:53:46 阅读更多 →

最新新闻

CheckBox 选中背景色不生效?用 TaoToken 接 Codex 改 input:checked 样式

CheckBox 选中背景色不生效?用 TaoToken 接 Codex 改 input:checked 样式

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/9/21 20:23:28 阅读更多 →
10 个前端 MCP 服务器盘点:这次用 TaoToken 走通 Claude Code 的模型通道

10 个前端 MCP 服务器盘点:这次用 TaoToken 走通 Claude Code 的模型通道

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/9/21 20:23:28 阅读更多 →
莎木online 面试必问:3分钟吃透核心原理与薪资真相

莎木online 面试必问:3分钟吃透核心原理与薪资真相

莎木online 面试必问:3分钟吃透核心原理与薪资真相 别再去啃那些几百页的官方文档了,真的,没人能看完。 很多刚入行的朋友,拿到【莎木online】相关的技术栈,第一反应就是慌。为什么?因为资料太散,官方文档太长抓不住重点,面试时被问倒…

2026/9/21 20:23:28 阅读更多 →
idt官网速查:面试原理吃透,完整示例救急

idt官网速查:面试原理吃透,完整示例救急

idt官网速查:面试原理吃透,完整示例救急 面试被问原理答不上来,那一刻脑子是空白的。别慌,这就是你急需 idt官网 相关技术点 完整示例…

2026/9/21 20:23:28 阅读更多 →
成志鹏证书避坑指南:版本升级后API全变?3招搞定

成志鹏证书避坑指南:版本升级后API全变?3招搞定

成志鹏证书避坑指南:版本升级后API全变?3招搞定 刚把环境升到最新稳定版,原本跑得好好的代码直接崩了?报错信息满屏红字,查半天文档发现核心 API 签名全改了。这种“版本升级后 API…

2026/9/21 20:23:28 阅读更多 →
3个坑让你面试翻车:第一徻所性能优化完整示例

3个坑让你面试翻车:第一徻所性能优化完整示例

3个坑让你面试翻车:第一徻所性能优化完整示例 面试被问原理答不上来,那种大脑一片空白的感觉,真的比写不出代码还难受。很多转岗的朋友,简历上写着精通Java或Go,面试官随口一问“这个模块为什么慢”,你只能支支吾吾说“可能是GC”,或者直接愣…

2026/9/21 20:22:27 阅读更多 →

日新闻

agents-generator 决策矩阵全解析:从项目检测到 AGENTS.md 规则生成的 16 步判定流程

agents-generator 决策矩阵全解析:从项目检测到 AGENTS.md 规则生成的 16 步判定流程

agents-generator 决策矩阵全解析:从项目检测到 AGENTS.md 规则生成的 16 步判定流程 【免费下载链接】agentic-awesome-skills AAS Core is the local, agent-first control plane for complete catalog discovery, agent-owned selection, stack validation, and …

2026/9/21 0:00:01 阅读更多 →
gin-vue-admin 前端工具函数全景指南:src/utils 复用规范与源码级解析

gin-vue-admin 前端工具函数全景指南:src/utils 复用规范与源码级解析

gin-vue-admin 前端工具函数全景指南:src/utils 复用规范与源码级解析 【免费下载链接】gin-vue-admin 🚀ViteVue3Gin拥有AI辅助的基础开发平台,企业级业务AI开发解决方案,内置mcp辅助服务,内置skills管理,…

2026/9/21 0:00:01 阅读更多 →
Wox 全功能插件开发实战指南:基于 Python / Node.js 宿主与 WebSocket 的持久化插件体系

Wox 全功能插件开发实战指南:基于 Python / Node.js 宿主与 WebSocket 的持久化插件体系

桌面应用AI 应用插件系统 【免费下载链接】Wox A cross-platform launcher that simply works 项目地址: https://gitcode.com/gh_mirrors/wo/Wox 点击查看 免费下载 全功能插件(Full-featured Plugin)是 Wox 三类插件实现方式中能力最完整的…

2026/9/21 0:00:01 阅读更多 →

周新闻

Flutter for OpenHarmony游戏卡片渐变背景实战:从原理到性能优化

Flutter for OpenHarmony游戏卡片渐变背景实战:从原理到性能优化

直接铺开项目本身吧。这几个月我一直在折腾一件事:用Flutter给OpenHarmony做一款游戏集合类的App,说白了就是把若干小游戏塞进一个壳里,用统一入口分发。这个方向本身不算新鲜,真正让我花了不少心思的,是首页那堆游戏卡…

2026/9/21 3:13:20 阅读更多 →
Word表格编号全攻略:从列表编号到题注交叉引用

Word表格编号全攻略:从列表编号到题注交叉引用

写Word文档,最让人头疼的往往是那些“看起来不起眼”的小问题。比如表格编号这事:今天在表后面多加了两个空白行,明天给客户交稿前发现整个章节的编号全部错位,光是挨个改序号就能耗掉大半个下午。我前阵子帮人整理一份上百页的技…

2026/9/21 2:19:36 阅读更多 →
从第一个站到第二个站:独立开发者的静态网站选型与落地实践

从第一个站到第二个站:独立开发者的静态网站选型与落地实践

1. 项目概述1.1 核心需求解析做独立开发者这几年,说实话,第一个网站上线的那天晚上我兴奋得没睡着。但等它跑了半年,流量惨淡、功能臃肿、代码自己都懒得看第二遍之后,我才慢慢琢磨明白一个道理:第一个网站是练手&…

2026/9/21 4:51:05 阅读更多 →

月新闻

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能分类:[AI/大模型]细分主题:AI 增强型 CI/CD 流水线自动化与 GitOps 实践:Agent 工作流、工具调用与任务拆解:从原型到生产的验收清单很多团队在尝试用大…

2026/9/21 15:36:51 阅读更多 →
容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场

容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场

容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场分类:[工程技术]细分主题:Kubernetes 生产环境运维与排障实战:可复制的项目复盘模板与决策记录大部分团队的事故复盘报告,最后都变成了躺在 Confluence 或钉…

2026/9/21 15:36:51 阅读更多 →
容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步

容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步

容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步分类:[工程技术]细分主题:Docker 容器化技术与镜像安全管理:核心链路的逐步实现与关键代码取舍面对一个积累了五六年历史包袱的单体架构应用(包含 Web 接口、后台…

2026/9/19 23:35:34 阅读更多 →