news 2026/7/27 5:20:54

Ubuntu服务器搭建Web服务栈:MySQL+Redis+Nginx全流程

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Ubuntu服务器搭建Web服务栈:MySQL+Redis+Nginx全流程

1. 项目概述

在Linux服务器环境中搭建完整的Web服务栈是每个开发者都会遇到的基础任务。Ubuntu作为最流行的服务器操作系统之一,配合MySQL、Redis和Nginx这三大核心组件,可以构建出稳定高效的生产环境。本文将分享我在数十次环境搭建中总结出的标准化流程,包含从软件安装、配置优化到自动化备份的完整解决方案。

这个指南特别适合以下场景:

  • 刚接触Linux服务部署的新手需要清晰的步骤指引
  • 需要快速搭建标准化开发/测试环境的中级开发者
  • 希望完善现有环境备份机制的系统管理员

2. 环境准备与基础配置

2.1 系统初始化

在开始前,请确保:

  1. 使用Ubuntu 20.04/22.04 LTS版本(长期支持版更稳定)
  2. 以具有sudo权限的用户登录
  3. 完成系统更新:
    sudo apt update && sudo apt upgrade -y

重要提示:生产环境建议使用全新安装的系统,避免软件冲突。我曾遇到过已有Docker的环境导致端口冲突的情况。

2.2 防火墙配置

Ubuntu默认使用UFW防火墙,建议先放行必要端口:

sudo ufw allow 22/tcp # SSH sudo ufw allow 80/tcp # HTTP sudo ufw allow 443/tcp # HTTPS sudo ufw enable

3. MySQL部署与优化

3.1 安装MySQL 8.0

执行以下命令安装最新稳定版:

sudo apt install mysql-server -y

安装后运行安全配置向导:

sudo mysql_secure_installation

这个向导会提示你:

  1. 设置root密码强度
  2. 移除匿名用户
  3. 禁止root远程登录
  4. 移除测试数据库
  5. 立即应用权限变更

3.2 性能调优

编辑MySQL配置文件:

sudo nano /etc/mysql/mysql.conf.d/mysqld.cnf

根据服务器配置调整以下参数(以4核8G内存为例):

[mysqld] innodb_buffer_pool_size = 4G innodb_log_file_size = 256M max_connections = 200 query_cache_size = 64M

重启服务使配置生效:

sudo systemctl restart mysql

经验之谈:innodb_buffer_pool_size通常设为物理内存的50-70%,但不要超过可用内存。我曾将8G服务器设为6G导致系统频繁OOM。

4. Redis部署与安全配置

4.1 安装Redis

Ubuntu仓库中的Redis版本可能较旧,建议通过官方PPA安装:

sudo add-apt-repository ppa:redislabs/redis -y sudo apt update sudo apt install redis-server -y

4.2 安全加固

默认配置存在安全隐患,需要修改:

sudo nano /etc/redis/redis.conf

关键修改项:

  1. 绑定内网IP(如有):
    bind 127.0.0.1
  2. 设置强密码:
    requirepass your_strong_password
  3. 禁用危险命令:
    rename-command FLUSHDB "" rename-command FLUSHALL ""

重启服务:

sudo systemctl restart redis-server

5. Nginx安装与站点配置

5.1 安装Nginx

安装主程序及常用模块:

sudo apt install nginx -y

5.2 基础站点配置

创建示例站点配置:

sudo nano /etc/nginx/sites-available/example.com

典型配置模板:

server { listen 80; server_name example.com; root /var/www/html; index index.html; location / { try_files $uri $uri/ =404; } }

启用配置并测试:

sudo ln -s /etc/nginx/sites-available/example.com /etc/nginx/sites-enabled/ sudo nginx -t # 测试配置 sudo systemctl restart nginx

6. 自动化备份方案

6.1 MySQL备份脚本

创建备份目录:

mkdir -p ~/backups/mysql

编写备份脚本:

nano ~/mysql_backup.sh

脚本内容:

#!/bin/bash DATE=$(date +%Y%m%d) BACKUP_DIR="$HOME/backups/mysql" MYSQL_USER="root" MYSQL_PASSWORD="your_password" mysqldump -u$MYSQL_USER -p$MYSQL_PASSWORD --all-databases | gzip > "$BACKUP_DIR/mysql_$DATE.sql.gz" # 删除7天前的备份 find $BACKUP_DIR -type f -name "*.sql.gz" -mtime +7 -delete

6.2 Redis备份配置

Redis默认已启用RDB持久化,但建议额外备份:

nano ~/redis_backup.sh

脚本内容:

#!/bin/bash DATE=$(date +%Y%m%d) BACKUP_DIR="$HOME/backups/redis" REDIS_CLI="/usr/bin/redis-cli" $REDIS_CLI -a your_password SAVE cp /var/lib/redis/dump.rdb "$BACKUP_DIR/redis_$DATE.rdb" # 清理旧备份 find $BACKUP_DIR -type f -name "*.rdb" -mtime +7 -delete

