在 Linux 服务器上部署企业官方网站是一个标准化但需兼顾安全、性能与可维护性的工程任务。以下是生产环境推荐的完整部署流程(以 Ubuntu/Debian 或 CentOS/RHEL 为例,以 Nginx + HTTPS + 静态网站/或轻量动态站为基准),涵盖从准备到上线运维的关键步骤:
✅ 一、前期准备与评估
-
明确网站类型
- ✅ 静态官网(HTML/CSS/JS):推荐 Nginx + CDN + 自动化部署(如 GitHub Actions)
- ✅ 动态官网(如 WordPress、Vue SPA + 后端 API、或基于 Node.js/Python 的 CMS):需额外配置运行时环境
本文以「静态官网 + 可选简单后端表单」为通用场景,兼顾扩展性
-
服务器要求(最低建议)
- OS:Ubuntu 22.04 LTS(推荐)或 CentOS Stream 9
- CPU:1核 | 内存:1GB+ | 磁盘:20GB SSD(含备份空间)
- 域名:已注册并解析至服务器公网 IP(如
www.example.com→203.0.113.10)
✅ 二、服务器基础配置(安全加固)
# 1. 更新系统 & 安装基础工具
sudo apt update && sudo apt upgrade -y # Ubuntu/Debian
# 或:sudo dnf update -y # RHEL/CentOS
sudo apt install -y curl wget git nginx ufw certbot python3-certbot-nginx
# 2. 创建非 root 部署用户(禁止密码登录,仅密钥)
sudo adduser --disabled-password --gecos "" deploy
sudo usermod -aG sudo deploy
sudo su - deploy -c "mkdir -p ~/.ssh && chmod 700 ~/.ssh"
# 将你的公钥写入 /home/deploy/.ssh/authorized_keys,并设置权限:
sudo chmod 600 /home/deploy/.ssh/authorized_keys
sudo chown -R deploy:deploy /home/deploy/.ssh
# 3. 配置防火墙(UFW)
sudo ufw allow OpenSSH
sudo ufw allow 'Nginx Full' # 开放 80/443
sudo ufw enable
# 4. 禁用 root 远程登录(编辑 /etc/ssh/sshd_config)
PermitRootLogin no
PasswordAuthentication no
sudo systemctl restart sshd
✅ 三、部署网站文件(推荐方式:Git 钩子 或 CI/CD)
▶ 方式 A:手动部署(适合小团队/初期)
# 在服务器创建网站根目录
sudo mkdir -p /var/www/example.com/html
sudo chown -R $USER:$USER /var/www/example.com/html
sudo chmod -R 755 /var/www/example.com
# 上传文件(本地执行):
scp -r ./dist/* deploy@your-server-ip:/var/www/example.com/html/
▶ 方式 B:自动化部署(推荐 ✅)
- GitHub/GitLab 仓库存放源码(如
src/+build.sh) - 使用 GitHub Actions 构建静态文件并推送到服务器:
# .github/workflows/deploy.yml name: Deploy to Production on: push: branches: [main] jobs: deploy: runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 - name: Build (e.g., for Vue/React) run: | npm ci npm run build - name: Deploy via SSH uses: appleboy/scp-action@v0.1.7 with: host: ${{ secrets.HOST }} username: ${{ secrets.USER }} key: ${{ secrets.KEY }} source: "dist/**" target: "/var/www/example.com/html/"
💡 提示:生产环境建议使用
rsync(增量同步)或git pull+ webhook(需配置免密 git 用户)。
✅ 四、配置 Web 服务器(Nginx)
# 1. 创建站点配置
sudo nano /etc/nginx/sites-available/example.com
server {
listen 80;
listen [::]:80;
server_name www.example.com example.com;
# 强制 HTTPS 重定向
return 301 https://$server_name$request_uri;
}
server {
listen 443 ssl http2;
listen [::]:443 ssl http2;
server_name www.example.com example.com;
root /var/www/example.com/html;
index index.html index.htm;
# 静态资源缓存优化
location / {
try_files $uri $uri/ =404;
expires 1h;
add_header Cache-Control "public, immutable";
}
# 防止敏感文件被访问
location ~ /.ht {
deny all;
}
# SSL 配置(由 Certbot 自动填充)
ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem;
include /etc/letsencrypt/options-ssl-nginx.conf;
ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem;
}
# 2. 启用站点 & 测试配置
sudo ln -sf /etc/nginx/sites-available/example.com /etc/nginx/sites-enabled/
sudo nginx -t && sudo systemctl reload nginx
✅ 五、配置 HTTPS(免费 Let’s Encrypt)
# 自动获取并配置证书(需域名已解析!)
sudo certbot --nginx -d example.com -d www.example.com
# 自动续期(Certbot 已配置 systemd timer,验证是否启用):
sudo systemctl list-timers | grep certbot
# 手动测试续期(建议每月检查):
sudo certbot renew --dry-run
🔐 安全增强:在
/etc/letsencrypt/options-ssl-nginx.conf中确保启用现代 TLS(TLSv1.2+)、HSTS、OCSP Stapling。
✅ 六、可选增强功能
| 功能 | 实现方式 |
|---|---|
| CDN 提速 | 接入 Cloudflare(免费版):DNS 解析指向 CF,开启X_X(橙色云朵),自动 HTTPS + DDoS 防护 |
| 联系表单后端 | 使用轻量服务如 Formspree(前端 POST)或自建 Python Flask 微服务(监听 /api/contact) |
| 访问日志分析 | sudo tail -f /var/log/nginx/example.com-access.log + 配合 GoAccess 实时分析 |
| 自动备份 | 每日压缩 /var/www/example.com + 数据库(如有)→ 上传至 AWS S3 / 阿里云 OSS(用 rclone) |
| 监控告警 | 安装 netdata 或 Prometheus + Node Exporter,监控 CPU/内存/Nginx 状态 |
✅ 七、上线后必做检查清单 ✅
- [ ] ✅ 域名
https://www.example.com正常访问,无混合内容警告 - [ ] ✅
curl -I https://example.com返回HTTP/2 200+Strict-Transport-Security头 - [ ] ✅ 移动端适配(Chrome DevTools → Device Toolbar)
- [ ] ✅ Lighthouse 审计(性能 ≥80,SEO ≥90,无障碍 ≥95)
- [ ] ✅ robots.txt、sitemap.xml 已部署且可访问
- [ ] ✅ Google Search Console 已提交并验证所有权
- [ ] ✅ 设置 404 页面(在 Nginx 中
error_page 404 /404.html;)
🚫 常见陷阱规避
- ❌ 不要直接用
root用户运行 Nginx 或部署代码 - ❌ 不要关闭防火墙或开放
22端口给全网(建议限制 IP) - ❌ 不要在生产环境使用 HTTP(搜索引擎降权 + 用户信任受损)
- ❌ 不要将
.git目录暴露在网站根目录下(Nginx 默认禁止,但仍需检查) - ❌ 不要忽略
X-Frame-Options/Content-Security-Policy等安全头(可用 securityheaders.com 扫描)
📚 附:一键脚本(简化初学者部署)
# 保存为 deploy-site.sh(运行前修改 DOMAIN 变量)
DOMAIN="example.com"
sudo apt update && apt install -y nginx git
sudo rm -rf /var/www/$DOMAIN
sudo mkdir -p /var/www/$DOMAIN/html
sudo chown -R $USER:$USER /var/www/$DOMAIN
git clone https://github.com/your-org/your-website.git /tmp/site &&
cp -r /tmp/site/dist/* /var/www/$DOMAIN/html/ &&
rm -rf /tmp/site
# 自动生成 Nginx 配置(HTTP only)
sudo tee /etc/nginx/sites-available/$DOMAIN > /dev/null <<EOF
server { listen 80; server_name $DOMAIN www.$DOMAIN; root /var/www/$DOMAIN/html; index index.html; }
EOF
sudo ln -sf /etc/nginx/sites-available/$DOMAIN /etc/nginx/sites-enabled/
sudo nginx -t && sudo systemctl reload nginx
echo "✅ HTTP site deployed! Run 'sudo certbot --nginx -d $DOMAIN -d www.$DOMAIN' for HTTPS."
如需我为你定制以下任一场景,欢迎补充细节:
- 🌐 WordPress 企业官网(含 MySQL + PHP-FPM 优化)
- ⚡ Vue/React SPA + Express 后端(Docker Compose 部署)
- 🐳 全容器化方案(Nginx + Node.js + PostgreSQL + Traefik)
- 📊 高可用架构(多服务器 + 负载均衡 + 自动伸缩)
只需告诉我你的技术栈和需求,我可以提供对应完整配置文件与部署脚本 👇
CLOUD云枢