从0到1创建一个网站

前几个月我从0到1完成了 hot-crawler 这个网站项目,它也是我个人的第一个网站,至今(2019年12月)已稳定运行了四个多月。功能虽然很简单,但是整个过程却十分的艰难。当时完全没想到开发一个网站需要做这么多事情,很多事情都是第一次做,只能遇到问题解决问题,硬着头皮上。当时对完整的开发流程不是很清楚,做的时候基本上是想到什么做什么,流程可能不完善或者不正确,但从0到1实现一个网站要做的事情基本上都做了。根据之前的经验和整理,下面按照我自己的理解,介绍一下从0到1创建一个网站的大致过程。

I. 设计阶段

这个阶段主要是构思想法、收集需求、设计功能和时间计划。

主要的工作:

  • 需求分析。
  • 原型和UI设计。
  • 系统设计。
  • 时间规划和任务划分。

产出的结果:

  • 用户需求和设计
    • 软件需求规格说明书(User/Software Requirements Specification, SRS)
    • 确定网站域名,网站名称,LOGO,Slogan。
    • 系统交互原型图。
    • UI 设计图。
  • 软件设计
    • 软件架构文档(Software Architecture Document)
    • 数据库设计文档(Database Design Document)
    • API 文档(API Documentation)
    • 软件详细设计文档(Software detailed design)
    • 开发流程规范文档
  • 过程文档(Process Documentation)
    • 项目计划,估计和时间表。(Plans, estimates, and schedules.)

What is plans, estimates, and schedules in project management?

Click to expand!

Plans: A project plan outlines the objectives, scope, deliverables, resources, and timelines of a project. It serves as a roadmap that guides the project team throughout the project lifecycle. A project plan includes various sections such as project scope, milestones, work breakdown structure (WBS), resource allocation, risk management, and communication plan.

Estimates: Project estimates involve estimating the time, effort, and cost required to complete project activities. These estimates are crucial for budgeting, resource allocation, and determining project feasibility. Estimation techniques such as expert judgment, analogous estimating, parametric estimating, and three-point estimating are commonly used to predict project durations, costs, and resource requirements.

Schedules: A project schedule is a timeline that details the start and end dates of project activities. It helps in visualizing the project’s progress and ensuring that tasks are completed in a logical sequence. Gantt charts, network diagrams (e.g., PERT/CPM), and critical path analysis are tools commonly used to create and manage project schedules. Schedules also consider dependencies between tasks, resource availability, and project constraints to ensure timely completion.

II. 代码实现阶段

这个阶段主要是根据软件需求文档、软件设计文档和开发流程规范文档进行项目代码开发。

主要的工作:

  • 配置服务器。具体包括:购买服务器,搭建项目运行环境,部署项目。
  • 配置域名。具体包括:购买域名,DNS 解析,Nginx 反向代理,HTTPS。
  • 搭建持续集成(CI/CD)。具体包括:创建 Git 仓库,添加 gitignore,搭建或购买 CI 服务,配置 Docker,配置 Jenkins。
  • 后端代码实现。具体包括:创建项目,创建数据库,配置数据源,集成第三方类库,编写单元测试,编写模块代码。
  • 前端代码实现。具体包括:构建项目,实现UI布局,实现交互动作,兼容多个终端(PC,Mobile,Tablet 等)
  • 前后端对接。

产出的结果:

  • 功能完整和可运行的前后端的代码。
  • 项目说明文档(Source Code Document)。

III. 功能测试阶段

这个阶段主要是为预发布做准备。全面的系统功能测试、bug修复、功能优化等。

主要的工作:

  • 功能测试。
  • Bug 修复。
  • 前端功能优化。如,优化样式,兼容PC端和移动端。
  • 后端功能优化。如,可配置,可扩展,和用户体验优化等。

产出的结果:

  • 软件能够达到需求文档的所有要求。

IV. 性能测试和性能优化

这个阶段主要是为发布前做准备,保证服务的高性能、高可用和安全性等。

主要的工作:

  • 性能测试(Performance Testing)
    • 负载测试(Load Testing)。测试软件系统是否达到需求文档设计的目标,譬如软件在一定时期内,最大支持多少并发用户数,软件请求出错率等,测试的主要是软件系统的性能。
    • 压力测试(Stress Testing)。测试硬件系统是否达到需求文档设计的性能目标,譬如在一定时期内,系统的 CPU 利用率,内存使用率,磁盘I/O吞吐率,网络吞吐量等,压力测试和负载测试最大的差别在于测试目的不同。
    • 容量测试(Volume Testing)。确定系统最大承受量,譬如系统最大用户数,最大存储量,最多处理的数据流量等。
  • 高性能
    • 算法实现优化。
    • JVM 优化。
    • 数据库优化。如,数据库表结构、索引和SQL优化。读写分离,分库分表。
    • 添加缓存和搜索引擎等。
    • 静态资源 CDN。
  • 高可用
    • 应用服务高可用。如,1. 详细的日志记录。2. 软件程序作为 Linux 服务,设置崩溃后可自动重启。3. DNS 负载均衡。4. Nginx 负载均衡。
    • 数据库高可用。如,数据库集群,数据备份。
    • 热部署、热更新。
    • 云监控(阿里云监控)。
  • 安全性
    • 设置系统防火墙。
    • 设置软件防火墙。
    • SSH 公钥登录。
    • 防止 SQL 注入和 XSS 攻击。
    • 防止 DDoS 攻击。

产出的结果:

  • 应用服务具备高性能、高可用和安全性等特点。

IV. 预发布和内测

这个阶段主要是小范围的推广试用,收集反馈意见,持续打磨和优化。

主要的工作:

  • 推广。
  • 收集意见。
  • 持续改进和优化。

产出的结果:

  • 软件功能完善、体验良好。

VI. 正式发布和推广

网站正式发布,全面推广。

VII. 日常维护

这个阶段的主要是潜在问题修复,用户体验优化,和功能调整等。

主要的工作:

  • 潜在问题缺陷发现和修复。
  • 优化用户体验。

产出的结果:

  • 保证应用服务的正常运行。
  • 功能持续调整和优化。

VIII. 其他

其他一些优化网站的事情。如下:

  • 埋点,数据采集和分析。统计用户行为,分析数据优化功能。

  • SEO。

References

[1] Technical Documentation in Software Development: Types, Best Practices, and Tools