Linux 中间件安装与常用命令指南

本文涉及的产品
服务治理 MSE Sentinel/OpenSergo,Agent数量 不受限
云原生网关 MSE Higress,422元/月
Serverless 应用引擎免费试用套餐包,4320000 CU,有效期3个月
简介: 本文的部分内容还是非常详细实用的,比如 MySQL -ROOT密码那里,我写的时候也看了网上大量相关的文章,但是基本都说不到点上,尤其是用最新的加密方式的文章则是一个也没见到,相信大家看完本文之后应该会对这些东西了然于胸。Linux 是个庞大的操作系统,里面随便一点拎出来都能写一本书了,所以希望大家在前期还是以实用为目的进行学习,不要局限在细节里。

虽然从理论上来说,我应该先讲命令,后讲具体的中间件环境,但是从我个人的角度来体验,先实践,之后弄懂相关命令的意思就有一种恍然大悟的感觉,所以本文将按照上文的顺序进行行文。
大家可能注意到了,上图的命令中并没有基础命令,我认为基础命令扫一眼就行,没必要特殊记忆,我常用的基础命令如下:

top:查看系统进程情况。

cd:切换目录。

vim:修改文件。

mkdir:创建文件夹。

或许是我场景有限,自己玩服务器的话基础命令除了这四个以外别的基本没用过,所以我建议大家也没必要在这方面花费太多时间,尤其是前端同学。
最后,本文的 Linux 环境版本为:Ubuntn 20 LTS,强烈建议大家使用 Ubuntn(确实比较好用),并且希望大家养成点赞后看的好习惯😁😁😁。
注:文本安装中间件都将以官方源进行安装,拒绝使用包管理器的源,和官方保持统一。
Nginx
原来我一直是用源码编译的方式进行安装 Nginx,现在觉得使用包管理器进行安装 + systemctl 管理更方便一些。
进入正题,使用官方源进行安装大致可以分为四步:

安装依赖。

生成 / 导入 key。

设置 Nginx 源。

安装。

安装依赖

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,三个常用命令如下:

Nginx -s reload:重载配置文件。

Nginx -s stop:快速关机。

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 上面找到:github.com/nodesource/…
除去版本问题之外,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
复制代码
安装之后的有两个文件路径需要知道:

启动脚本路径:/usr/bin/redis-server。

配置文件路径:/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 端口~
参考文档:redis.io/docs/gettin…
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 安装完了之后有几个常用目录需要知道:

配置文件:/etc/mongod.conf。

数据目录:/var/lib/mongodb。

日志目录:/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,一是麻烦二是没必要,吃力不讨好。
参考文档:www.mongodb.com/docs/manual…
MySQL
MySQL 安装比较复杂,除了配置文件外还要处理 ROOT 权限。
MySQL 的安装一般也是两种方法:

通过使用 MySQL apt 存储库安装(注意:这不是设置官方源的方式)。

通过 Linux apt 包管理器安装。

由于官网文档中对这两种方案都做了介绍,这代表着这两种方案都可以进行安装,那么我们直接通过 Ubuntu 自带的 apt 包管理器会非常的方便:
sudo apt-get install mysql-server
复制代码
注意,这条命令会帮你安装最新的 MySQL,在现在这个时间点安装的是 MySQL8,我也强烈建议不要再使用 8 以下的版本了,MySQL 8 带来的性能提升真的非常巨大。
这里需要额外提到一件事,就是 MySQL 的数据目录初始化,如果我们是使用安装程序和包管理器进行安装,一般都会自动进行数据目录初始化,如果非这种方式则需要手动进行数据目录初始化,否则将无法启动 MySQL。
由于我们是使用 apt 方式进行安装,所以无需关心数据目录初始化的事儿,但是仍有一些东西需要我们关注:
默认目录

数据目录:/var/lib/mysql。

日志目录:/var/log/mysql。

配置文件目录:/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 的初始化密码根据安装方式不同默认密码也不同,一般有三种方式:

安装过程中提示你设置。

空。

随机密码。

如果你已经配置了密码可以跳过此节,下面着重说一下没有配置密码的情况,当你没有配置密码时可以使用使用 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
复制代码
参考文档:dev.mysql.com/doc/mysql-a…
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 稍微多一些功能,但是总体功能上是差不多的,主要的亮点在于:

有进度条。

某些命令显示包的时候带有颜色。

命令更短。

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

Apt search:用来搜索某个包,如:apt search jdk。

Apt install:用来安装某个包,如:apt install nginx。

Apt remove:用来删除某个包,如 apt remove nginx。

Apt purge:用来删除某个包并清除配置,如 apt purge nginx。

Apt show:用来显示某个包的具体信息,如 apt show nginx。

Apt list --installed:列出所有已经安装的包。

Apt autoremove:删除不再使用的库文件和依赖。

简单记忆以上几个命令,一般就够使用了~
Systemctl
Systemctl 是系统服务管理命令,在旧一点的 Linux 发行版上服务管理一般是 service 命令,而较新的系统上则基本都是 Systemctl,Systemctl 兼容了 service 命令并具有更强大的功能。
不过对于 Systemctl 我觉得我们一般开发者无需了解太多,因为和 Systemctl 配套的都是 Linux 服务相关的知识了,我们只需要了解五个常用命令会用即可:

systemctl enable 服务名:用来设置服务的开机自启,这个大赞,因为更语义化同时命令也更短。

systemctl disable 服务名:用来关闭服务的开机自启。

systemctl start 服务名:启动服务。

systemctl stop 服务名:关闭服务。

systemctl restart 服务名:重启服务。

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 是个庞大的操作系统,里面随便一点拎出来都能写一本书了,所以希望大家在前期还是以实用为目的进行学习,不要局限在细节里。

