将本地网站项目部署到 CentOS 7.6 服务器是一个系统性过程,需兼顾安全性、稳定性与可维护性。以下是分步、生产就绪的推荐方案(以常见静态网站或 Python/Node.js 后端 + Nginx 为例),涵盖从环境准备到上线的完整流程:
✅ 前提条件
- 一台已安装 CentOS 7.6 的云服务器或物理机(确保
systemd、firewalld正常运行) - 本地项目已测试通过(建议使用 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_config→PermitRootLogin no→sudo 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 runserver或node 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-ip 或 http://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-nginx → sudo 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 到异地 |
| 监控 | 安装 netdata 或 prometheus + 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博客