乐趣区

关于前端:前后端都要懂的-Linux-中间件安装与常用命令指南

大家好啊,最近言哥的新小册——NestJS 我的项目实战上线了,我也在小册群埋伏了一段时间,然而留神到很多前端同学在实战的过程中对配置 Linux 相干环境这件事上,遇到了不同水平的问题,所以我就想着出一篇教程帮忙大家疾速的把握 Linux 上的常用命令,以及相干中间件的装置。

看到这,相熟后端的同学也别急着划走,说不定注释局部就能理解到一些你不晓得的常识呢,尤其是 Mysql 装置、Systemctl 和 ufw 命令。

好了,本文纲要如下:

尽管从实践上来说,我应该先讲命令,后讲具体的中间件环境,然而从我集体的角度来体验,先实际,之后弄懂相干命令的意思就有一种豁然开朗的感觉,所以本文将依照上文的程序进行行文。

大家可能留神到了,上图的命令中并没有根底命令,我认为根底命令扫一眼就行,没必要非凡记忆,我罕用的根底命令如下:

  1. top:查看零碎过程状况。
  2. cd:切换目录。
  3. vim:批改文件。
  4. mkdir:创立文件夹。

或者是我场景无限,本人玩服务器的话根底命令除了这四个以外别的根本没用过,所以我倡议大家也没必要在这方面破费太多工夫,尤其是前端同学。

最初,本文的 Linux 环境版本为:Ubuntn 20 LTS,强烈建议大家应用 Ubuntn(的确比拟好用),并且心愿大家养成点赞后看的好习惯😁😁😁。

注:文本装置中间件都将以官网源进行装置,回绝应用包管理器的源,和官网放弃对立。

Nginx

原来我始终是用源码编译的形式进行装置 Nginx,当初感觉应用包管理器进行装置 + systemctl 治理更不便一些。

进入正题,应用官网源进行装置大抵能够分为四步:

  1. 装置依赖。
  2. 生成 / 导入 key。
  3. 设置 Nginx 源。
  4. 装置。
# 装置依赖
sudo apt install curl gnupg2 ca-certificates lsb-release ubuntu-keyring

# 生成 key
curl https://nginx.org/keys/nginx_signing.key | gpg --dearmor \
    | sudo tee /usr/share/keyrings/nginx-archive-keyring.gpg >/dev/null

# 设置 Nginx 源
echo "deb [signed-by=/usr/share/keyrings/nginx-archive-keyring.gpg] \
http://nginx.org/packages/ubuntu `lsb_release -cs` nginx" \
    | sudo tee /etc/apt/sources.list.d/nginx.list

# 更新 && 装置
sudo apt update
sudo apt install nginx

装置实现后咱们能够应用 systemctl start nginx 命令启动 Nginx,Nginx 一般来说咱们只须要理解两局部就够了:配置文件和常用命令。

Nginx 的配置文件在:/etc/nginx/nginx.cnf,三个常用命令如下:

  1. Nginx -s reload:重载配置文件。
  2. Nginx -s stop:疾速关机。
  3. Nginx -s quit:优雅关机。

最初,能够应用 curl -I 127.0.0.1 测试一下 Nginx 是否失常,看到如下响应的就是 OK:

HTTP/1.1 200 OK
Server: nginx/1.22.0
Date: Sat, 09 Jul 2022 08:25:06 GMT
Content-Type: text/html
Content-Length: 615
Last-Modified: Mon, 23 May 2022 23:59:19 GMT
Connection: keep-alive
ETag: "628c1fd7-267"
Accept-Ranges: bytes

Nginx 装置比较简单,接下来会缓缓简单起来。

Node

Node 装置和其余的有所不同,Node 高版本竟然会和 Linux 版本有些不兼容,以我目前的 Ubuntn 20 LTS 举例,在 20 版本之下的比方 19 / 18 版本是不反对 Node18+ 的,具体的兼容列表能够在其 Github 下面找到:https://github.com/nodesource/distributions/blob/master/README.md。

