运维相关杂记

© Young 2017-12-21 18:00
Welcome to My GitHub

Mac OS X 使用 sz/rz 命令下载/上传文件配置

一般管理远程Linux服务器时,经常需要与本地交互文件;可以有很多种方式,比如FTP、SSH等;通常SSH支持的文本传输协议主要有ASCII、Xmodem、Zmodem等;而rz、sz则是进行Zmodem文件传输的命令行工具。

但是在MAC操作系统中,默认终端无法直接通过Zmodem来上传和下载文件,我们需要使用iTerm,具体操作请查看Mac OS X 使用 sz/rz 命令下载/上传文件配置

如果按照上述文章的指引操作之后还是有问题,请仔细检查文件权限文件路径是否匹配正常。

源代码安装Nodejs

  • Nodejs官网下载你需要的版本的源代码;

  • 本地和服务器进行文件交互,上传Nodejs源代码;

  • 解压下载文件(假设源代码文件为node-v7.9.0.tar.gz):

    tar -xzvf node-v7.9.0.tar.gz

  • 切换工作目录至源代码解压后的目录;

    cd node-v7.9.0

  • 编译码代码;

    make

  • 查看Nodejs版本,确定是否安装成功。

    node -v

  • 安装

    make install

二进制免编译安装Nodejs

因为编译安装会受系统其它因素的影响,比如gcc版本等,实际操作时有很大可能会出现异常,因此可以采用更简单的二进制免编译安装的方式;

  • Nodejs官网下载你需要的版本的编译好的二进制数据包;

  • 本地和服务器进行文件交互,上传编译好的二进制Nodejs数据包;

  • 解压下载文件(假设编译好的二进制数据包文件为node-v7.10.0-linux-x64.tar.xz);

    tar -xvf node-v7.10.0-linux-x64.tar.xz

  • 创建软链使node和npm命令全局有效:

    首先你得用whereis node查询系统之前的Nodejs所在的目录;
    如果查询结果有两个那么你得创建两个软链;
    ln -sf /data/node/node-v7.10.0-linux-x64/bin/node /usr/bin/node
    ln -sf /data/node/node-v7.10.0-linux-x64/bin/node /usr/local/bin/node
    创建的过程中会报错ln: creating symbolic link : File exists;这时你需要先删除以前的node程序:
    rm -rf /usr/bin/node
    rm -rf /usr/local/bin/node
    rm很危险请谨慎操作!

  • 查看Nodejs版本,确定是否安装成功。

    node -v

Nodejs项目部署发布相关

虽然Nodejs是一个开放源代码、跨平台的JavaScript语言运行环境,但并不意味着你在MAC操作系统上运行正常的项目,简单打包上传到其它不同操作系统的机器就可以正常运行。

特别是服务器不能联网的情况下,就不能执行npm install;另外Nodejs中除了有javascript模块,还有一些功能使用javascript可能达不到性能要求 ,这时候就需要c++模块(比如sharp模块)。

这些c++模块的编译安装需要依赖本地系统的环境,导致了上述问题。

面对这种情况,有如下建议:

1、本地使用Docker搭建和内网机器一样的环境,然后在Docker容器中执行npm install安装依赖;

docker安装请自行谷歌,Mac系统使用brew即可。

比如内网机器操作系统为centos;

  • 首先你可以去docker hub找到centos镜像,下载到本地;

    docker pull centos

  • 然后启动centos镜像;

    docker run -i -t centos /bin/bash

  • 使用yum或者其它方式安装必备软件,比如git、vim、node、zip等;

    yum install git

  • 有些软件安装之后可能需要重启容器;

    docker restart container_id

  • 重启之后再次进入容器终端;

    docker attach container_id

  • 通过git把项目拷贝到容器中;

    git clone project_url project_name

  • 安装相关依赖;

    npm install

  • 打包安装依赖之后的项目;

    zip -r project_name.zip priject_path

  • 把打包之后的文件,从容器中拷贝到本地机器;

    docker cp container_id:container_file_path local_file_path

  • 为了避免频繁上传的操作需要先自测完成,这时候需要在Docker容器里边部署web服务,然后本地测试,要想本地访问容器中的web服务需要映射容器的端口为本地端口;

    docker run -idt -p 8080:8888 image-name /bin/bash

  • 当你对该容器做了一些自定义工作后希望保存下来方便下次直接使用,可以使用commit命令;

    docker commit container-id image-name[:version]

  • 最后把本地得到的项目文件上传到服务器,解压即可运行。

2、离线安装或者更新相关类库及其依赖;

上述建议1其实只能解决操作系统之间的环境差异,有可能得到的项目还是不能运行,因为即使操作系统相同,还是有可能存在比如gcc版本不一致导致编译的c++模块运行错误的问题,这时候就需要在没有网络的情况下升级服务器的相关类库(如果这种操作被允许的话…)。

比如内网机器操作系统为centos

  • 在Docker容器中使用yum安装downloadonly插件;

    (RHEL5)
    yum install yum-downloadonly
    (RHEL6)
    yum install yum-plugin-downloadonly

  • 使用downloadonly插件只下载安装某个插件所依赖的所有文件;

    yum install –downloadonly –downloaddir=dir-path package-name

  • 把相关文件统一压缩;

    zip -r rpms.zip rpms_path

  • 把统一压缩的文件从容器中复制到本地机器;

    docker cp container_id:container_file_path local_file_path

  • 把统一压缩的文件从本地上传到内网机器,解压之后采用本地安装的方式安装;

    yum localinstall *

发表评论

电子邮件地址不会被公开。 必填项已用*标注