Linux的环境部署

[复制链接]
发表于 2026-9-16 12:03:12 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

×
Linux 单节点环境部署(gpmall 商城示例)

引言:前段时间完成了一次 Linux 单节点应用部署实验,过程中踩了不少坑。本文把当时的操作过程重新整理成一份可复现的教程,重点补上环境说明、下令解释和验证环节。
目标


  • 了解应用系统需要哪些基础服务;
  • 完成这些基础服务的安装与启动;
  • 部署 gpmall 前后端并访问验证。
1. 环境说明

动手之前先把环境交接清楚。

  • 操作系统:CentOS 7
  • 主机名:mall
  • 虚拟机 IP:以实际为准(后文 Elasticsearch 配置需替换)
  • YUM 源:当地源 /etc/yum.repos.d/local.repo
  • 应用:gpmall(开源商城,含 4 个后端 jar + 1 个前端 dist)
  • 后端端口:8081 / 8082 / 8083
查看系统版本:
  1. [root@localhost ~]# cat /etc/redhat-release
  2. CentOS Linux release 7.x
复制代码
2. Linux 环境部署

2.1 修改主机名
  1. [root@localhost ~]# hostnamectl set-hostname mall
  2. [root@localhost ~]# bash
  3. [root@mall ~]#
复制代码
hostnamectl set-hostname 修改静态主机名,重启后仍生效。实行 bash 是为了让当前 shell 立刻刷新提示符。
2.2 查看主机名
  1. [root@mall ~]# hostname
  2. mall
复制代码
或者:
  1. [root@mall ~]# hostnamectl
  2.    Static hostname: mall
  3.          Icon name: computer-vm
  4.            Chassis: vm
复制代码
2.3 配置 hosts 文件
  1. [root@mall ~]# vi /etc/hosts
复制代码
参加一行(IP 换成你自己的):
  1. 192.168.x.x    mall
复制代码
验证:
  1. [root@mall ~]# ping -c 2 mall
  2. PING mall (192.168.x.x) 56(84) bytes of data.
  3. 64 bytes from mall (192.168.x.x): icmp_seq=1 ttl=64 time=0.032 ms
复制代码
留意:提示符里的名字只是显示,真正影响服务的是 /etc/hostname 和 /etc/hosts 的内容。如果只改了提示符而没配 hosts,某些服务用主机名互相访问时仍会解析失败。
2.4 配置当地 YUM 源

查看当地源配置:
  1. [root@mall ~]# cat /etc/yum.repos.d/local.repo
  2. [local]
  3. name=Local YUM
  4. baseurl=file:///mnt/cdrom
  5. enabled=1
  6. gpgcheck=0
复制代码
解释:

  • baseurl=file:///mnt/cdrom 表示从挂载的 ISO 读包,不走网络;
  • gpgcheck=0 跳过签名校验,学习环境可用;
  • 如果 ISO 没挂上,先实行 mount /dev/cdrom /mnt/cdrom。
当地源里只有 CentOS 官方包。Elasticsearch 不在其中,如果直接安装成功,说明你的环境里额外配了 Elastic 源或用了其他源,发起在环境说明里补一句。
3. 安装基础服务

基础服务共 5 项:Java JDK、Redis、Elasticsearch、Nginx、MariaDB。
3.1 安装 Java 环境

作用:gpmall 是 Java 应用,需要 JDK 运行。
  1. [root@mall ~]# yum install -y java-1.8.0-openjdk java-1.8.0-openjdk-devel
复制代码
验证:
  1. [root@mall ~]# java -version
  2. openjdk version "1.8.0_xxx"
  3. OpenJDK Runtime Environment (build 1.8.0_xxx)
  4. OpenJDK 64-Bit Server VM (build 25.xxx-bxx, mixed mode)
复制代码
看到版本号即安装成功。
3.2 安装 Redis

作用:缓存会话和热门数据,减轻数据库压力。
  1. [root@mall ~]# yum install redis -y
复制代码
3.3 安装 Elasticsearch

作用:为 gpmall 提供商品搜索能力。
  1. [root@mall ~]# yum install elasticsearch -y
复制代码
CentOS 默认源没有 ES,如果你的环境能直接装成功,说明之前配过 Elastic 源。这一步发起在环境说明里写清楚。
3.4 安装 Nginx

作用:托管前端静态资源,反向署理后端接口。
  1. [root@mall ~]# yum install nginx -y
复制代码
CentOS 7 默认源没有 Nginx,需要 EPEL 源。原文直接装成功,说明源已配好。
3.5 安装 MariaDB

