Skip to content

Instantly share code, notes, and snippets.

@sawyerbutton
Created May 29, 2023 11:33
Show Gist options
  • Select an option

  • Save sawyerbutton/2328d829cb5d56d0b3f2d017f869d747 to your computer and use it in GitHub Desktop.

Select an option

Save sawyerbutton/2328d829cb5d56d0b3f2d017f869d747 to your computer and use it in GitHub Desktop.

Clean version of https://juejin.cn/post/7118919471317647397

大纲及背景知识

  1. Linux 中间件
    1. Nginx
    2. JRE/JDK
    3. Node
    4. MySQL
    5. MongoDB
    6. Redis
  2. Linux 常用命令
    1. Apt
    2. Systemctl
    3. Ufw

基础命令

  1. top:查看系统进程情况
  2. cd:切换目录
  3. vim:修改文件
  4. mkdir:创建文件夹

推荐系统

Linux 环境版本为:Ubuntu 20 LTS,强烈建议大家使用 Ubuntu

Linux 中间件

Nginx

安装步骤:

  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 的配置文件在:/etc/nginx/nginx.cnf
  • 常用命令:
  1. Nginx -s reload:重载配置文件
  2. Nginx -s stop:快速关机
  3. Nginx -s quit:优雅关机
  • 使用curl -I 127.0.0.1 测试Nginx 是否正常启动运行
  • 看到如下输出则为正常
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

Node

  • Node 安装存在可能issue
  • Node 高版本和 Linux 版本不兼容,以我
  • Ubuntu 20 版本之下的比如 19 / 18 版本是不支持 Node18+ 的
  • find 兼容列表

通过包管理器安装

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

使用如下命令检测是否安装成功 基于你的版本号来判断

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

JDK / JRE

搭建CICD环境需要使用 Jenkins Jenkins 需要使用Java运行环境

注意:当你在 Linux 的包管理器上搜索 JDK / JRE 时通常会出现一个 handleless 版本

  • headless 版本是不支持图形化接口以及人机交互设备 (鼠标、键盘) 的版本
  • headless 版本通常被用于服务器端,所以如果部署的项目就是常规的 Web 应用那可以直接安装 handless 版本进行使用
  • 相比标准版引入的依赖更少,占用的资源也更少
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
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 进行安装

Redis

  • Redis 作为一个老牌缓存中间件,高性能 + 高可用就是它的优势
  • Redis 安装一般是分为两步:
  1. 更新 Redis 源
  2. 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 默认使用 6379 端口

MySQL

MySQL 安装比较复杂,除了配置文件外还要处理 ROOT 权限

MySQL 的安装一般也是两种方法:

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

  2. 通过 Linux apt 包管理器安装

  3. 直接通过 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

远程访问

远程访问需要修改两处:

  1. 配置文件
  2. 用户权限
  3. 配置文件使用如下命令进行修改
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. 随机密码

如果你已经配置了密码可以跳过此节,下面着重说一下没有配置密码的情况,

  • 当你没有配置密码时可以使用使用 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

MongoDB

MongoDB 相比老牌关系型数据库MySQL 确实更轻量级, 性能方面比 MySQL 强上不少 同时也更加简单

MongoDB 的安装一般分为两步:

  1. 更新 MongoDB 源
  2. 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

MongoDB 常用目录

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

默认的 MongoDB 不支持远程访问, 需要修改配置文件

net:
  port: 27017
  bindIp: 0.0.0.0
  • 暴露端口 27017
  • 支持远程访问

使用 sudo systemctl start mongod 进行启动

  • 如果提示你 Failed to start mongod.service: Unit mongod.service not found. 
  • 可以先使用 sudo systemctl daemon-reload 然后再次运行上面的启动命令即可

开机自启动可以通过命令:systemctl enable mongod 进行设置

Linux 命令

Apt

  • Ubuntu 系统作为 Debian 系的发行版,它和 Debian 用了同样的包管理工具:dpkg
  • apt 则是 dpkg 的命令行前端,它的作用是用来操作 dbkg 包管理器
  • Debian 系中除了 apt 这个命令行前端还有一个叫做apt-get 的命令行前端,它比 apt 更加的古老
  • apt-get 在 1998 年发布,后来逐渐被 apt 取代
  • aptDebian8 里面成为标准,在 Ubuntu16 之后开始逐渐流行,目前大量开源项目的安装示例都是以 apt 为命令行前端

Aptapt-get多一些功能,主要的亮点在于:

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

常用命令:

  • 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 命令
  • 而较新的系统上则基本都是 SystemctlSystemctl 兼容了 service 命令并具有更强大的功能

Systemctl 常用命令:

  • systemctl enable 服务名:用来设置服务的开机自启,这个大赞,因为更语义化同时命令也更短
  • systemctl disable 服务名:用来关闭服务的开机自启
  • systemctl start 服务名:启动服务
  • systemctl stop 服务名:关闭服务
  • systemctl restart 服务名:重启服务
  • systemctl status 服务名:查看服务的状态

ufw

  • UFWUncomplicated FireWall的简称
  • 目前已经成为 Debian 系的默认防火墙管理命令
  • UFW 默认在 Ubutun 是关闭状态,
  • 你可以通过如下命令查看状态,incative 是关闭而 active 则是开启
  • 注意以下命令都需要使用管理员权限也就是 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 allow 这个命令是专为打开端口使用的
  • 其中内置了一些服务到端口的映射,比如上面的 ufw allow ssh 其实就是对应了 ssh 对应了 22端口,
  • 还有一些常用的例如 http 对应 80,https 对应 443,具体的规则文件在 /etc/services 文件下

也可以指定开放的端口

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

如果你不想启动 UFW,则可以使用如下命令关闭

root@hecs-5778:~ ufw disable
Firewall stopped and disabled on system startup
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment