当前位置: 首页 > news >正文

平面设计教程网站python基础教程第二版

平面设计教程网站,python基础教程第二版,福田网站建设哪家便宜,江苏建设工程招标网站项目背景 本文记录了一个基础用户注册与登录系统在阿里云ECS上的部署过程。这是一个典型的前后端分离架构的入门级项目,包含了用户认证的核心功能。 系统架构说明 项目定位:基础用户管理系统(非复杂业务应用) 技术组成&#xff1a…

项目背景

本文记录了一个基础用户注册与登录系统在阿里云ECS上的部署过程。这是一个典型的前后端分离架构的入门级项目,包含了用户认证的核心功能。

系统架构说明

项目定位:基础用户管理系统(非复杂业务应用)

技术组成

  • 前端:React 18 + TypeScript(单页应用)
  • 后端:FastAPI + Python(RESTful API)
  • 数据库:SQLite(轻量级文件数据库)
  • Web服务器:Nginx(静态文件服务 + API反向代理)
  • 部署环境:阿里云ECS Windows Server

核心功能

  • 用户注册(用户名、邮箱、密码)
  • 用户登录(JWT Token认证)
  • 密码重置(邮件验证)
  • 基础的用户信息管理

标准部署流程(原计划workflow)

按照常规的全栈应用部署思路,我们原本计划的标准流程如下:

第1步:环境准备

  • 安装Python 3.8+、Node.js 16+
  • 安装Nginx for Windows
  • 创建项目目录结构

第2步:后端部署

  • 创建Python虚拟环境
  • 安装FastAPI及相关依赖
  • 配置数据库连接
  • 启动后端API服务

第3步:前端构建与部署

  • 安装前端依赖
  • 执行生产环境构建
  • 将构建产物部署到Nginx

第4步:Nginx配置

  • 配置静态文件服务
  • 配置API反向代理
  • 启动Nginx服务

第5步:域名与SSL配置

  • 配置域名解析
  • 安装SSL证书
  • 启用HTTPS访问

第6步:功能验证

  • 测试前端页面访问
  • 测试用户注册功能
  • 测试用户登录功能
  • 验证API接口正常工作

实际遇到的问题与解决过程

然而,实际部署过程中在多个环节都遇到了预料之外的问题:

问题1:第1-2步 - 基础环境看似正常,API无法外部访问

表现

# 本地测试正常
curl http://127.0.0.1:8000 ✅# 外部访问失败
curl http://xxx.xxx.xxx.xxx:8000 ❌ 连接被拒绝

调试过程

  • 检查后端服务状态 → 正常运行
  • 检查Windows防火墙 → 已关闭
  • 检查Nginx配置 → 语法正确
  • 检查代码CORS配置 → 已添加对应域名

根本原因:阿里云安全组未开放8000端口

解决方案
修改位置:阿里云控制台 → ECS管理 → 安全组规则
在阿里云控制台添加安全组入站规则:

  • 协议:TCP
  • 端口:8000/8000
  • 授权对象:0.0.0.0/0
  • 描述:Backend API Port
操作路径:
1. 登录阿里云控制台
2. 进入ECS实例管理
3. 点击"安全组" → "配置规则"
4. 添加入站规则 → 自定义TCP → 端口8000

经验教训:云服务器的网络访问控制分为两层:操作系统防火墙 + 云平台安全组,缺一不可。

问题2:第4步 - Nginx代理配置后仍无法正常访问

表现

  • 前端页面可以加载
  • API调用返回502 Bad Gateway
  • Nginx错误日志显示upstream连接被拒绝

调试过程

  • 检查Nginx代理配置语法 → 正确
  • 检查后端服务端口监听 → 正常
  • 尝试直接访问后端API → 成功

根本原因:Nginx配置的proxy_pass协议不匹配

  • Nginx配置:proxy_pass http://127.0.0.1:8000
  • 后端实际运行:https://127.0.0.1:8000(因为检测到SSL证书自动启用HTTPS)

解决方案
修改文件C:\nginx\conf\nginx.conf

方案1:更新Nginx配置匹配后端HTTPS协议

location /api/ {proxy_pass https://127.0.0.1:8000/api/;proxy_ssl_verify off;  # 跳过自签名证书验证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;
}

方案2:重命名SSL证书文件强制后端使用HTTP模式(推荐用于IP访问)
操作性质:文件重命名操作(非修改文件内容)
操作位置C:\webproject\backend\ 目录下的SSL证书文件