除去版本问题之外,Node 应用包管理器装置也是非常简单的:

curl -fsSL https://deb.nodesource.com/setup_18.x | sudo -E bash - 
sudo apt-get install -y nodejs

一行命令即可,其中 setup\_18.x 能够替换为 setup\_17.x 或者 setup\_16.x,依据你想要的版本来即可,如果你想要一个每次都装置最新版本的命令则能够将其替换为:setup\_current.x。

接着输出 node -v 来查看装置的版本:

root@hecs-5778:~ node -v
v18.4.0

Node 这种语言环境个别都不须要配置开机自启,间接通过环境变量即可调用,所以这里就不展现配置开机自启的步骤了 \~

JDK / JRE

话说这里为什么呈现 Java?因为如果前端想做一些 CICD 环境的话必不可少的会用到 Jenkins,而 Jenkins 则须要 Java 运行时环境。

JDK / JRE 的装置个别都比较简单,一行命令就能够搞定,不过须要留神的是在当你在 Linux 的包管理器上搜寻 JDK / JRE 时通常会呈现一个 handleless 版本:

root@hecs-5778:~ sudo apt-cache search jdk-17

openjdk-17-jdk - OpenJDK Development Kit (JDK)
openjdk-17-jdk-headless - OpenJDK Development Kit (JDK) (headless)
openjdk-17-jre - OpenJDK Java runtime, using Hotspot JIT
openjdk-17-jre-headless - OpenJDK Java runtime, using Hotspot JIT (headless)
openjdk-17-source - OpenJDK Development Kit (JDK) source files

headless 版本是不反对图形化接口以及人机交互设施 (鼠标、键盘) 的版本,它通常被用于服务器端,所以如果你部署的我的项目就是惯例的 Web 利用那能够间接装置 handless 版本进行应用,它相比标准版引入的依赖更少,占用的资源也更少。

说完了版本,接下来说装置,如果你在 Linux 下面装置软件懒得去搜寻命令能够间接敲击对应的命令,大概率 Linux 的包管理工具会提醒你进行装置:

root@hecs-5778:~ java

Command 'java' not found, but can be installed with:

apt install openjdk-11-jre-headless  # version 11.0.15+10-0ubuntu0.20.04.1, or
apt install default-jre              # version 2:1.11-72
apt install openjdk-16-jre-headless  # version 16.0.1+9-1~20.04
apt install openjdk-17-jre-headless  # version 17.0.3+7-0ubuntu0.20.04.1
apt install openjdk-8-jre-headless   # version 8u312-b07-0ubuntu1~20.04
apt install openjdk-13-jre-headless  # version 13.0.7+5-0ubuntu1~20.04

接下来间接执行:apt install openjdk-17-jre-headless 进行装置。

当然并不倡议所有软件都用这种形式进行装置,因为包管理器给你举荐的并不一定是官网源,除了这种编程语言环境,其余服务端大型软件我更举荐依据其官网文档进行装置,比方在 MongoDB 文档下面就写明了 Ubuntu 自带的源中的 MongoDB 安装包不是官网源安装包。

因为编程语言的相干命令个别都会退出环境变量,所以 JDK / JRE 就没必要配置开机自启之类的货色了,间接应用即可。

Redis

Redis 作为一个老牌缓存中间件,当初越来越多的前端也晓得它了,高性能 + 高可用就是它的劣势 \~

Redis 装置个别是分为两步:更新 Redis 源和 apt 装置,命令如下:

curl -fsSL https://packages.redis.io/gpg | sudo gpg --dearmor -o /usr/share/keyrings/redis-archive-keyring.gpg

echo "deb [signed-by=/usr/share/keyrings/redis-archive-keyring.gpg] https://packages.redis.io/deb $(lsb_release -cs) main" | sudo tee /etc/apt/sources.list.d/redis.list