作用:存储 gpmall 的业务数据(用户、商品、订单等)。
  1. [root@mall ~]# yum install mariadb mariadb-server -y
复制代码
4. 启动系统服务

4.1 配置并启动 MariaDB

编辑配置文件:
  1. [root@mall ~]# vi /etc/my.cnf
复制代码
在 [mysqld] 段下参加:
  1. [mysqld]
  2. init_connect='SET NAMES utf8'
  3. collation_connection = utf8_unicode_ci
  4. character-set-server=utf8
复制代码
保存退出:Esc → :wq。
这里要留意:两条 init_connect 写在一起,后一条会覆盖前一条,实际只有一条生效。正确写法是只保留一条 init_connect,其他字符集参数分开写。
init_connect 只对非超级用户生效,root 登录不受影响。
重启服务:
  1. [root@mall ~]# systemctl restart mariadb
复制代码
4.2 设置 root 密码

尝试用密码登录:
  1. [root@mall ~]# mysql -uroot -p123456
复制代码
能进入 MariaDB [(none)]> 提示符,说明密码正确。
如果忘了密码,不要反复试,跳过权限表重置:
  1. systemctl stop mariadb
  2. mysqld_safe --skip-grant-tables &
  3. mysql -uroot
复制代码
  1. UPDATE mysql.user SET password=PASSWORD('新密码') WHERE user='root';
  2. FLUSH PRIVILEGES;
复制代码
然后重启 MariaDB。
4.3 创建 gpmall 数据库

进入数据库后:
  1. MariaDB [(none)]> create database gpmall;
复制代码
如果提示已存在,直接使用:
  1. MariaDB [(none)]> use gpmall;
复制代码
导入数据:
  1. MariaDB [gpmall]> source /root/gpmall.sql;
复制代码
出现大量 Query OK 表示导入成功。
退出:
  1. MariaDB [gpmall]> exit;
复制代码
验证:
  1. [root@mall ~]# mysql -uroot -p123456 -e "use gpmall; show tables;"
复制代码
能看到表列表即成功。
4.4 启动 Redis 服务

修改配置,注释掉绑定地址:
  1. [root@mall ~]# sed -i 's/^bind 127.0.0.1/# bind 127.0.0.1/' /etc/redis.conf
  2. [root@mall ~]# sed -i 's/protected-mode yes/protected-mode no/' /etc/redis.conf
复制代码
启动并设置开机自启:
  1. [root@mall ~]# systemctl start redis
  2. [root@mall ~]# systemctl enable redis
复制代码
验证:
  1. [root@mall ~]# redis-cli ping
  2. PONG
复制代码
解释这两条 sed:

  • 注释 bind 127.0.0.1:允许其他主机连接,不只监听本机;
  • 关闭 protected-mode:非本机连接时不拒绝。
生产环境不要这样裸奔,应配密码 + 防火墙。
4.5 启动 Elasticsearch

编辑配置:
  1. [root@mall ~]# vi /etc/elasticsearch/elasticsearch.yml
复制代码
写入:
  1. http.cors.enabled: true
  2. http.cors.allow-origin: "*"
  3. http.cors.allow-credentials: true
复制代码
把 network.host 改为自己的 IP。
留意:http.cors.allow-origin 的引号必须是英文引号,写成中文引号 ”*“ 会导致 YAML 解析失败。
启动并设置开机自启:
  1. [root@mall ~]# systemctl start elasticsearch
  2. [root@mall ~]# systemctl enable elasticsearch
复制代码
验证:
  1. [root@mall ~]# curl http://本机IP:9200
  2. {
  3.   "name" : "...",
  4.   "cluster_name" : "...",
  5.   "version" : { "number" : "x.x.x" },
  6.   "tagline" : "You Know, for Search"
  7. }
复制代码
解释这三条:开启 CORS 跨域,允许任意来源访问 ES 的 HTTP 接口,方便前端或可视化工具调用。生产环境应把 * 换成具体域名。
4.6 启动 Nginx 服务
  1. [root@mall ~]# systemctl start nginx
  2. [root@mall ~]# systemctl enable nginx
复制代码
验证:
  1. [root@mall ~]# systemctl status nginx
  2. ● nginx.service - The nginx HTTP and reverse proxy server
  3.    Active: active (running)
复制代码
无报错即可。
5. 应用系统部署

5.1 确认 hosts 解析
  1. [root@mall ~]# cat /etc/hosts
  2. 127.0.0.1   localhost localhost.localdomain
  3. 192.168.x.x mall