6.3 设置定时任务

使用crontab设置每日备份:

crontab -e

添加以下内容:

0 3 * * * /bin/bash ~/mysql_backup.sh 15 3 * * * /bin/bash ~/redis_backup.sh

7. 常见问题排查

7.1 MySQL连接问题

错误现象:ERROR 2002 (HY000): Can't connect to local MySQL server

解决方案:

  1. 检查服务状态:
    sudo systemctl status mysql
  2. 查看错误日志:
    sudo tail -n 50 /var/log/mysql/error.log

7.2 Redis内存占用过高

监控内存使用:

redis-cli -a your_password info memory

解决方案:

  1. 设置最大内存限制:
    maxmemory 2gb maxmemory-policy allkeys-lru
  2. 定期执行内存优化:
    redis-cli -a your_password MEMORY PURGE

7.3 Nginx 502 Bad Gateway

可能原因:

  1. 后端服务未启动
  2. 权限问题
  3. 资源不足

排查步骤:

# 检查错误日志 sudo tail -n 50 /var/log/nginx/error.log # 检查进程连接 sudo netstat -tulnp | grep nginx

8. 安全加固建议

  1. 为MySQL创建专用应用用户而非使用root
  2. 定期轮换Redis密码
  3. 为Nginx配置TLS证书(推荐使用Let's Encrypt)
  4. 设置备份文件的严格权限:
    chmod 600 ~/backups/*
  5. 监控关键指标:
    • MySQL连接数
    • Redis内存使用
    • Nginx请求错误率

这套环境经过我在多个生产项目的验证,稳定运行最长时间达3年无故障。关键在于:

  1. 安装后的安全基线配置
  2. 合理的资源限制
  3. 可靠的备份机制
  4. 定期的维护检查

最后分享一个实用技巧:使用tmuxscreen运行长时间任务,避免SSH断开导致操作中断。对于关键操作,我习惯先写成脚本测试后再加入cron,避免直接操作导致意外。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/7/27 5:19:17

临沂本地软件外包推荐

在临沂,越来越多的中小企业开始寻求软件外包服务,但面对“需求说不清、预算控不住、交付没保障”的行业痛点,如何选到靠谱的供应商?本文不推荐任何公司,只提供一套基于行业公开标准的选型方法,并以临沂本地…

作者头像 李华
网站建设 2026/7/27 5:15:05

大模型技术在办公场景的应用与学习路径

1. 大模型技术演进与办公场景融合趋势过去一年里,AI大模型技术正以惊人的速度渗透到日常办公场景中。作为从业者,我观察到从代码生成到会议纪要,从数据分析到文档撰写,大模型正在重构传统工作流。最新发布的Agnes、书生浦语等模型…

作者头像 李华
网站建设 2026/7/27 5:14:03

2026-07-27:连接二进制片段得到的最大值。用go语言,给定两个长度为 n 的整数数组 nums1 和 nums0,其中 nums1[i] 代表第 i 个片段中 ‘1‘ 的个数,nums0[i]

2026-07-27:连接二进制片段得到的最大值。用go语言,给定两个长度为 n 的整数数组 nums1 和 nums0,其中 nums1[i] 代表第 i 个片段中 ‘1’ 的个数,nums0[i] 代表该片段中 ‘0’ 的个数。对于每个 i,我们构造一个二进制…

作者头像 李华
网站建设 2026/7/27 5:13:53

CER与PFX证书解析:命令行实战提取公钥私钥与格式转换

1. 项目概述:从证书文件到密钥操作的实战需求在数字世界的日常运维和开发工作中,我们几乎每天都会和各种数字证书打交道。无论是配置HTTPS服务器、实现API接口的双向认证,还是部署代码签名、加密通信,证书文件都是构建信任链条的基…

作者头像 李华
网站建设 2026/7/27 5:13:44

示波器-3dB带宽临界点详解|定义、公式、计算、工程用途、选型避坑攻略

专栏导读(付费专属干货) 绝大多数硬件工程师、嵌入式开发者、电子爱好者只会看示波器“100MHz/200MHz带宽”参数,却完全不懂-3dB临界点的核心意义: 1、为什么行业统一用「-3dB」作为带宽判定标准,不是-2dB、-4dB? 2、-3dB衰减到底对应多少电压、多少功率误差?能不能用…

作者头像 李华
网站建设 2026/7/27 5:13:30

VS Code配置C/C++开发环境:从编译器安装到调试实战

1. 项目概述:为什么我们需要手动配置C/C环境?如果你刚开始接触C或C编程,打开VS Code,新建一个.c文件,满怀期待地按下F5,大概率会看到一个错误弹窗,提示你找不到编译器,或者构建任务配…

作者头像 李华