sudo apt-get update
sudo apt-get install redis

装置之后的有两个文件门路须要晓得:

  1. 启动脚本门路:/usr/bin/redis-server
  2. 配置文件门路:/etc/redis/redis.conf

在正式启动 Redis 之前,咱们个别会去批改一下它的配置文件,因为默认的 Redis 配置是不反对近程拜访和无明码的,所以咱们须要 vim /etc/redis/redis.conf 一下,将如下两个配置进行批改:

bind 0.0.0.0 ::1
requirepass yourpassword

保留之后能够应用:systemctl start redis-server 启动 Redis 服务。

如果须要开机自启动能够通过命令:systemctl enable redis-server 进行设置。

这样 Redis 就能够自启动了,对了,Redis 默认应用 6379 端口 \~

参考文档:https://redis.io/docs/getting-started/installation/install-redis-on-linux/

MongoDB

据说前端选数据库第一抉择就是 MongoDB,MongoDB 相比老牌关系型数据库——MySQL 的确更轻量级,性能方面简略应用还要比 MySQL 强上不少,我一个后端也喜爱上 MongoDB 了当初。

MongoDB 的装置个别分为两步:更新 MongoDB 源和 apt 装置,命令如下:

wget -qO - https://www.mongodb.org/static/pgp/server-5.0.asc | sudo apt-key add -

echo "deb [arch=amd64,arm64] https://repo.mongodb.org/apt/ubuntu focal/mongodb-org/5.0 multiverse" | sudo tee /etc/apt/sources.list.d/mongodb-org-5.0.list

sudo apt-get update
sudo apt-get install -y mongodb-org

MongDB 装置完了之后有几个罕用目录须要晓得:

  1. 配置文件:/etc/mongod.conf。
  2. 数据目录:/var/lib/mongodb。
  3. 日志目录:/var/log/mongodb。

之后咱们还须要批改一下配置文件,因为默认的 MongoDB 不反对近程拜访,应用 vim 关上配置文件之后,批改 bind 属性即可:

net:
  port: 27017
  bindIp: 0.0.0.0

批改实现之后就能够启动 MongoDB 了,应用 sudo systemctl start mongod 进行启动,如果提醒你 Failed to start mongod.service: Unit mongod.service not found. 能够先应用 sudo systemctl daemon-reload 而后再次运行下面的启动命令即可。

如果须要开机自启动能够通过命令:systemctl enable mongod 进行设置。

这样 MongoDB 就能够自启动了,MongoDB 默认应用 27017 端口 \~

对了数据库这种玩意我强烈不倡议应用 Docker,一是麻烦二是没必要,吃力不讨好。

参考文档:https://www.mongodb.com/docs/manual/tutorial/install-mongodb-on-ubuntu/

MySQL

MySQL 装置比较复杂,除了配置文件外还要解决 ROOT 权限。

MySQL 的装置个别也是两种办法:

  1. 通过应用 MySQL apt 存储库装置(留神:这不是设置官网源的形式)。
  2. 通过 Linux apt 包管理器装置。

因为官网文档中对这两种计划都做了介绍,这代表着这两种计划都能够进行装置,那么咱们间接通过 Ubuntu 自带的 apt 包管理器会十分的不便:

sudo apt-get install mysql-server

留神,这条命令会帮你装置最新的 MySQL,在当初这个工夫点装置的是 MySQL8,我也强烈建议不要再应用 8 以下的版本了,MySQL 8 带来的性能晋升真的十分微小。

这里须要额定提到一件事,就是 MySQL 的数据目录初始化,如果咱们是应用安装程序和包管理器进行装置,个别都会主动进行数据目录初始化,如果非这种形式则须要手动进行数据目录初始化,否则将无奈启动 MySQL。

因为咱们是应用 apt 形式进行装置,所以无需关怀数据目录初始化的事儿,然而仍有一些货色须要咱们关注:

