水牛下水系列(0)- linux 基础及其服务器nginx静态资源部署

linux
最近在公司本地的服务器用nginx部署了一个单页面的应用程序,做之前想想感觉过程挺简单的,无非就是打包静态资源,修改server的nginx配置然后就可以访问了,后来发现需要安装node环境,一方面需要安装前端工程的依赖包,另一方面需要使用nodejs起一个express的server…一般三折之后还是打算记录一下….

链接远程服务器

这个没啥可说的,一般都是使用xshell连接服务器,然后使用xftp将打包好的前端静态资源传输上去部署,在这分享一个工具—finalShell,这个工具是一个集成xshell和xftp的工具,还可以通过mstsc链接远程桌面。

linux基础

一般来说著名的linux操作系统基本上分为两大类:
1)RedHat系列:RedHat\Centos\Fedora等

- 常见的安装包格式 rpm包,安装rpm包的命令是“rpm -参数”
- 包管理工具 yum,yum可以用于运作rpm包
- 支持tar包

yum: 是redhat, centos 系统下的软件安装方式,基于Linux,

全称为 Yellow dog Updater, Modified,

是一个在Fedora和RedHat以及CentOS中的Shell前端软件包管理器

基于RPM包管理,能够从指定的服务器自动下载RPM包并且安装,可以自动处理依赖性关系,并且一次安装所有依赖的软件包。
1
2
3
安装:yum install
卸载:yum remove
更新:yum update

可以配置-y参数 yum install nginx -y 标识默认命令行交互的时候都是以yes

2)Debian系列:Debian\Ubantu等

- 常见的安装包格式 deb包,安装deb包的命令是“dpkg -参数”
- 包管理工具 apt-get,可以用于运作deb包
- 支持tar包

ap-get是ubuntu下的一个软件安装方式,它是基于debain。

1
2
3
安装:apt-get install
卸载:apt-get remove
更新:apt-get update

可以配置-y参数 apt-get install nginx -y 标识默认命令行交互的时候都是以yes

Linux 命令行下载文件,马上就能想到两个工具:wget 和 cURL

curl和wget的区别和使用

curl和wget基础功能有诸多重叠,如下载等。
非要说区别的话:

  • curl由于可自定义各种请求参数所以在模拟web请求方面更擅长;
  • wget由于支持ftp和Recursive所以在下载文件方面更擅长。
    类比的话curl是一个精简的命令行网页浏览器,而wget是迅雷9

wget

不是安装方式,它是一种下载工具,类似于迅雷。通过HTTP、HTTPS、FTP三个最常见的TCP/IP协议下载,并可以使用HTTP代理,名字是World Wide Web”与“get”的结合,如果要下载一个软件,可以直接运行:

1
wget 下载地址
  • 安装wget
1
2
3
sudo apt-get update / yum update
sudo apt-get install wget / yum install wget
wget --version

curl

curl的用法具体可以参考阮老师的教程,这里就不重复赘述了…
curl 的用法指南

linux常用shell操作

  • 1) >>>

    linux中>表示覆盖原文件内容,>>表示追加内容

  • 2)cat

1
2
3
4
5
-n 或 --number:由 1 开始对所有输出的行数编号。
// cat -n linuxfile1 > linuxfile2 把 linuxfile1 的档案内容加上行号后输入 linuxfile2 这个档案里
-b 或 --number-nonblank:和 -n 相似,只不过对于空白行不编号。
//cat -b linuxfile1 linuxfile2 >> linuxfile3 把 linuxfile1 和 linuxfile2 的档案内容加上行号(空白行不加)之后将内容附加到linuxfile3 里。
-s 或 --squeeze-blank:当遇到有连续两行以上的空白行,就代换为一行的空白行。

查看已经存在的文件
cat filename

新建文件 (只能创建新文件,不能编辑已有文件.)
cat > filename

合并副本(拷贝)
cat sourcefile > distfile

将几个文件合并为一个文件。
cat file1 file2 > file // file1 和file2都写入到file中

在linux shell脚本中我们经常见到类似于cat << EOF的语句,EOF是文件的结束符-EOF是“end of file”,表示文本结束符,EOF只是一个标识符。可以换成别的标识。

1
2
3
4
// 将EOF之间输入的内容写入到filename中
cat > filename <<EOF
(内容)
EOF

1
2
3
4
// 将EOF之间输入的内容"追加写入"到filename中
cat >> filename <<EOF
(内容)
EOF
  • 3)echo

    在控制台输出文本
    echo xxxxx // 打印xxxxx

显示结果定向至文件
echo xxxxx > filename // xxxxx写入到filename中

  • 4)touch

    touch命令用于创建不包含任何内容的文件
    touch xxxx

  • 5)mv

    mv命令将文件或目录从一个位置移动到另一个位置
    mv sourcefile1 sourfile2 /etc/app