# 在命令行中执行以下重命名操作
cd C:\webproject\backend
ren domain.crt domain.crt.backup
ren domain.key domain.key.backup
# 重启后端服务,程序检测不到证书文件后自动切换到HTTP模式

验证修改

# 重新加载Nginx配置
cd C:\nginx
nginx.exe -s reload# 测试代理是否正常
curl http://xxx.xxx.xxx.xxx/api/users/me

经验教训:代理配置必须与上游服务的实际协议保持一致。

问题3:第5步 - SSL证书域名不匹配导致前端无法调用API

表现

POST https://xxx.xxx.xxx.xxx:8000/api/users/register 
net::ERR_CERT_COMMON_NAME_INVALID

调试过程

  • 检查SSL证书安装 → 正确
  • 检查证书有效期 → 正常
  • 测试HTTPS访问 → 浏览器报证书错误

根本原因:SSL证书是为特定域名签发的,但部署时使用IP地址访问

解决方案
操作性质:文件重命名操作(强制后端使用HTTP模式)

由于是IP访问场景,采用HTTP模式部署:

# 操作位置:C:\webproject\backend\ 目录
# 重命名SSL证书文件,使后端程序检测不到证书后自动切换到HTTP
cd C:\webproject\backend
ren domain.crt domain.crt.backup
ren domain.key domain.key.backup
ren cert.pem cert.pem.backup   # 如果存在的话
ren key.pem key.pem.backup     # 如果存在的话

配置文件修改C:\webproject\backend\main.py
确保后端程序有正确的SSL检测逻辑:

import os
import uvicornif __name__ == "__main__":# 检查SSL证书文件是否存在ssl_keyfile = "domain.key" if os.path.exists("domain.key") else Nonessl_certfile = "domain.crt" if os.path.exists("domain.crt") else None# 如果没有证书文件,自动使用HTTP模式uvicorn.run("main:app",host="0.0.0.0",  # 监听所有网络接口port=8000,reload=True,ssl_keyfile=ssl_keyfile,ssl_certfile=ssl_certfile)

验证修改

# 重启后端服务
cd C:\webproject\backend
python main.py# 应该看到启动信息显示HTTP模式:
# INFO: Uvicorn running on http://0.0.0.0:8000

经验教训:IP直接访问与域名访问在SSL证书使用上完全不同,需要提前规划。

问题4:第6步 - 前端硬编码域名导致API调用失败

表现

  • 前端页面正常加载
  • 用户注册时出现CORS错误
  • 浏览器Network面板显示请求发往错误的地址

调试过程

  • 检查后端CORS配置 → 已添加当前IP
  • 检查Nginx代理 → 配置正确
  • 查看前端网络请求 → 发现调用了硬编码的域名

根本原因:前端代码中API基础URL硬编码为开发环境的域名

解决方案
修改文件C:\webproject\frontend\src\services\userService.ts

// 修改前(硬编码开发环境地址)
const API_BASE_URL = 'https://yourdomain.com:8000/api/users';// 修改后(使用实际部署IP)
const API_BASE_URL = 'http://xxx.xxx.xxx.xxx:8000/api/users';

同时修改文件C:\webproject\backend\main.py (更新CORS配置)