相关实践学习
基于Redis实现在线游戏积分排行榜
本场景将介绍如何基于Redis数据库实现在线游戏中的游戏玩家积分排行榜功能。
云数据库 Redis 版使用教程
云数据库Redis版是兼容Redis协议标准的、提供持久化的内存数据库服务,基于高可靠双机热备架构及可无缝扩展的集群架构,满足高读写性能场景及容量需弹性变配的业务需求。 产品详情:https://www.aliyun.com/product/kvstore     ------------------------------------------------------------------------- 阿里云数据库体验:数据库上云实战 开发者云会免费提供一台带自建MySQL的源数据库 ECS 实例和一台目标数据库 RDS实例。跟着指引,您可以一步步实现将ECS自建数据库迁移到目标数据库RDS。 点击下方链接,领取免费ECS&RDS资源,30分钟完成数据库上云实战!https://developer.aliyun.com/adc/scenario/51eefbd1894e42f6bb9acacadd3f9121?spm=a2c6h.13788135.J_3257954370.9.4ba85f24utseFl
相关文章
|
7天前
|
Linux
在 Linux 系统中,“cd”命令用于切换当前工作目录
在 Linux 系统中,“cd”命令用于切换当前工作目录。本文详细介绍了“cd”命令的基本用法和常见技巧,包括使用“.”、“..”、“~”、绝对路径和相对路径,以及快速切换到上一次工作目录等。此外,还探讨了高级技巧,如使用通配符、结合其他命令、在脚本中使用,以及实际应用案例,帮助读者提高工作效率。
31 3
|
7天前
|
监控 安全 Linux
在 Linux 系统中,网络管理是重要任务。本文介绍了常用的网络命令及其适用场景
在 Linux 系统中,网络管理是重要任务。本文介绍了常用的网络命令及其适用场景,包括 ping(测试连通性)、traceroute(跟踪路由路径)、netstat(显示网络连接信息)、nmap(网络扫描)、ifconfig 和 ip(网络接口配置)。掌握这些命令有助于高效诊断和解决网络问题,保障网络稳定运行。
25 2
|
7天前
|
安全 网络协议 Linux
本文详细介绍了 Linux 系统中 ping 命令的使用方法和技巧,涵盖基本用法、高级用法、实际应用案例及注意事项。
本文详细介绍了 Linux 系统中 ping 命令的使用方法和技巧,涵盖基本用法、高级用法、实际应用案例及注意事项。通过掌握 ping 命令,读者可以轻松测试网络连通性、诊断网络问题并提升网络管理能力。
26 3
|
10天前
|
Linux
在 Linux 系统中,`find` 命令是一个强大的文件查找工具
在 Linux 系统中,`find` 命令是一个强大的文件查找工具。本文详细介绍了 `find` 命令的基本语法、常用选项和具体应用示例,帮助用户快速掌握如何根据文件名、类型、大小、修改时间等条件查找文件,并展示了如何结合逻辑运算符、正则表达式和排除特定目录等高级用法。
36 6
|
11天前
|
监控 Linux 开发者
如何在 Linux 中优雅的使用 head 命令,用来看日志简直溜的不行
`head` 命令是 Linux 系统中一个非常实用的工具,用于快速查看文件的开头部分内容。本文介绍了 `head` 命令的基本用法、高级用法、实际应用案例及注意事项,帮助用户高效处理文件和日志,提升工作效率。
22 7
|
13天前
|
监控 Linux
Linux常用命令-2
本文继续介绍Linux常用命令,涵盖目录操作、文件操作、系统信息和进程管理等类别。具体包括mkdir、rmdir、cp、mv、rm、touch、whereis、whatis、dmesg、free、date、cal、ps、kill、killall和top等命令的使用方法和常用参数。
43 7
|
11天前
|
存储 安全 数据管理
如何在 Rocky Linux 8 上安装和配置 Elasticsearch
本文详细介绍了在 Rocky Linux 8 上安装和配置 Elasticsearch 的步骤,包括添加仓库、安装 Elasticsearch、配置文件修改、设置内存和文件描述符、启动和验证 Elasticsearch,以及常见问题的解决方法。通过这些步骤,你可以快速搭建起这个强大的分布式搜索和分析引擎。
29 5
|
11天前
|
监控 Linux Perl
Linux 命令小技巧:显示文件指定行的内容
在 Linux 系统中,处理文本文件是一项常见任务。本文介绍了如何使用 head、tail、sed 和 awk 等命令快速显示文件中的指定行内容,帮助你高效处理文本文件。通过实际应用场景和案例分析,展示了这些命令在代码审查、日志分析和文本处理中的具体用途。同时,还提供了注意事项和技巧,帮助你更好地掌握这些命令。
26 4
|
10天前
|
缓存 网络协议 Linux
Linux ip命令常用操作
Linux的 `ip`命令是一个强大且灵活的网络管理工具,能够执行从基本的网络接口配置到高级的路由和VLAN管理等多种操作。通过熟练掌握这些常用操作,用户可以更加高效地管理和配置Linux系统的网络环境。无论是在日常管理还是故障排除中,`ip`命令都是必不可少的工具。
12 2
|
11天前
|
缓存 运维 监控
【运维必备知识】Linux系统平均负载与top、uptime命令详解
系统平均负载是衡量Linux服务器性能的关键指标之一。通过使用 `top`和 `uptime`命令,可以实时监控系统的负载情况,帮助运维人员及时发现并解决潜在问题。理解这些工具的输出和意义是确保系统稳定运行的基础。希望本文对Linux系统平均负载及相关命令的详细解析能帮助您更好地进行系统运维和性能优化。
32 3