CentOS8安装Web相关服务
## nginx
### 安装 nginx
```shell
dnf install nginx
```

输入 `y` 回车就可以安装了。
安装完毕后,控制台输入`nginx -v`,如果有版本号输出,证明我们的 nginx 已经安装完成。

### 启动 nginx
```shell
# 启动 nginx
systemctl start nginx
# 设置开机自动启动 nginx
systemclt enable nginx
```
上面两条命令可以简化成一条
```shell
# 设置开机自动启动 nginx,通过 --now 参数让 nginx 立即启动
systemctl enable --now nginx
```
通过 `systemctl status nginx` 来查看 nginx 的运行状态,出现以下界面,证明我们的 nginx 服务成功地运行起来了:

`active(running)` 表示 nginx 当前的状态是运行中。
### nginx 简单配置 web 服务
使用 `whereis nginx` 查看 nginx 服务所在目录。

其中 `/etc/nginx` 是 nginx 配置相关的目录,`/etc/nginx/.conf` 是 nginx 的默认配置文件。我们可以看到在配置文件中,他会引入所有在 `/etc/nginx/conf.d/` 目录下所有的 `.conf` 相关的配置文件:

所以,我们可以直接在 `/etc/nginx/conf.d` 目录下管理我们的 web 服务。
```shell
cd /etc/nginx/conf.d
vi test.conf
```
输入以下内容:
```
server {
listen 443 ssl;
server_name test.humandetail.com;
root /home/www/test/dist;
# ssl 证书
ssl_certificate /home/cert/test.humandetail.com.pem;
ssl_certificate_key /home/cert/test.humandetail.com.key;
# ssl 验证相关
ssl_session_timeout 5m; # 缓存有效期
ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4; # 加密算法
ssl_protocols TLSv1 TLSv1.1 TLSv1.2; # 安全链接可选的加密协议
ssl_prefer_server_ciphers on; # 使用服务器端的首选算法
# gzip
gzip on;
#需要压缩的常见静态资源
gzip_types text/plain application/javascript application/x-javascript text/css application/xml text/javascript application/x-httpd-php image/jpeg image/gif image/png;
#由于nginx的压缩发生在浏览器端而微软的ie6很坑爹,会导致压缩后图片看不见所以该选项是禁止ie6发生压缩
gzip_disable "MSIE [1-6]\.";
#如果文件大于1k就启动压缩
gzip_min_length 1k;
#以16k为单位,按照原始数据的大小以4倍的方式申请内存空间,一般此项不要修改
gzip_buffers 4 16k;
#压缩的等级,数字选择范围是1-9,数字越小压缩的速度越快,消耗cpu就越大
gzip_comp_level 2;
#启用应答头"Vary: Accept-Encoding"
gzip_vary on;
location / {
try_files $uri $uri/ /index.html;
}
location /api {
proxy_pass http://127.0.0.1:10086;
}
}
server {
listen 80;
server_name test.humandetail.com;
return 301 https://$server_name$request_uri;
}
```
输入 `nginx -t` 可以查看配置是否正确

出现上面的提示,就说明 nginx 的配置没有问题,使用 `systemctl restart nginx` 重启 nginx 服务,这样我们就能正常访问了。
## MySQL
### 使用 dnf 安装 mysql-server
```shell
# 使用 -y 表示所有询问都直接确认
# 默认会安装最新版本的 mysql
dnf install mysql-server -y
# 安装完成之后启动 mysqld
systemctl enable --now mysqld
```