from fastapi.middleware.cors import CORSMiddlewareapp.add_middleware(CORSMiddleware,allow_origins=["http://xxx.xxx.xxx.xxx",      # 当前服务器IP"http://xxx.xxx.xxx.xxx:80",   # HTTP端口"http://localhost:3000",       # 开发环境"http://localhost:5173"        # Vite开发服务器],allow_credentials=True,allow_methods=["*"],allow_headers=["*"],
)

重新构建前端

# 在 C:\webproject\frontend\ 目录下执行
npm run build# 验证构建产物
dir dist\
# 确认index.html和assets目录已更新

验证修改

# 浏览器访问前端,打开开发者工具
# 应该看到控制台显示:
# 当前使用的API基础URL: http://xxx.xxx.xxx.xxx:8000/api/users

经验教训:前后端分离项目必须做好环境变量管理,避免硬编码配置。

优化后的部署流程

基于以上踩坑经验,总结出更可靠的部署流程:

Phase 1:基础设施检查(新增)

  1. 网络连通性验证

    • 确认云服务商安全组规则已正确配置
    • 验证所需端口(80、443、8000)的外部可访问性
    • 测试本地防火墙设置
  2. 访问方式决策

    • 明确是使用域名还是IP访问
    • 确定HTTP还是HTTPS协议
    • 准备对应的SSL证书(如需要)

Phase 2:后端部署与验证

  1. 安装Python环境和依赖
  2. 配置后端监听所有网络接口(0.0.0.0)
  3. 重要:先进行外部访问测试
  4. 确认API接口可以通过外部IP正常访问

Phase 3:前端配置与构建

  1. 检查并更新API配置为实际部署地址
  2. 配置CORS白名单包含部署环境地址
  3. 执行生产环境构建
  4. 重要:验证构建产物中的API地址正确

Phase 4:Nginx集成与代理

  1. 配置静态文件服务
  2. 根据后端实际协议配置反向代理
  3. 测试前端页面和API代理的完整链路

Phase 5:端到端功能验证

  1. 完整的用户注册流程测试
  2. 用户登录功能验证
  3. API接口全面测试

部署经验总结与建议

关键检查清单

部署前必做

  • 云平台安全组规则配置检查
  • 确定访问方式(IP vs 域名)和协议(HTTP vs HTTPS)
  • 前端API配置环境变量化改造
  • 后端CORS配置环境适配

部署中必测

  • 每个服务的外部可访问性独立验证
  • 协议匹配性检查(HTTP vs HTTPS)
  • 跨域配置有效性验证

部署后必验

  • 完整业务流程端到端测试
  • 错误日志监控配置
  • 服务自动重启机制设置

避坑指南

  1. 基础设施优先原则

    • 网络层配置必须在应用层配置之前完成
    • 先确保基础连通性,再处理业务逻辑
  2. 协议一致性原则

    • 前端、后端、代理服务器的协议配置必须保持一致
    • HTTP/HTTPS混用是部署失败的高频原因
  3. 环境配置外部化原则

    • 所有环境相关配置(API地址、域名等)都应可配置化
    • 避免硬编码,便于多环境部署
  4. 分层验证原则

    • 每完成一层配置立即进行验证
    • 问题越早发现,排查成本越低

适用场景

本文的部署经验特别适用于:

  • 技术栈:React + FastAPI + Nginx的前后端分离项目
  • 部署环境:阿里云ECS Windows Server
  • 项目规模:中小型应用,单服务器部署
  • SSL需求:IP直接访问场景

对于其他技术栈或部署环境,核心的排查思路和检查原则同样适用。

结语

用户注册登录系统虽然功能简单,但部署过程涉及的技术环节众多。从这次部署经验可以看出,基础设施配置往往比应用代码问题更难排查,但影响更大

建议在后续类似项目中:

  1. 制定标准化的部署前检查清单
  2. 建立分层验证的部署流程
  3. 重视环境配置的管理和标准化
  4. 建立完善的日志和监控体系

希望这些实战经验能够帮助其他开发者在部署类似系统时少走弯路,更快地完成从开发到生产的交付过程。


http://www.dtcms.com/a/421051.html

相关文章:

  • 网站制作费用要多少钱新北区城乡建设局网站
  • 中企动力做网站一次性付款程序开发是什么工作
  • 太仓智能网站建设wordpress如何显示图片
  • 用自己网站做邮箱域名行业网站
  • MySQL-黑马程序员
  • 昆明响应式网站网站开发技术笔记
  • wordpress 即时站内搜索如何做介绍监控公司的网站
  • 捷信做单官方网站商丘市做1企业网站的公司
  • 网站设计超链接怎么做用ip访问没有备案的网站
  • 寻花问柳一家专注做男人喜爱的网站wordpress自动缩进
  • 从UI到UE:高端网站设计如何提升企业转化率
  • 网站运营编辑建设外卖网站需要哪些资质
  • 可以建设一个网站这几年做啥网站能致富
  • 影楼网站模板厦门跨境建站平台
  • 怎么注册网站域名备案网站公司谁跟客户客户沟通
  • 网站建设方案应该怎么做帮齐家网做的网站
  • 给你一个网站怎么做wordpress 抓取微信
  • 南京app网站开发公司wordpress转emlog博客
  • 网站开发 项目内容程序员外包接单
  • 建什么网站容易挣钱网页代码模板源码
  • 怎样自己做一个网站网络推广外包公司一般在哪里招聘
  • 企业网站建设销售前景python的网站开发
  • 建设网站费用记什么科目系统开发费
  • 南宁公司网站设计哈尔滨专业网站建设
  • 做自己的网站需要会编程吗江苏网站建设官网
  • 有什么网站是可以做动态图的企业网站建设绪论
  • 3d建模网站网页制作工具中文版
  • 沈阳网站建设技术公司怎么做监控网站
  • 建企业网站 硬件网站建设哪里培训
  • 望城区建设局网站做网站的做网站麻烦吗