news 2026/5/1 11:41:23

服务器上线前必做清单:2C4G ECS 部署实战指南

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
服务器上线前必做清单:2C4G ECS 部署实战指南

网罗开发(小红书、快手、视频号同名)

大家好,我是展菲,目前在上市企业从事人工智能项目研发管理工作,平时热衷于分享各种编程领域的软硬技能知识以及前沿技术,包括iOS、前端、Harmony OS、Java、Python等方向。在移动端开发、鸿蒙开发、物联网、嵌入式、云原生、开源等领域有深厚造诣。

图书作者:《ESP32-C3 物联网工程开发实战》
图书作者:《SwiftUI 入门,进阶与实战》
超级个体:COC上海社区主理人
特约讲师:大学讲师,谷歌亚马逊分享嘉宾
科技博主:华为HDE/HDG

我的博客内容涵盖广泛,主要分享技术教程、Bug解决方案、开发工具使用、前沿科技资讯、产品评测与使用体验。我特别关注云服务产品评测、AI 产品对比、开发板性能测试以及技术报告,同时也会提供产品优缺点分析、横向对比,并分享技术沙龙与行业大会的参会体验。我的目标是为读者提供有深度、有实用价值的技术洞察与分析。

展菲:您的前沿技术领航员
👋 大家好,我是展菲!
📱 全网搜索“展菲”,即可纵览我在各大平台的知识足迹。
📣 公众号“Swift社区”,每周定时推送干货满满的技术长文,从新兴框架的剖析到运维实战的复盘,助您技术进阶之路畅通无阻。
💬 微信端添加好友“fzhanfei”,与我直接交流,不管是项目瓶颈的求助,还是行业趋势的探讨,随时畅所欲言。
📅 最新动态:2025 年 3 月 17 日
快来加入技术社区,一起挖掘技术的无限潜能,携手迈向数字化新征程!


文章目录

    • 前言
    • 系统与安全基础配置
      • 更新系统和基础工具
      • 创建非 root 用户
      • 配置防火墙和安全组
      • 设置时区
    • 推荐部署架构
      • 推荐架构
      • 不推荐的做法
    • 组件选择
    • 一键自动化部署方案
      • 为什么选择 Docker Compose
      • 安装 Docker
      • 项目目录结构
      • Docker Compose 配置示例
      • 一键启动
    • 上线前必须做的隐藏事项
      • MySQL 独立账号
      • Python 日志切割
      • HTTPS 配置
    • 总结

前言

最近帮朋友部署一个项目到阿里云 ECS,配置是 2C4G + 1Mbps 带宽。本来以为很简单,结果踩了不少坑:防火墙没配置好被攻击、MySQL 用 root 用户导致安全问题、日志文件把磁盘占满了、时区不对导致数据时间错乱等等。

这些问题其实都是可以提前避免的,但很多人在上线前容易忽略这些细节。今天我们就来聊聊服务器上线前必须做的那些事,特别是对于 2C4G 这种配置的服务器,每一项都很关键。

系统与安全基础配置

上线前第一件事,就是做好系统的基础配置和安全设置。这些配置虽然看起来简单,但如果不做,后续会带来很多麻烦。

更新系统和基础工具

首先,我们需要更新系统到最新版本,并安装一些常用的基础工具。虽然这一步看起来可有可无,但实际上很重要。系统更新可以修复已知的安全漏洞,而基础工具在后续部署和维护中会经常用到。

sudoyum update -ysudoyuminstall-ygitvimwgetcurlunzip

yum update -y会更新所有系统包到最新版本,-y参数表示自动确认,不需要手动输入。安装的这些工具中,git用于代码拉取,vim用于编辑配置文件,wgetcurl用于下载文件,unzip用于解压文件。

创建非 root 用户

这一步非常重要,但很多人容易忽略。直接用 root 用户部署应用是非常危险的做法,一旦应用被攻击,攻击者就获得了 root 权限,可以随意操作服务器。

adduser deploypasswddeployusermod-aG wheel deploy

我们创建一个名为deploy的用户,专门用于部署和运行应用。usermod -aG wheel deploydeploy用户添加到wheel组,这样deploy用户就可以使用sudo命令来执行需要管理员权限的操作。

后续所有的部署、CI/CD 操作都应该使用deploy用户,而不是 root。这样可以大大降低安全风险。

配置防火墙和安全组

防火墙配置是安全的第一道防线,但很多人容易忽略。阿里云的安全组和服务器本身的防火墙都需要配置,这是双重保险。

阿里云安全组配置:

在阿里云控制台,我们需要配置安全组规则,至少只放行必要的端口:

  • 22(SSH):用于远程登录
  • 80(HTTP):用于 Web 服务
  • 443(HTTPS):用于加密的 Web 服务

特别要注意的是,MySQL 的 3306 端口不要对公网开放。如果需要在外部访问数据库,应该通过 SSH 隧道或者 VPN 的方式。

服务器防火墙配置:

除了安全组,我们还需要在服务器上配置防火墙:

