前言
当我们新建一台虚拟机(或新购买一台云服务器),我们应该做的一些基础设置,或者需要安装的一些软件。这篇博客我们来介绍一下这些设置。
基础设置
1. 设置虚拟机名称
1 | 查看当前虚拟机名称 |
2. 设置静态IP和DNS
- 注:根据需求设置,一般云服务器ip已经固定,可以不用设置静态ip;DNS根据是否要有vpn设置,但是“8.8.8.8”和“114.114.114.114”的设置可以满足大部分场景
(1) 运行命令查看当前ip及网关
1 | # 查看ip |
(2) 根据查看到的网卡名称打开对应的配置文件,配置ip、网关、dns等参数
1 | sudo vi /etc/sysconfig/network-scripts/ifcfg-eth0 |
1 | TYPE="Ethernet" |
(3) 保存配置文件后,需要重启网络服务以应用更改
1 | # centos7 |
3. 设置虚拟机hosts
我们为虚拟机设置了名称和静态IP后,就可以使用虚拟机名称来代替虚拟机ip访问该虚拟机,但是我们需要在hosts文件中添加名称和ip的对应关系
1 | # 进入hosts文件 |
4. selinux设置(linux安装模块)
改变设置后需重启虚拟机设置才能生效
1 | vim /etc/selinux/config |
1 | # 修改SELINUX字段 |
1 | 验证 |
5. 防火墙设置
- 方案1:关闭防火墙【不推荐】
1 | #关闭防火墙 |
- 方案2:将我们需要的端口开放
1 | # 查看防火墙状态 |
- 注意:如果你使用的是云服务器,还要到对应页面添加规则,将对应端口在云服务器上开放
6. 将ipv4流量转发到iptables
(1)加载’br_netfilter‘模块,该模块用于桥接网络的NetFilter模块(因为加载’br_netfilter‘模块需要在sysctl服务之前运行,所以使用systemd
服务)
创建一个systemd服务文件
1 | sudo vi /etc/systemd/system/load-br-netfilter.service |
添加以下内容
1 | [Unit] |
启用并启动服务
1 | sudo systemctl enable load-br-netfilter.service |
(2)添加参数
编辑文件’/etc/sysctl.d/k8s.conf’ (vi /etc/sysctl.d/k8s.conf),在其中添加参数
1 | net.bridge.bridge-nf-call-ip6tables=1 |
修改参数
1 | sudo sysctl -w net.ipv4.ip_forward=1 |
加载文件
1 | sudo sysctl -p |
重启虚拟机查看是否生效(如果生效参数都为1)
1 | sysctl net.bridge.bridge-nf-call-ip6tables |
7. 设置虚拟机时间同步
(1)安装chrony
1 | 检查是否安装了chrony |
(2)配置chrony,这里以一台虚拟机为master,其他虚拟机为worker,worker同步master的时间
在master实例编辑’/etc/chrony.conf‘文件,添加如下内容
1 | # 允许其他节点同步时间,192.168.218.0/24为虚拟机所在的网段 |
在其他worker实例编辑’/etc/chrony.conf‘文件没添加如下内容
1 | # 指向时间服务器(master),这里如何设置了虚拟机名称用master,否则可以用ip |
(3)在每个实例依次重启chrony服务
1 | 启动 |
(4)查看worker节点是否同步了master节点的时间
1 | chronyc sources |
8. 设置虚拟机时区
1 | # 查看现在的时区 |
9. 关闭系统交换分区(swap area)
1 | 输入命令可以查看到swap相关信息 |
- 注意:如果不关闭swap,就会在kubeadm初始化Kubernetes的时候报错:“[ERROR Swap]: running with swap on is not supported. Please disable swap”
安装基础软件(并不是要求全部安装,可根据需求安装)
1. 安装yum
(1)验证是否安装了yum(通常系统会自行安装),并保证软件版本更新到最新
1 | # 查看版本 |
(2)如果没有安装,通过以下命令获取yum并执行安装
1 | # 获取yum文件 |
(3)安装yum-utils、device-mapper-persistent-data、lvm2
1 | yum install -y yum-utils device-mapper-persistent-data lvm2 |
(4)在yum中设置docker的阿里云镜像(提高docker安装软件时的下载速度,也可以设置其他来源镜像)
1 | yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo |
(5) 更新yum软件包索引
1 | # centos7 |
(6) 验证yum是否安装成功
1 | yum --version |
注:如果已经安装了yum,但使用yum安装其他软件时(如docker-ce)出现错误:
1
2
3
4已加载插件:fastestmirror
Loading mirror speeds from cached hostfile
Could not retrieve mirrorlist http://mirrorlist.centos.org/?release=7&arch=x86_64&repo=os&infra=stock error was
14: curl#6 - "Could not resolve host: mirrorlist.centos.org; 未知的错误"出现这个问题是因为使用的 CentOS 7 仓库已经被归档,当前的镜像地址无法找到所需的文件(CentOS 7 的官方支持已经结束,官方仓库在 2024 年 6 月 30 日之后已经停止维护,部分仓库已被移至归档库,这导致了你的 yum 命令无法找到所需的元数据文件,因此使用 CentOS 7 的官方仓库可能会遇到问题)。
我们需要设置为国内的镜像源(如阿里云),命令如下:
1
2
3
4
5
6
7
8
9
10
11
12# 备份原来的repo 文件
# CentOS8
mv /etc/yum.repos.d/CentOS-Linux-BaseOS.repo /etc/yum.repos.d/CentOS-Linux-BaseOS.repo.backup
mv /etc/yum.repos.d/CentOS-Linux-AppStream.repo /etc/yum.repos.d/CentOS-Linux-AppStream.repo.backup
# CentOS7
mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.backup
# 从阿里云下载新的配置文件
# CentOS8
curl -o /etc/yum.repos.d/CentOS-Linux-BaseOS.repo https://mirrors.aliyun.com/repo/Centos-8.repo
# CentOS7
curl -o /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-7.repo然后执行命令查看阿里云镜像源是否被添加:
1
cat /etc/yum.repos.d/CentOS-Base.repo
执行命令让阿里云镜像源生效:
1
2sudo yum clean all
sudo yum makecache再执行(3)~(5)步,建立正确的元数据缓存
1.1 使用yum安装基础软件
(1)使用yum安装wget
1 | sudo yum install -y wget |
(2)使用yum安装vim
1 | sudo yum install -y vim |
(3)安装gcc、gcc-c++
1 | sudo yum -y install gcc |
2. 安装jdk
(1)将jdk文件上传(或下载)到linux服务器
1 | # 上传 |
(2)将文件解压到合适目录
1 | tar -zxvf /usr/local/lib/jdk/jdk-8u421-linux-x64.tar.gz |
(3)修改环境变量
1 | vi /etc/profile |
(4)使配置的环境变量生效
1 | source /etc/profile |
(5)验证安装完成
1 | java -version |
- 注意:安装jdk的方式不止一种,也可以使用yum命令安装(需要先安装yum)
1 | sudo yum install -y java-1.8.0-openjdk |
3. 安装maven
(1)将文件上传或下载到服务器
1 | # 上传 |
(2)将文件解压到合适目录
1 | tar -zxvf /usr/local/lib/maven/apache-maven-3.9.7-bin.tar.gz |
(3)修改环境变量
1 | vi /etc/profile |
(4)使配置的环境变量生效
1 | source /etc/profile |
(5)验证安装成功
1 | mvn -v |
3.1 maven的常用命令
1 | 1、mvn compile |
- 注:安装maven的方式同样不止一种,也可以用yum方式安装,这里不再赘述
4. 安装docker
(1) 安装DOCKER CE(注意:Docker分为CE版和EE版,一般我们用CE版就够用了;这里用yum命令安装,需要先安装yum)
1 | # 安装 |
(2) 验证是否安装成功
1 | docker --version |
(3)设置镜像源(提高docker安装软件时的下载速度)
a. 阿里云镜像
登录阿里云容器镜像服务页面获取镜像地址
1 | {"registry-mirrors": ["https://xxx.mirror.aliyuncs.com"]} |
b.毫秒镜像
登录到毫秒镜像,按照提示操作
1 | {"registry-mirrors": ["https://docker.1ms.run"]} |
编辑或创建 Docker 的配置文件,并添加镜像
1 | sudo mkdir -p /etc/docker |
(4)加载配置文件并重启Docker让配置生效
1 | sudo systemctl daemon-reload |
(5)查看配置的镜像是否生效
1 | docker info |
(6)设置docker开机自启
1 | 设置开机自启 |
4.1 卸载docker
(1)确保 Docker 服务已停止
1 | sudo systemctl stop docker |
(2)使用 yum
卸载 Docker 包
1 | sudo yum remove docker-ce docker-ce-cli docker-ce-rootless-extras docker-buildx-plugin docker-compose-plugin |
(3)手动删除 Docker 文件和目录
即使使用 yum
卸载,有时仍会有一些残留文件。可以手动删除这些文件和目录:
1 | 删除 Docker 安装目录 |
(4)清理 YUM 缓存以确保没有残留的包信息
1 | sudo yum clean all |
(5)确认所有 Docker 相关的包和文件都已删除
1 | 此命令应不再返回任何结果 |
4.2 docker的常用命令
(1)进入docker容器
1 | docker exec -it [容器名称或ID] /bin/bash |
5. 安装docker-compose
(1)下载docker-compose
1 | sudo curl -L "https://github.com/docker/compose/releases/download/v2.6.1/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose |
(2)授予文件夹可执行权限
1 | sudo chmod +x /usr/local/bin/docker-compose |
(3)创建软链
1 | sudo ln -s /usr/local/bin/docker-compose /usr/bin/docker-compose |
(4)验证是否安装成功
1 | docker-compose --version |
注:’/usr/bin’ 是一个标准的系统目录,存放着大多数系统命令;通过创建软链,可以在终端中直接使用’docker-compose‘命令,而不必每次输入全路径’**
/usr/local/bin/docker-compose
**‘,从而使命令调用更加方便1
2
3
4# 没有创建软链
/usr/local/bin/docker-compose up -d
# 创建软链后
docker-compose up -d
5.1 设置docker-compose网络
我们使用docker-compose部署容器时,默认每个docker-compose.yml文件会创建属于自己的网络,并且使用桥接方式与宿主机连接;我们要想访问别的容器时只能访问其暴露在宿主机中的端口,这样让网络管理变得很不方便,特别是在宿主机ip变动时,每次都需要修改很多文件;我们可以手动创建一个docker网络,在各容器创建时都使用这个网络,这样在docker-compose.yml文件中需要访问别的容器时,我们可以直接使用容器名称来代替容器ip,docker-compose会帮我们自动解析,便于后续的网络管理
(1)在docker中建立一个网络
1 | 创建一个名称为’my_network‘,连接方式为桥接(bridge)的网络 |
(2)在创建容器的docker-compose.yml文件中添加以下内容,让这些容器都使用’my_network’
1 | services: |
6. 安装systemd
- 注:systemd是服务管理软件,如果不采用docker方式部署而是采用传统方式部署,则systemd非常有用
(1)yum方式安装(需要先安装yum)
1 | yum install systemd |
(2)创建并编辑配置文件(以frps.service
为例)
1 | vi /etc/systemd/system/frps.service |
写入内容
1 | [Unit] |
(3)常用systemd命令
1 | # 启动frp |
7. 安装npm
(1)下载npm安装包
1 | wget https://npm.taobao.org/mirrors/node/v10.14.1/node-v10.14.1-linux-x64.tar.gz |
- 注:如果无法在云服务器下载,就在主机下载再上传
(2) 解压(到适当目录)
1 | tar -xvf node-v10.14.1-linux-x64.tar.gz |
(3)添加环境变量(我的安装目录在:’/usr/local/lib/node-v10.14.1-linux-x64‘)
1 | vi /etc/profile |
1 | export NODE_HOME=/usr/local/lib/node-v10.14.1-linux-x64 |
1 | source /etc/profile |
(4)可以设置镜像
1 | npm config set registry https://registry.npmmirror.com |
(5)检测是否成功
1 | npm -v |
7.1 安装并使用pm2
PM2 是一个流行的 Node.js 进程管理器,旨在简化 Node.js 应用程序的管理和监控;安装 PM2 之前需要先安装 Node.js,而 Node.js 包含了 npm;所以安装PM2之前要先安装npm;
1 | npm install pm2 -g |
- 启动应用
1 | # 在启动前记得用“npm i”安装依赖 |
- 查看进程状态
1 | pm2 status |
- 重启应用
1 | pm2 restart app.js |
- 停止应用
1 | pm2 stop app.js |
- 删除应用
1 | pm2 delete app.js |
- 查看日志
1 | pm2 logs |
8. 安装git
- 注:这里使用下载安装包的安装方式,需要自己编译、安装,所以需要先安装一些依赖(包括gcc、gcc-c++);这里使用了yum命令,所以是需要先安装yum的
1 | sudo yum install curl-devel expat-devel gettext-devel openssl-devel zlib-devel -y |
(1)下载安装包
1 | wget https://mirrors.edge.kernel.org/pub/software/scm/git/git-2.37.2.tar.gz |
(2)解压
1 | tar -zxvf git-2.37.2.tar.gz |
(3)编译
1 | cd git-2.37.2 |
(4)安装
1 | # 安装到自己选择的目录(即prefix后跟随的目录) |
(5)修改环境变量
1 | vi /etc/profile |
1 | # 让环境变量生效 |
(6)验证是否安装成功
1 | git -v |
8.1 git的使用方法
(1)提交代码
1 | # 查看当前分支代码状态 |
(2)新建分支/切换分支
1 | # 查看现有的分支 |
(3)代码贮藏/弹出(得到一个‘clean work tree’,可以方便的切换到其他分支)
1 | # 将还没有提交的代码贮藏 |
(4)使用远程仓库(默认的远程仓库引用为‘origin’)
1 | # 查看远程仓库 |
9. 安装nginx
(1)使用docker-compose的安装方式
docker-compose.yml文件为:
1 | services: |
(2)操作命令
1 | # 测试 Nginx 配置 |
(3)功能实现及配置文件讲解
nginx的功能很多(部署前端项目、静态资源分离、反向代理、解决跨域问题、根据子域名访问不同的端口号),这里没有办法一下子写完,只能用到之后再添加;nginx最重要的就是它的配置文件,我根据我的使用经验说明一下
- 根据子域名(三级域名)访问不同的端口号
我们配置好子域名以后,会发现主域名和子域名访问的都是云服务器的80端口,但是我现在希望子域名能访问云服务器的不同端口;这一功能,我们可以借助nginx实现
在nginx的’conf/conf.d/default.conf’配置文件中,添加如下内容:
1 | server { |
- 注:
- “listen 80” 指定监听的端口
- “server_name”是nginx中的一个核心指令,负责匹配请求的域名(当客户端发送请求时,Nginx 会检查请求的
Host
头部,看看它匹配哪个server_name
配置的域名。一旦找到匹配的服务器块,Nginx 就会使用这个块中的配置来处理请求。) - “location” 匹配请求路径,“/”表示匹配所有请求路径;proxy_pass为请求转发的url ,需要注意的是如果nginx部署在docker中,这里的转发路径不能用“localhost”或者“127.0.0.1”,因为docker容器的默认网络(桥接模式)有独立性,所以这样配置请求会指向docker容器内部;正确的做法是配置宿主机的ip,这里我配置的云服务器的内网ip
- 启用缓存
a. 添加缓存块
在 Nginx 配置文件(通常位于 ‘conf/nginx.conf’)中,添加以下内容:
1 | http { |
- /var/cache/nginx:缓存文件的存储路径。
- levels=1:2:缓存目录的层级结构。
- keys_zone=my_cache:10m:定义缓存区域名称为 my_cache,并分配 10MB 的内存用于存储缓存键。
- max_size=1g:缓存最大占用 1GB 磁盘空间。
- inactive=60m:如果缓存文件在 60 分钟内未被访问,则自动删除。
- use_temp_path=off:禁用临时文件路径,直接写入缓存目录。
b. 在路径中启用缓存
在‘/conf/conf.d/default.conf’文件的server块中,添加如下内容:
1 | server { |
- proxy_cache my_cache:启用缓存,并指定缓存区域。
- proxy_cache_valid:设置不同状态码的缓存时间。
- proxy_cache_use_stale:在后端服务器不可用时,使用过期的缓存。
c. 添加图片(静态文件) 缓存
1 | location ~* \.(png|jpg|jpeg|gif|ico|svg|webp)$ { |
d. 开启压缩传输
在‘conf/nginx.conf’中添加如下内容:
1 | http { |
d. 修改文件之后重启nginx
- 解决跨域问题
我将前后端项目部署在同一台虚拟机上,但是前端项目却无法请求同在一台服务器上的后端项目,这就是跨域问题造成的
TODO 等公安备案完毕再进行进一步配置