如何将本地网站项目部署到 CentOS 7.6 服务器上?

将本地网站项目部署到 CentOS 7.6 服务器是一个系统性过程,需兼顾安全性、稳定性与可维护性。以下是分步、生产就绪的推荐方案(以常见静态网站或 Python/Node.js 后端 + Nginx 为例),涵盖从环境准备到上线的完整流程:


✅ 前提条件

  • 一台已安装 CentOS 7.6 的云服务器或物理机(确保 systemdfirewalld 正常运行)
  • 本地项目已测试通过(建议使用 Git 管理)
  • 你拥有服务器 root 或具有 sudo 权限的用户
  • 域名(可选,但强烈建议用于 HTTPS)

🛠️ 一、服务器基础配置(首次部署必做)

1. 更新系统 & 安装基础工具

sudo yum update -y
sudo yum install -y epel-release git curl wget vim htop net-tools

2. 创建部署专用用户(安全最佳实践)

sudo useradd -m -s /bin/bash deploy
sudo passwd deploy  # 设置密码(或后续配 SSH 密钥)
sudo usermod -aG wheel deploy  # 加入 sudo 组(CentOS 7 默认 wheel 可 sudo)

💡 强烈建议禁用 root SSH 登录
编辑 /etc/ssh/sshd_configPermitRootLogin nosudo systemctl restart sshd

3. 配置防火墙(开放必要端口)

sudo firewall-cmd --permanent --add-service=http
sudo firewall-cmd --permanent --add-service=https
sudo firewall-cmd --permanent --add-port=22/tcp  # SSH(如需远程管理)
# 若用 WebSocket 或其他端口(如 8000),也添加:
# sudo firewall-cmd --permanent --add-port=8000/tcp
sudo firewall-cmd --reload

📦 二、选择部署方式(按项目类型推荐)

项目类型 推荐方案 说明
纯静态网站(HTML/CSS/JS) ✅ Nginx 直接托管 最简单高效
Python Web(Flask/Django) ✅ Gunicorn + Nginx 反向X_X 生产级推荐
Node.js(Express/Nuxt) ✅ PM2 + Nginx 反向X_X 进程守护 + 负载均衡
PHP(WordPress/Laravel) ✅ PHP-FPM + Nginx 安全且性能好

⚠️ 不推荐直接用 python manage.py runservernode app.js 暴露到公网!


🌐 三、部署示例:静态网站(最简场景)

