最近迁移了一下一个小网站,从一台机器迁移到另一台,虽然过程其实很简单,但还是有些东西可以记一下。
迁移过程
先从旧机器的mongoDB上把数据导出来,数据导入导出的方法可以参考:MongoDB 的更新操作、数据导入,数据库导出,导出后我把数据放在了项目的gitlab仓库里。
在新机器上选一个文件夹,使用git clone [gitlab仓库地址]
就把项目拉下来了。拉下来后以为可以跟windows一样npm i
就完事了,但是下载一直卡住,后来去请教了大佬,大佬说尽量不要在机器上使用npm i
,因为这样会占用网络带宽,会使机器上的其他服务受影响。他的建议是将本地开发的node_modules
压缩后放在项目里,随项目git pull
到机器上即可。
将项目的包都拉到机器上后,想着可以输入运行指令了吧!可曾想npm run prd
后发现报错cross-env
无法使用,这个问题暂时无解,因为用了替代的方法,没有使用npm script启动了,而是直接使用pm2 node/www
启动了项目。
启动成功后以为可以平稳运行了,却发现过了一会后就显示进程状态错误停止了。又去请教大佬,大佬教了一个指令pm2 logs 0
查看 pm2 日志,发现 pm2 日志提示logs: No such file or directory
,意思是没有logs文件夹,于是用mkdir logs
创建了logs文件夹。
没一会发现又失败了,再看日志,发现日志里的错误变成了permisson denied write to file xxxx.logs
意思是没有权限在logs文件夹里做读写操作。又又跑去请教大佬,大佬将文件夹的权限修改了后,程序终于稳定运行了。这里又涉及到了 linux 的文件夹读写权限知识。
简单地说,就是 linux 系统里有三种角色:user, group, other,每个角色对文件的操作权限都不同,我们可以使用 root 权限对某一个文件的权限用 chmod
指令修改,授予/取消某个角色操作一个文件的能力。
安全相关
程序部署上去后,一开始想着是不是也跟部署自己的机器一样,要开放程序的运行端口让外部访问呢,但是发现端口怎么都打不开,又跑去问了大佬,大佬说一般不会直接开放某个端口让外部访问,而是通过 Nginx + 域名路径,从 80 端口访问,再根据域名路径访问相应的服务。
程序运行起来后发现,使用IP还是可以直接访问到服务,大佬觉得这样不安全,不能让别人用IP就可以访问到网站,大佬让我不要让node服务listent
0.0.0.0,改为127.0.0.1
,这样,服务就只能通过127.0.0.1
访问了,而不会通过公网IP访问到。
关于127.0.0.1和0.0.0.0的区别,可以看127.0.0.1和0.0.0.0地址的区别这篇文章。
代码发布
我司的代码发布流程是使用的 rsync,将代码从 gitlab pull下来后,使用 rsync 同步到外部机器,至于代码一开始是 pull 到哪台机器,这个还要请教一下相关的同事。
以上就是一次服务的迁移过程,虽然难度不大,但是涉及到了一些 Nginx 和 Linux 相关的知识。
网友评论