### 设置
启动完之后,使用 root 账户登入
```shell
mysql -u root -p
```
因为我们还没设置 root 账户的密码,所以在输入密码时,直接回车便可以登录。
接下来我们需要先给 root 账户设置一个密码
```mysql
ALTER USER 'root'@'localhost' IDENTIFIED BY 'YOUR_PASSWORD';
```
然后创建远程访问
```mysql
use mysql;
-- 更新数据,授权外部访问
UPDATE user SET host = '%' WHERE user = 'root' AND host='localhost';
-- 刷新权限
FLUSH PRIVILEGES;
```
MySQL8 以上更改密码认证插件
```mysql
ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password by 'root';
```
### 创建管理员账号
```mysql
-- 创建
CREATE user 'YOUR_USER_NAME'@'%' IDENTIFIED BY 'YOUR_PASSWORD';
-- ALL 表示所有权限
-- *.* 第一个*表示所有数据库,第二个*表示所有表
GRANT ALL ON *.* TO 'YOUR_USER_NAME'@'%';
-- 刷新权限
FLUSH PRIVILEGES;
```
输入 `exit` 退出 mysql,回到控制台。
## MongoDB
在 `/etc/yum.repos.d` 目录中创建一个回购文件,以在 CentOS 8 服务器中安装 MongoDB yum 存储库。
```shell
vi /etc/yum.repos.d/mongodb-org-5.0.repo
```
添加以下配置内容并保存
```
[mongodb-org-5.0]
name=MongoDB Repository
baseurl=https://repo.mongodb.org/yum/redhat/6/mongodb-org/5.0/x86_64/
gpgcheck=1
enabled=1
gpgkey=https://www.mongodb.org/static/pgp/server-5.0.asc
```
为 MongoDB yum 存储库构建缓存。
```shell
dnf clean all
dnf makecache
dnf repolist
```

我们需要根据MongoDB软件的要求在centos8服务器中设置资源限制。
为此,为MongoDB创建资源限制配置文件,如下:
```shell
vi /etc/security/limits.d/mongod.conf
```
添加以下内容并保存
```
mongod soft nproc 64000
mongod hard nproc 64000
mongod soft nofile 64000
mongod hard nofile 64000
```
然后我们可以从新添加的yum存储库在 CentOS 8 服务器上安装 MongoDB。
使用以下 dnf 命令安装 MongoDB 服务器的最新稳定版本。
```shell
dnf list -y mongodb-org
dnf install -y mongodb-org
```
### 创建管理员用户
默认情况下, MongoDb服务器从未启用访问控制,因此任何人都可以访问 MongoDB 服务器并执行管理操作。所以我们需要创建一个 admin 用户并在 MongoDB 服务器中启用访问控制。
```shell
# 连接 MongoDB
mongo
# 连接管理数据库
use admin;
# 创建管理员用户
db.createUser(
{
user: "admin",
pwd: "YOUR_PASSWORD",
roles: [ { role: "userAdminAnyDatabase", db: "admin" } ]
}
);
# 列出 MongoDB 数据库中所有用户
show users;
```
创建完用户之后,我们需要为 MongoDB.service 编辑 system 单元文件。
```shell
vi /usr/lib/systemd/system/mongod.service
```
在文件中找到 `Environment=``"OPTIONS=-f /etc/mongod.conf"`,将其替换成
```
Environment="OPTIONS=--auth -f /etc/mongod.conf"
```
重载 systemd 并重启 MongoDB 服务器以更改应用
```shell
systemctl daemon-reload
systemctl restart mongod
```
检测是否启用了访问控制
```shell
mongo
use admin;
show users;
```

这次 `show users;` 命令引发身份验收错误,它确认在我们的 MongoDB 服务器中已启用访问控制。
现在,以管理员身份连接
```shell
db.auth("admin", passwordPrompt());
show users;
```
这时就应该可以看到用户列表。
### 开启外网访问
```shell
vi /etc/mongod.conf
```
找到 `bindIp: 127.0.0.1` 这一行改成 `bindIp: 0.0.0.0`
## Redis
```shell
dnf install redis
systemctl enable --now redis
```
修改配置`/etc/redis.conf`
1. 允许远程连接访问:找到 `bind 127.0.0.1` 这一行,注释掉`# bind 127.0.0.1`,如果还是无法访问,那就改成 `bind: 0.0.0.0`
2. 启用密码访问:找到 `# requirepass foobared` 把前面的 `#` 去掉,然后把 `foobared` 改为你自己的密码。
然后重启 redis `systemclt restart redis`
## git
```shell
dnf install git -y
```
## Node
### 使用 `n` 来管理 Node
安装 `n` 来管理 Node,因为我们服务器上还没有安装 `npm`,所以通过以下方式来安装 `n`
```shell
curl -L https://raw.githubusercontent.com/tj/n/master/bin/n -o n
bash n lts
# Now node and npm are available
npm install -g n
```