默认目录

  1. 数据目录:/var/lib/mysql。
  2. 日志目录:/var/log/mysql。
  3. 配置文件目录:/etc/mysql/mysql.conf.d。

近程拜访

近程拜访须要批改两处:配置文件和用户权限,配置文件个别在应用如下命令进行批改:

vim /etc/mysql/mysql.conf.d/mysqld.cnf

bind-address = 0.0.0.0

MySQL 的默认配置文件个别在 /etc/mysql/mysql.conf.d/mysqld.cnf,批改用户权限则是须要登陆 MySQL 中去批改数据库:

mysql -u root -p

use mysql;

update user set host='%' where user='root';

flush privileges;

ROOT 明码

MySQL 的初始化明码依据装置形式不同默认明码也不同,个别有三种形式:

  1. 装置过程中提醒你设置。
  2. 空。
  3. 随机明码。

如果你曾经配置了明码能够跳过此节,上面着重说一下没有配置明码的状况,当你没有配置明码时能够应用应用 mysql -u root -p 用空明码进行登录验证,如果空不是你的初始化明码,那就须要在 MySQL 的谬误日志外面找到你的初始化随机明码,谬误日志文件地址个别是:/var/log/mysql/error.log,之后从新应用 mysql -u root -p 进行登录验证。

登录之后应用如下命令查看你的 root 用户验证形式:

use mysql;

select user, host, authentication_string, plugin from user where user = 'root'

成果个别是这样的:

+------+------+-----------------------+-------------+
| user | host | authentication_string | plugin      |
+------+------+-----------------------+-------------+
| root | %    |                       | auth_socket |
+------+------+-----------------------+-------------+
1 row in set (0.00 sec)

Host 的 % 代表反对近程拜访,接下来须要将明码批改为咱们的自定义明码,这个时候要留神打印中的 plugin 是什么,如果是 auth\_socket 形式则代表它应用 Unix 套接字进行无明码验证,须要将其替换掉,不然无奈应用明码进行验证。

接下来就能够间接应用一行命令进行明码批改了:

ALTER USER 'root'@'%' IDENTIFIED with caching_sha2_password BY 'your_password';

因为 MySQL 8.0 之后默认应用 caching\_sha2\_password 形式进行明码验证,所以我这里也和官网保持一致。

最初再应用一行命令将 MySQL 退出开机自启列表,MySQL 默认应用 3306 端口:

systemctl enable mysql

参考文档:https://dev.mysql.com/doc/mysql-apt-repo-quick-guide/en/

Apt

理解 apt 之前须要先晓得 Ubuntu 零碎的包管理工具是什么,Ubuntu 零碎作为 Debian 系的发行版,它和 Debian 用了同样的包管理工具:dpkg,而 apt 则是 dpkg 的命令行前端,它的作用是用来操作 dbkg 包管理器,在 Debian 系中除了 apt 这个命令行前端还有一个叫做 apt-get 的命令行前端,它比 apt 更加的古老。

apt-get 在 1998 年公布,起初逐步被 apt 取代,apt 在 Debian8 外面成为规范,在 Ubuntu16 之后开始逐步风行,目前大量开源我的项目的装置示例都是以 apt 为命令行前端。

Apt 要比 apt-get 略微多一些性能,然而总体性能上是差不多的,次要的亮点在于:

  1. 有进度条。
  2. 某些命令显示包的时候带有色彩。
  3. 命令更短。

命令更短这点是我最喜爱的,接下来看一下几个常用命令,命令这方面我不再比照 apt-get,只有记忆 apt 相干命令即可:

  1. Apt search:用来搜寻某个包,如:apt search jdk。
  2. Apt install:用来装置某个包,如:apt install nginx。
  3. Apt remove:用来删除某个包,如 apt remove nginx。
  4. Apt purge:用来删除某个包并革除配置,如 apt purge nginx。
  5. Apt show:用来显示某个包的具体信息,如 apt show nginx。
  6. Apt list –installed:列出所有曾经装置的包。
  7. Apt autoremove:删除不再应用的库文件和依赖。