sudosystemctlenablefirewalldsudosystemctl start firewalld firewall-cmd --permanent --add-service=http firewall-cmd --permanent --add-service=https firewall-cmd --reload

systemctl enable firewalld设置防火墙开机自启,systemctl start firewalld启动防火墙服务。然后我们添加 HTTP 和 HTTPS 服务到防火墙规则中,--permanent表示永久生效,firewall-cmd --reload重新加载防火墙规则使配置生效。

设置时区

时区设置看起来是个小问题,但实际上很重要。如果时区不对,日志时间、数据库时间、应用时间都会错乱,排查问题时会很麻烦。

timedatectl set-timezone Asia/Shanghai

设置时区为上海时区(东八区),这样所有的时间记录都会使用正确的时区。这个设置会影响系统日志、MySQL 时间、Python 应用时间等所有时间相关的功能。

推荐部署架构

对于 2C4G 的服务器,我们需要选择一个省内存、稳定、可自动化的部署架构。资源有限的情况下,架构选择很重要。

推荐架构

对于这种配置的服务器,我推荐使用以下架构:

Nginx ├── React 前端(build 后的静态文件) └── /api → Python 后端(Gunicorn / Uvicorn) MySQL(本机 or RDS)

这个架构的优势是:

  • 资源占用低:Nginx 作为反向代理,内存占用很小;前端是静态文件,不需要运行时;后端用 Gunicorn 或 Uvicorn,可以控制进程数
  • 部署简单:前端打包后直接放到 Nginx,后端用进程管理器运行
  • 易于扩展:后续如果需要,可以很容易地将 MySQL 迁移到 RDS,或者将后端扩展到多台服务器

不推荐的做法

在资源有限的情况下,有些做法是不推荐的:

  • K8s:Kubernetes 本身就需要不少资源,2C4G 的服务器跑 K8s 会很吃力
  • 微服务拆分:微服务需要更多的资源来运行多个服务实例
  • 多个 MySQL 实例:一个 MySQL 实例已经会占用不少内存,多个实例会让服务器资源紧张
  • 前端 Node 常驻运行:React 应用应该打包成静态文件,而不是用 Node 服务器运行

组件选择

选择合适的组件对于资源有限的服务器很重要。我们需要选择那些轻量级、稳定、易维护的组件。

模块方案说明
前端React build → NginxReact 应用打包成静态文件,用 Nginx 提供静态文件服务
后端FastAPI / Flask + GunicornPython 框架配合 Gunicorn 作为 WSGI 服务器
Web ServerNginx作为反向代理和静态文件服务器
数据库MySQL 8建议使用独立用户,不要用 root
HTTPSCertbot + Let’s Encrypt免费 SSL 证书,自动续期
部署Docker Compose容器化部署,易于管理和回滚

这个组合的优势是资源占用低、稳定性好、易于维护。特别是 Docker Compose,可以让整个部署过程变得非常简单。

一键自动化部署方案

对于 2C4G 的服务器,我强烈推荐使用 Docker Compose 进行一键部署。这种方式不仅简单,而且易于回滚和迁移。

为什么选择 Docker Compose

Docker Compose 的优势在于:

  • 资源占用可控:可以限制每个容器的资源使用
  • 易于回滚:只需要切换镜像版本即可
  • 易于迁移:配置文件可以轻松迁移到其他服务器
  • CI/CD 友好:可以很容易地集成到 CI/CD 流程中

安装 Docker

首先,我们需要在服务器上安装 Docker:

curl-fsSL https://get.docker.com|bashsudosystemctlenabledockersudosystemctl startdockersudousermod-aGdockerdeploy

curl -fsSL https://get.docker.com | bash使用官方脚本安装 Docker,systemctl enable docker设置 Docker 开机自启,systemctl start docker启动 Docker 服务,usermod -aG docker deploydeploy用户添加到docker组,这样deploy用户就可以不使用sudo来运行 Docker 命令。

项目目录结构

推荐的项目目录结构如下:

app/ ├── docker-compose.yml ├── nginx/ │ └── default.conf ├── backend/ │ ├── Dockerfile │ └── main.py ├── frontend/ │ ├── Dockerfile │ └── build/ └── mysql/

这个结构清晰明了,每个组件都有自己的目录,配置文件也分开管理。

Docker Compose 配置示例

下面是一个精简版的docker-compose.yml配置:

version:"3.9"services:nginx:image:nginx:stableports:-"80:80"volumes:-./nginx:/etc/nginx/conf.d-./frontend/build:/usr/share/nginx/htmldepends_on:-backendbackend:build:./backendcommand:gunicorn main:app-w 2-b 0.0.0.0:8000environment:-DB_HOST=mysqldepends_on:-mysqlmysql:image:mysql:8environment:MYSQL_ROOT_PASSWORD:rootpwdMYSQL_DATABASE:appdbvolumes:-./mysql:/var/lib/mysql

这个配置定义了三个服务:

  • nginx:使用官方 nginx 镜像,映射 80 端口,挂载 nginx 配置目录和前端构建目录
  • backend:从./backend目录构建,使用 Gunicorn 运行,设置 2 个 worker 进程
  • mysql:使用 MySQL 8 镜像,设置 root 密码和数据库名,挂载数据目录