复制代码
5.2 部署前端页面

清空 Nginx 默认目录:
  1. [root@mall ~]# rm -rf /usr/share/nginx/html/*
复制代码
复制前端打包产物:
  1. [root@mall ~]# cp -rvf dist/* /usr/share/nginx/html/
复制代码
dist 是 gpmall 前端项目打包后的静态目录,需要提前上传到当前目录。
修改 Nginx 配置:
  1. [root@mall ~]# vi /etc/nginx/conf.d/default.conf
复制代码
按实际环境配置 root 指向 /usr/share/nginx/html,并配置后端接口的反向署理。
重启 Nginx:
  1. [root@mall ~]# nginx -t
  2. [root@mall ~]# systemctl restart nginx
复制代码
先 nginx -t 测试语法,再 restart,避免配置写错导致 Nginx 起不来。
5.3 部署后端服务

进入目录:
  1. [root@mall ~]# cd /root/gpmall
复制代码
依次启动 4 个服务:
  1. [root@mall gpmall]# nohup java -jar shopping-provider-0.0.1-SNAPSHOT.jar > shop.log 2>&1 &
  2. [root@mall gpmall]# nohup java -jar user-provider-0.0.1-SNAPSHOT.jar > user.log 2>&1 &
  3. [root@mall gpmall]# nohup java -jar gpmall-shopping-0.0.1-SNAPSHOT.jar > gpmall-shop.log 2>&1 &
  4. [root@mall gpmall]# nohup java -jar gpmall-user-0.0.1-SNAPSHOT.jar > gpmall-user.log 2>&1 &
复制代码
留意日志文件名要和 jar 包名保持一致,避免排查时找错文件。
解释 nohup ... &:

  • nohup:忽略挂断信号,退出 shell 后进程继承运行;
  • > xxx.log 2>&1:标准输出和错误输出都写入日志;
  • &:后台运行。
检查端口:
  1. [root@mall gpmall]# netstat -ntlp | grep -E '8081|8082|8083'
  2. tcp6 0 0 :::8081 :::* LISTEN 12345/java
  3. tcp6 0 0 :::8082 :::* LISTEN 12346/java
  4. tcp6 0 0 :::8083 :::* LISTEN 12347/java
复制代码
看到 8081、8082、8083 三个端口处于 LISTEN 即启动成功。
浏览器访问:
  1. http://192.168.x.x
复制代码
能看到商城首页即部署完成。
如果访问失败,按下面顺序排查:

  • netstat -ntlp 确认端口是否真的在听;
  • tail -f shop.log 看后端日志有没有报错;
  • mysql -uroot -p123456 确认数据库能连;
  • redis-cli ping 确认 Redis 正常;
  • curl http://localhost:9200 确认 ES 正常;
  • systemctl status nginx 确认 Nginx 正常。
6. 总结

6.1 五个服务的作用


  • Java JDK:运行 gpmall 后端
  • MariaDB:存储业务数据
  • Redis:缓存会话和热门数据
  • Elasticsearch:商品搜索
  • Nginx:托管前端、反向署理后端
6.2 常见问题:MariaDB 连接失败

征象:
  1. mysql -uroot
  2. ERROR 1045 (28000): Access denied for user 'root'@'localhost'
复制代码
排查:

  • systemctl status mariadb → 服务正常
  • tail -f /var/log/mariadb/mariadb.log → 无异常
  • mysql -uroot -p123456 → 能登录
原因:之前已经设置过 root 密码,本次连接未带密码。
解决:使用正确密码登录;忘记密码时用 --skip-grant-tables 重置。
6.3 常用排查下令
  1. systemctl status <服务名>          # 服务状态
  2. ss -lntp | grep <端口>             # 端口监听
  3. journalctl -u <服务名> -f          # 实时日志
  4. curl -I http://localhost:<端口>    # HTTP 测试
  5. tail -f xxx.log                    # 应用日志
复制代码
以上就是完整的部署过程。核心不是把下令敲一遍,而是明白每个服务为什么存在、配置项改了什么、出问题按什么顺序排查。

免责声明:如果侵犯了您的权益,请联系站长及时删除侵权内容,谢谢合作!qidao123.com:ToB企服之家,中国第一个企服评测及软件市场,开放入驻,技术点评得现金.
回复

使用道具 举报

登录后关闭弹窗

登录参与点评抽奖  加入IT实名职场社区
去登录
快速回复 返回顶部 返回列表