简略记忆以上几个命令,个别就够应用了 \~

Systemctl

Systemctl 是零碎服务治理命令,在旧一点的 Linux 发行版上服务治理个别是 service 命令,而较新的零碎上则根本都是 Systemctl,Systemctl 兼容了 service 命令并具备更弱小的性能。

不过对于 Systemctl 我感觉咱们个别开发者无需理解太多,因为和 Systemctl 配套的都是 Linux 服务相干的常识了,咱们只须要理解五个常用命令会用即可:

  1. systemctl enable 服务名:用来设置服务的开机自启,这个大赞,因为更语义化同时命令也更短。
  2. systemctl disable 服务名:用来敞开服务的开机自启。
  3. systemctl start 服务名:启动服务。
  4. systemctl stop 服务名:敞开服务。
  5. systemctl restart 服务名:重启服务。
  6. systemctl status 服务名:查看服务的状态。

在上文中,咱们见到了好几次 systemctl 命令呈现,当初大家能够再通过这几个命令试试服务开启 / 敞开的成果,加深记忆。

ufw

UFW 是 Uncomplicated FireWall 的简称,通过这个名字大家也能够看进去这是一个防火墙命令,大家在网上搜寻放开某端口的时候个别都是呈现的 iptables 命令,而 UFW 就是为了代替它而生,目前曾经成为 Debian 系的默认防火墙治理命令。

UFW 这种新生代命令最大的益处就是易用易上手,尤其是对咱们这种非专业运维来说,记住几个常用命令就足够咱们应用了。

UFW 默认在 Ubutun 是敞开状态,你能够通过如下命令查看状态,incative 是敞开而 active 则是开启(因为 UFW 这个命令个别都是在管理员权限下能力应用,所以下文我将疏忽 sudo 前缀):

root@hecs-5778:~ ufw status verbose
Status: inactive

接下来能够通过 enable 命令进行开启:

root@hecs-5778:~ ufw enable
Command may disrupt existing ssh connections. Proceed with operation (y|n)? y
Firewall is active and enabled on system startup

UFW 第一次开启之后会间接敞开所有端口,这样你下次就不能通过 SSH 连上云服务器了,所以开启之后你必须立刻放开 SSH 端口:

root@hecs-5778:~ ufw allow ssh
Rule added
Rule added (v6)

ufw allwo 这个命令是专为关上端口应用的,其中内置了一些服务到端口的映射,比方下面的 ufw allow ssh 其实就是对应了 ssh 对应了 22 端口,还有一些罕用的例如 http 对应 80,https 对应 443,具体的规定文件在 /etc/services 文件下。

如果有些端口没有在预设文件中,你间接增加也可,比方咱们放开 Redis 的默认端口 6379:

root@hecs-5778:~ ufw allow 6379
Rule added
Rule added (v6)

最初,如果咱们的服务器是本人玩的状况下,我不倡议关上防火墙,因为比拟麻烦,你能够应用 disable 命令进行敞开:

root@hecs-5778:~ ufw disable
Firewall stopped and disabled on system startup

写在最初

写在最初,讲真,本文的局部内容还是十分具体实用的,比方 MySQL -ROOT 明码那里,我写的时候也看了网上大量相干的文章,然而根本都说不到点上,尤其是用最新的加密形式的文章则是一个也没见到,置信大家看完本文之后应该会对这些货色了然于胸。

Linux 是个宏大的操作系统,外面轻易一点拎进去都能写一本书了,所以心愿大家在后期还是以实用为目标进行学习,不要局限在细节里。

好了,不晓得大家看完本文之后有没有什么播种,心愿大家多为本文点赞,让更多的读者看到好的内容。

退出移动版