## pm2
```shell
npm i -g pm2
```
## jenkins
因为Jenkins是使用Java编写的,所以需要安装Java环境,Jenkins需要Java8或更高版本。
这里使用OpenJDK,首先通过一下命令安装OpenJDK.
```shell
dnf install java-1.8.0-openjdk-devel
```
启用 Jenkins 存储库,运行以下命令并导入 GPG 密钥:
```shell
wget -O /etc/yum.repos.d/jenkins.repo http://pkg.jenkins-ci.org/redhat-stable/jenkins.repo
rpm --import https://pkg.jenkins.io/redhat-stable/jenkins.io.key
```
安装最新稳定版本 Jenkins
```shell
dnf install jenkins
```
启用 Jenkins
```shell
systemctl enable --now jenkins
```
修改 Jenkins 默认端口
```shell
vi /etc/sysconfig/jenkins
```
找到 `JENKINS_PORT=8080` 这一行,把端口改成你想要的。
然后重启一下 Jenkins
```shell
systemctl restart jenkins
```
如果修改端口还是失效,则用以下方法进一步修改
`vi /usr/lib/systemd/system/jenkins.service`
找到 `Environment="JENKINS_PORT=8080"` 把 8080 改成你想要的端口,之后重新加载配置文件 `systemctl daemon-reload` ,最后重启 jenkins
## vsftpd
```shell
dnf install vsftpd
systemctl enable --now vsftpd
```
安装完后,我们需要创建一个用于访问 FTP 服务器的用户。`YOUR_USER_NAME` 替换成你想创建的用户名
```shell
adduser YOUR_USER_NAME
passwd YOUR_USER_NAME
```
FTP 用户就位后,我们将继续创建 FTP 目录,并分配以下权限
```shell
mkdir -p /home/ftp
chmod -R 750 /home/ftp
chown -R YOUR_USER_NAME /home/ftp
```
我们还需要将 FTP 用户添加到 `/etc/vsftpd/user_list` 中,以允许用户访问 vsftp 服务器
```shell
bash -c 'echo YOUR_USER_NAME >> /etc/vsftpd/user_list'
```
### 进一步配置
允许本地用户远程访问 FTP 服务器并阻止匿名用户
```shell
vi /etc/vsftpd/vsftpd.conf
```
找到 `anonymous_enable` 这一行,设置为NO, `local_enable` 这一行设置为 YES
```
anonymous_enable=NO
local_enable=YES
```
授予用户运行任何 FTP 命令和进行更改的权限
```
write_enable=YES
```
出于安全目的,你可以选择限制用户访问其主目录之外的任何文件和目录。
```
chroot_local_user=YES
```
授予用户对其各自主目录的读写权限
```
allow_writeable_chroot=YES
```
最后保存文件,重启 vsftpd 服务
```shell
systemctl restart vsftpd
```
## 配置 swap
我们在安装系统的时候已经建立了 swap 分区。swap 分区通常被称为交换分区,这是一块特殊的硬盘空间,即当实际内存不够用的时候,操作系统会从内存中取出一部分暂时不用的数据,放在交换分区中,从而为当前运行的程序腾出足够的内存空间。
也就是说,当内存不够用时,我们使用 swap 分区来临时顶替。这种“拆东墙,补西墙”的方式应用于几乎所有的操作系统中。
使用 swap 交换分区,显著的优点是,通过操作系统的调度,应用程序实际可以使用的内存空间将远远超过系统的物理内存。由于硬盘空间的价格远比 RAM 要低,因此这种方式无疑是经济实惠的。当然,频繁地读写硬盘,会显著降低操作系统的运行速率,这也是使用 swap 交换分区最大的限制。
使用以下命令来查看 swap 配置情况
```shell
free -m
```

从上图我们可以看到 swap 是还没有配置的
通过 dd 命令增加 swap 空间
```shell
# 增加 5G 的 swap 空间
dd if=/dev/zero of=/var/newswap bs=1M count=5120
# 设置权限
chown root:root /var/newswap
chmod 0600 /var/newswap
```
创建 swap 文件
```shell
mkswap /var/newswap
```
加载 swap
```shell
swapon /var/newswap
```
然后运行 `free -m` 查看 swap 是否生效,看到 swap 里面有值就说明配置成功了。

最后编辑 `/etc/fstab` 文件,把 swap 配置写入,防止重启后 swap 变为0
```shell
vi /etc/fstab
```
在最后一行写入
```
/var/newswap swap swap defaults 0 0
```
为了防止写错,我们用 `mount -a` 命令校验一下,如果没报错,那就证明没有问题。
**卸载 swap**
```shell
swapoff /var/newswap
rm -rf /var/newswap
```