引子
本来下午准备参加一个活动 可以白领花 和一个妹子说好一起去 结果之前给一个物流公司写的项目 结果公司服务器重置了 没办法只能重装环境 重新部署项目
本以为 1~2h 就能搞定 没想到竟搞到快晚上 10 点(可能是最近一直在看前端 好久没有部署环境了 Linux指令也忘得差不多了) 特写此文记录部署时遇到的坑
部署环境
- os
- centos
- node npm nginx
坑一 ssh scp 失效
起因:当时开发时图省事 配置了免密登录 后来服务器重置了 把我本机公钥删掉了
现象:ssh 连不上服务器 且 scp 失效
解决方案:将本机的 ~/.ssh/known_hosts文件里那个IP对应的记录删掉再登录试试
造成原因见文末
坑二 node版本太低
安装时图省事 yum install nodejs 结果版本太低 好多包都下不了
后又通过源码安装 需通过 ln -s 配置环境变量
解决方案:
- 通过yum
curl -sL https://rpm.nodesource.com/setup_10.x | bash - // 执行该网页的脚本
sudo yum clean all && sudo yum makecache fast
sudo yum install -y gcc-c++ make
sudo yum install -y nodejs
- 源码安装
wget https://nodejs.org/dist/v8.9.4/node-v8.9.4.tar.gz
tar zxvf node-v8.9.4.tar.gz
cd node-v8.9.4
./configure
make && make install
- 软连接用法 找到安装目录 /bin 目录
ln -s /usr/local/xxxx/bin/xxx /usr/local/sbin/xxx
坑三 nginx 安装问题
通过 yum 源安装 由于上传错误的前端项目 误以为是 nginx 的问题
yum remove 卸载不干净
find / -name nginx* | xargs rm -rf // 卸载大法 将系统中所有 名字中含 nginx 的文件 全部删掉
后通过源码安装 各种问题
- 问题一
cp: "conf/koi-win" 与"/usr/local/nginx/conf/koi-win" 为同一文件
make[1]: *** [install] 错误 1
make[1]: Leaving directory `/usr/local/nginx'
make: *** [install] 错误 2
- 解决方案
./configure --prefix=/usr/local/nginx --conf-path=/usr/local/nginx/nginx.conf
- 问题二
- 安装后配置 https 没装 ssl 模块 然后返工
各种坑原因
坑一原因
SSH 登录方式
-
口令登录
ssh user@host
The authenticity of host ‘host (12.18.429.21)’ can’t be established.
RSA key fingerprint is 98:2e:d7:e0:9f:ac:67:28:c2:42:2d:37:16:58:4d.
Are you sure you want to continue connecting (yes/no)?- 无法确认host主机的真实性,只知道它的公钥指纹,问你还想继续连接吗
- 用户怎么知道远程主机的公钥指纹应该是多少?回答是没有好办法,远程主机必须在自己的网站上贴出公钥指纹,以便用户自行核对
- 远程主机的公钥被接受以后,它就会被保存在文件$HOME/.ssh/known_hosts之中。下次再连接这台主机,系统就会认出它的公钥已经保存在本地了,从而跳过警告部分,直接提示输入密码
- 上面服务器发送客户端的公钥,存储在服务器的/etc/ssh/ssh_host_rsa_key.pub中(有可能是同目录下的其他.pub文件中)
-
公钥登录
- 原理很简单,就是用户将自己的公钥储存在远程主机上。登录的时候,远程主机会向用户发送一段随机字符串,用户用自己的私钥加密后,再发回来。远程主机用事先储存的公钥进行解密,如果成功,就证明用户是可信的,直接允许登录shell,不再要求密码。
原因:服务器重置后 公钥私钥已变 系统已之前的公钥加密 自然无法连接
坑二原因
下载环境 版本号很重要 不要图一时之快 后面多花费的时间 比你想象的要多
附 Linux 软硬链接知识点
引子
- Linux 的文件系统里面,每一个文件都有一个对应的 inode,也就是硬盘中专门储存文件元信息的区域,在其中会包含文件的字节数、拥有者、权限等信息。值得注意的是,文件名与 inode 并不是一一对应的关系,而是多对一的关系,也就是说会出现多个文件名对应同一个 inode 的情况。当我们去访问一个文件时,Linux 系统会首先通过文件名找到其对应的 inode,通过其中的信息读取文件。这种从文件名到 inode 的对应就是硬链接。
在 Linux 系统中有两种链接:
- 硬链接(hard links)
- 比如说我在微博上有一个昵称 Roscoe,而我在 Github 还有一个昵称 roscoe054,但是这两个名字其实都是指到我同一个人。同理,通过硬链接我们可以从不同的文件名访问到相同的内容。而不管我们从哪个文件名访问并修改了这个文件,当我们从另外的文件名访问到时,获取到的也将是修改后的内容。
- 软链接(soft links)或符号链接(symbolic links)
- 软链接和硬链接的区别在于,它并不是指向 inode,而是指向文件名。比如说我创建了一个 /path/link.js 到 /path/file.js 的软链接,则当我访问 link.js 的时候,实际上相当于访问 file.js。如果我把 file.js 删除的话,再去访问 link.js 就会报错。
- 设置软链接的源地址和目标地址都必须是绝对路径
坑三原因
- ./configure --prefix = ‘xxxxxx’ 作用
如果不配置该选项,安装后可执行文件默认放在/usr /local/bin,库文件默认放在/usr/local/lib,配置文件默认放在/usr/local/etc,其它的资源文件放在/usr /local/share,比较凌乱
用了—prefix选项的另一个好处是卸载软件或移植软件。当某个安装的软件不再需要时,只须简单的删除该安装目录,就可以把软件卸载得干干净净;移植软件只需拷贝整个目录到另外一个机器即可(相同的操作系统)
- –conf-path=PATH
设置nginx.conf配置文件的路径。nginx允许使用不同的配置文件启动,通过命令行中的-c选项。默认为prefix/conf/nginx.conf
主要原因是文件名重复 还有不要把源码 和 安装的路径写在一起
小结
最后活动也没参与成 还弄到很晚
主要是心态崩了 光想着赶快结束 越急错越多 再加上好久没有部署环境 对Linux命令已生疏不少
中间把前端项目传错了都没有发现
而且 从本文来看 自己还是太嫩了点
环境的版本 编译时需要加载的模块 等细节 都没考虑到
最后说好和妹子一起去的 还把她鸽了 难受到一批