1. 上传文件(任选其一)

  • 方式 A:SCP(适合小项目)
    # 本地终端执行(替换 your-server-ip 和路径)
    scp -r ./my-website/* deploy@your-server-ip:/var/www/my-site/
  • 方式 B:Git Pull(推荐,支持版本回滚)
    # 登录服务器
    ssh deploy@your-server-ip
    sudo mkdir -p /var/www/my-site
    sudo chown -R deploy:deploy /var/www/my-site
    cd /var/www/my-site
    git clone https://github.com/yourname/my-website.git .

2. 配置 Nginx

sudo yum install -y nginx
sudo systemctl enable nginx
sudo systemctl start nginx

创建站点配置:

sudo vim /etc/nginx/conf.d/my-site.conf
server {
    listen       80;
    server_name  your-domain.com www.your-domain.com;  # 替换为你的域名或 IP
    root         /var/www/my-site;
    index        index.html;

    location / {
        try_files $uri $uri/ =404;
    }

    # 安全加固(可选)
    location ~ /.ht {
        deny all;
    }
}

检查并重载:

sudo nginx -t  # 测试配置
sudo systemctl reload nginx

✅ 访问 http://your-server-iphttp://your-domain.com 即可看到网站。


⚙️ 四、进阶部署:Python Flask 应用(带 Gunicorn + Nginx)

1. 安装 Python 环境(推荐 pyenv 或系统 Python 3.6+)

CentOS 7.6 自带 Python 2.7,需手动安装 Python 3:

sudo yum install -y gcc openssl-devel bzip2-devel libffi-devel zlib-devel
cd /tmp && wget https://www.python.org/ftp/python/3.9.18/Python-3.9.18.tgz
tar -xzf Python-3.9.18.tgz && cd Python-3.9.18
./configure --enable-optimizations && make -j$(nproc) && sudo make altinstall

2. 部署应用代码

sudo mkdir -p /opt/my-flask-app
sudo chown -R deploy:deploy /opt/my-flask-app
# 上传代码(同上:git clone 或 scp)

3. 创建虚拟环境 & 安装依赖

ssh deploy@your-server-ip
cd /opt/my-flask-app
python3.9 -m venv venv
source venv/bin/activate
pip install --upgrade pip
pip install -r requirements.txt  # 确保有 gunicorn

4. 创建 Gunicorn Systemd 服务(持久化运行)

sudo vim /etc/systemd/system/my-flask-app.service
[Unit]
Description=Gunicorn instance for my-flask-app
After=network.target

[Service]
User=deploy
Group=deploy
WorkingDirectory=/opt/my-flask-app
Environment="PATH=/opt/my-flask-app/venv/bin"
ExecStart=/opt/my-flask-app/venv/bin/gunicorn --bind 127.0.0.1:8000 --workers 3 --timeout 120 wsgi:app

[Install]
WantedBy=multi-user.target

启用服务:

sudo systemctl daemon-reload
sudo systemctl enable my-flask-app
sudo systemctl start my-flask-app
sudo systemctl status my-flask-app  # 检查是否运行

5. Nginx 反向X_X配置

sudo vim /etc/nginx/conf.d/my-flask-app.conf
server {
    listen 80;
    server_name your-domain.com;

    location / {
        proxy_pass http://127.0.0.1:8000;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
    }
}
sudo nginx -t && sudo systemctl reload nginx

✅ 应用已通过 Nginx 暴露在 80 端口。


🔐 五、关键增强项(生产必备)

项目 操作
HTTPS(免费证书) sudo yum install -y certbot python3-certbot-nginxsudo certbot --nginx -d your-domain.com(自动配置 HTTPS + 自动续期)
日志管理 Nginx 日志默认在 /var/log/nginx/;Gunicorn 日志可加 --access-logfile /var/log/myapp/access.log 参数
自动部署(CI/CD) 使用 GitHub Actions / GitLab CI 触发 ssh deploy@server 'cd /opt/app && git pull && sudo systemctl restart my-app'
备份策略 定期 tar -czf /backup/site-$(date +%F).tar.gz /var/www/my-site + rsync 到异地
监控 安装 netdataprometheus + node_exporter 实时查看 CPU/内存/网络

🧪 六、验证与排错清单

  • curl -I http://localhost → 检查 Nginx 是否响应
  • sudo journalctl -u nginx -n 50 --no-pager → 查看 Nginx 错误
  • sudo journalctl -u my-flask-app -n 50 --no-pager → 查看后端日志
  • sudo ss -tlnp | grep ':80|:8000' → 确认端口监听状态
  • ✅ 浏览器访问 → 查看开发者工具 Network 标签页状态码

📚 补充资源

  • Nginx 官方文档
  • Gunicorn 部署指南
  • Certbot 获取 HTTPS
  • CentOS 7 EOL 注意:CentOS 7 已于 2024-06-30 停止维护,建议尽快迁移到 Rocky Linux 8/9 或 AlmaLinux 8/9

如需我为你定制某类项目的详细部署脚本(例如:Django + PostgreSQL + Redis + Nginx + HTTPS 全栈部署),欢迎提供:

  • 项目技术栈(框架、数据库、是否含前端构建?)
  • 服务器配置(CPU/内存/磁盘)
  • 是否已有域名?
  • 是否需要自动化部署(如 Git Hook / GitHub Actions)?

我可以生成可一键执行的 .sh 脚本或 Ansible Playbook 👨‍💻

需要继续深化哪一部分?😊

未经允许不得转载:ECLOUD博客 » 如何将本地网站项目部署到 CentOS 7.6 服务器上?