一键启动

配置好之后,只需要一条命令就可以启动整个应用:

dockercompose up -d --build

-d参数表示后台运行,--build参数表示构建镜像。这条命令会启动所有服务,包括前端、后端和数据库。

上线前必须做的隐藏事项

除了上面这些明显的配置,还有一些隐藏但很关键的事项,如果不做,后续会带来很多问题。

MySQL 独立账号

很多人在部署时直接用 root 用户连接数据库,这是非常危险的做法。我们应该为应用创建独立的数据库用户:

CREATEUSER'app'@'%'IDENTIFIEDBY'strong_password';GRANTALLONappdb.*TO'app'@'%';FLUSHPRIVILEGES;

这样即使应用被攻击,攻击者也只能访问应用数据库,而不能访问其他数据库或执行系统级操作。

Python 日志切割

Python 应用的日志如果不做切割,很快就会把磁盘占满。2C4G 的服务器通常只有 20GB 或 40GB 的磁盘,日志文件很容易占满。

我们可以使用logrotate来配置日志切割:

sudovim/etc/logrotate.d/python-app

添加以下配置:

/path/to/app/logs/*.log { daily rotate 7 compress delaycompress missingok notifempty create 0644 deploy deploy }

这个配置表示每天轮转日志,保留 7 天的日志,压缩旧日志,如果日志文件不存在也不报错。

HTTPS 配置

HTTPS 不是可选项,而是必须项。现在浏览器对 HTTP 网站会有安全警告,而且很多功能(如地理位置 API)只能在 HTTPS 下使用。

使用 Certbot 可以很容易地配置 HTTPS:

sudoyuminstall-y certbot python3-certbot-nginxsudocertbot --nginx

Certbot 会自动配置 Nginx 的 SSL 证书,并且会自动续期。Let’s Encrypt 的证书是免费的,每 90 天自动续期一次。

总结

服务器上线前的准备工作虽然繁琐,但非常重要。系统更新、用户创建、防火墙配置、时区设置这些基础配置,以及 MySQL 独立账号、日志切割、HTTPS 配置这些隐藏事项,都是必须做的。

对于 2C4G 这种配置的服务器,选择合适的架构和组件也很重要。使用 Docker Compose 可以大大简化部署流程,而且易于管理和回滚。

做好这些准备工作,可以避免很多后续的问题,让服务器运行更加稳定可靠。

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

内存检测方法

内存检测 导航 文章目录内存检测导航测试前的准备MemTest64TestMem5**Anta777 Extreme配置****MT配置**开始测试并观察结果正常结果常见问题及处理测试中蓝屏/死机长时间无响应测试前的准备 关闭后台程序:避免其他软件干扰测试结果确保散热良好:内存和…

作者头像 李华
网站建设 2026/5/1 7:10:51

Cython:为 Python 注入 C 的速度

Cython 是 Python 生态中一个强大而实用的工具,它允许开发者在保持 Python 代码可读性的同时,获得接近 C 语言的执行性能。本文将系统介绍 Cython 的基本概念、安装方法、使用示例,并澄清其与 CPython 的关系,同时探讨两种语法风格、性能分析手段及优化策略。 一、什么是 …

作者头像 李华
网站建设 2026/5/1 4:38:08

DeepSeek-AI突破传统视觉:像人类一样“聪明阅读“图像的AI模型

这项由DeepSeek-AI团队开展的研究发表于2025年1月,相关技术报告以arXiv:2601.20552的编号发布。对于想要深入了解技术细节的读者,可以通过该编号在学术数据库中查找完整论文。 当你拿起一本书开始阅读时,你的眼睛并不会机械地从左上角扫描到右…

作者头像 李华
网站建设 2026/5/1 5:00:08

Windows打印机文件PrintConfig.dll出现错误 免费下载方法分享

在使用电脑系统时经常会出现丢失找不到某些文件的情况,由于很多常用软件都是采用 Microsoft Visual Studio 编写的,所以这类软件的运行需要依赖微软Visual C运行库,比如像 QQ、迅雷、Adobe 软件等等,如果没有安装VC运行库或者安装…

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

Next.js第二十四章(Prisma)

ORM框架(Object-Relational Mapping) 在传统开发模式中,我们需要把数据存储到数据库,所以需要通过SQL语句来进行操作,例如查询 新增 修改 删除等操作,但是SQL语句太多了,还比较繁琐,所以就有了ORM框架。 …

作者头像 李华
网站建设 2026/5/1 5:00:54

定制专属大模型只需打开浏览器!零代码微调全攻略

本文详细介绍了使用LLaMA-Factory Online平台进行大模型微调的全流程,涵盖GPU算力选型、部署方案对比、微调方法选择、安全评估、计费模式及存储优化策略。通过可视化界面,用户无需编写代码即可完成上百种预训练模型的微调,大幅降低技术门槛&…

作者头像 李华