重命名
mv sourcefile1 sourcefile2

  • 6)pwd

    命令用于打印当前工作目录

查看操作系统(uname -a)

1
2
uname -a // 可以查看操作系统  
Linux master 3.10.0-862.el7.x86_64 #1 SMP Fri Apr 20 16:44:24 UTC 2018 x86_64 x86_64 x86_64 GNU/Linux

查看版本(cat /etc/redhat-release)

1
CentOS Linux release 8.0.1905 (Core)

所以根据上面的信息可以购买的华为云是Linux 64位的Centos 6.8版本

安装nodejs

要安装nodejs,最通俗的做法无非是查看远程服务器的操作系统和版本,然后从nodejs官网下载,然后通过解压工具解压文件

使用上面说的wget/curl/手动官方下载

1
2
3
4
// 使用curl下载
curl -O http://cdn.npm.taobao.org/dist/node/v8.12.2/node-v8.12.2-linux-x64.tar.gz
// 使用wget下载
wget http://cdn.npm.taobao.org/dist/node/v8.12.2/node-v8.12.2-linux-x64.tar.gz

wget下载

解压gz文件- tar命令是类Linux中比较 常用的解压与压缩命令。

1
2
3
4
5
6
// 基本用法
tar -xzvf filename.tar.gz
// 解压文件并拷贝到指定目录
tar -xzvf filename.tar.gz -C destPath
// --strip-components 1 去掉第一层文件夹
tar --strip-components 1 -xzvf file.tar.gz -C /opt/webs/folder/

当然也有uzip等方式可以解压zip后缀的压缩文件…以上就是将file.tar.gz文件解压到/opt/webs/folder/文件夹下

另外补充一句如果下载的文件需要–重命名/移动/复制的话可以使用

1
2
3
移动文件:mv 文件名 移动目的地文件名 
重命名文件:mv 文件名 修改后的文件名
复制文件:cp 文件名路径 目标路径

nginx基本操作

1
2
3
nginx -s reload // 重启
nginx start // 启动
nginx stop //关闭

后台进程相关

1
2
netstat -apn | grep 3000 // 查看3000端口启动的进程  一般可以看见进程id和进程类型 如:  11321/nginx,11321就是进程id,nginx就是进程类型
kill -9 进程id // 关闭后台进程
  • PS是LINUX下最常用的也是非常强大的进程查看命令
    ps命令将某个进程显示出来,grep全称是Global Regular Expression Print,表示全局正则表达式版本,它的使用权限是所有用户。
    grep命令是查找,是一种强大的文本搜索工具,它能使用正则表达式搜索文本,并把匹配的行打印出来。
    中间的|是管道命令 是指ps命令与grep同时执行
1
ps -ef | grep 3000
UID PID PPID C STIME TTY TIME CMD
root 27391 2049 0 17:42 pts/0 00:00:00 grep 8089
  • 具体含义如下:

UID:程序被该 UID 所拥有

PID:就是这个程序的 ID

PPID:则是其上级父程序的ID

C :CPU使用的资源百分比

STIME :系统启动时间

TTY :登入者的终端机位置

TIME:使用掉的CPU时间。

CMD:所下达的是什么指令

nohup做后台进程

之前一直用pm2做进程守护,一般都是在线上环境,这次用nphup…

1
2
// 使用nohup在指定的host和port启动并记录进程id在pidfile,记录日志到mockserver的log文件
nohup json-server --host 172.21.24.22 --port 8088 ./db.json --routes ./router.json > mockSever.log & echo $! > pidfile.txt

这样杀死进程的时候就可以通过

1
kill -9 `cat pidfile.txt`

pid

通过公网IP访问

华为云服务上部署程序,部署成功之后,发现它的公网IP不能被外网访问,一直以为只能通过域名访问,但是域名也是通过DNS域名解析之后获取真实的公网ip地址啊,不应该啊,怀着这个疑问查了一下….

原来云服务器需要添加一些配置,才可以通过公网ip访问部署的应用:

  • 云服务器要添加安全协议
  • 服务器要添加入站规则

我个人的理解就是需要开放云服务器各个端口的使用权限。配置一下哪些ip地址来请求可以访问我的云服务器,然后对它开发那些端口…类似这样的规则
clound

如上图所示就是就是协议/应用选择TCP,输入你开放的端口号82,源地址选择IP地址,四个零,点击确定;为什么源地址选择IP地址,四个零,因为开放全部用户访问,然后就可以通过外网ip进行访问了…..

参考链接

在华为云服务器部署程序不能被外网访问的问题

初到贵宝地,有钱的给个钱场,没钱的挤一挤给个钱场