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

乞丐版的全栈实践

做了一个很简陋的项目,所用的技术细节很简单,主要是梳理下全找开发的流程。

  • 一个在线留言板
  • 乞丐版的全栈开发

项目在线地址

服务器在美国,国内第一次访问可能有点慢

技术点

  • 前后端分离,通过REST API接口进行联系

  • MySQL数据表的设计,常用的SQL语句

  • 前端: Vue + Antd + axiso

  • 后端:Spring Boot + MyBatis

  • 运维:托管在DigitalOcean,使用Docker容器管理应用

  • 使用nginx部署多个域名服务,lets encrypt进行https加密

项目很简陋,所用到的技术点都是入门级的。如果有同学希望了解全栈开发的话,可以来交流一下。

开发流程

我觉得比较合适的开发流程是

  1. 设计数据的库表结构

    先把数据库设计好,很多看似复杂的业务逻辑就会显得很清晰了

  2. 根据REST规范,制定前后端的接口API

    接口自定好,就可以统一前后端的开发,制定过程中,大家基本就能掌握业务逻辑

  3. 上面两个规范写好,前后端就可以同时开发了

  4. 开发完成后交给运维人员,发布上线

内容

数据库

这个留言板主要有两个内容

  • 留言信息
  • 用户

具体的字段

  • messages: table name.

    • id: 每个message都应该有个ID,它应该是自动增长的,可以 由数据库来创建

    • content: 留言的具体内容,500个字符足够了

    • username: 用户名,应该和用户表对应

    • create_datetime: 创建时间,可以有数据库自动生成

    • update_datetime: 最近一次编辑时间

  • users: 存储用户信息

    • username
    • password
    • token:在用户第一次登陆后,我们可以给他生成一个随机字符串用来做后续的验证。token的权限一般要小于用户名 + 密码。

常用的SQL以及我放在了github

REST API

关于REST API规范本身网上已经说了很多了,我这里重点说一下文档规范。 一个好的API规范不仅要本身设计的好,文档的格式也很重要。

文档风格



标题

  • 内容一
  • 内容二

细节

关于这个API调用的一些细节

URL

对应的url (只使用path, 不包括root url)

查询字符串

可以添加哪些查询字符串

Header

有哪些合法的请求头字段

Body

请求正文的内容

Response

响应报文

Response Status
复制代码
Response Headers
复制代码
Response Body
复制代码


具体实现的细节,可以再我的github中找到。

前端后端代码开发

  • 前端的在这里

  • 后端的在这里

项目的详细分析比较繁琐,这里就直接跳过了,如果有人看的话我再来写。。

上线

我们部署一个网站,大概需要这些流程

  • 购买域名
  • 购买云主机
  • 将域名DNS解析到云主机的IP地址
  • 在云主机上部署数据库,后端应用
  • 将前端资源上传到服务器,通过nginx之类的web服务器托管
  • 为了安全,可能还要使用https加密

云主机

我使用的是Digital Ocean 的云主机,主要是基于下面的原因

  • 境内的云主机访问速度可能比较快,但是需要备案。。太麻烦了
  • AWS ,Google Cloud 需要欧美的信用卡,我没有

而Digital Ocean 不需要备案,可以使用PayPal支付,而且本身体量比较大,值得信赖。

我目前是使用的 1GB内存,5$/month。 用了一年多,感觉很稳定。

域名

这里可以直接在国内的几个厂家买。

购买完成后我们可以给我们的域名添加A记录,指向我们的服务器地址。

  • 当我们购买一个域名后,我们可以给它添加任意多个子域名
  • 一个域名可以对应多个IP地址
  • 一个IP地址可以对应多个域名
  • 一台服务器上可以部署多个网站,只要流量不是太大就行

部署应用

这是使用docker部署数据库的文章 docker-mysql

部署前端静态资源

这里我使用的是nginx

  1. 上传静态资源到服务器

    因为nginx安全限制,你上传的文件应该放在 /var/www 目录 比如我放在了 /var/www/MessageBoardVue 这个目录下

  2. 在nginx的配置文件中添加这样的字段


server {
  listen 80;
  server_name mb.bitfish.xyz;
  location / {
    root /var/www/MessageBoardVue;
    index index.html ;
 }
}
复制代码

server.listen = 80就是告诉nginx:给我监听80端口。

但是之前说过,一台服务器上可以部署多个网站,假如我部署了 examA.com 和 examB.com,它们都指向142.93.12.228这个服务器,服务器如何区分呢?

其实浏览器发起每个http请求,都会在请求头上添加一个Host字段

server.server_name = mb.bitfish.xyz 就是告诉服务器所有前往http://mb.bitfish.xyz的流量有这个配置文件来管理。 然后如果我们把我们的静态资源放在 /var/www/MessageBoardVue 这个目录下, 重启nginx服务nginx -s reload 之后,应该就可以再http://mb.bitfish.xyz上看到我们的静态资源服务。

  1. https 证书

有了lets encrtpt 之后,给网站添加https加密如此的简单。

  • 在官网上下载 CertBot,官方教程很详细,我就不赘述了
$ sudo certbot --nginx
复制代码

这一步后certbot会检查本地的nginx配置文件,自动的帮你寻找你在这台服务器上部署的域名,大概是这样的


Which names would you like to activate HTTPS for?
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
1: mb.bitfish.xyz
2: api.mb.bitfish.xyz
3: music.static.bitfish.xyz
4: travel.bitfish.xyz
复制代码

然后我们选择一个,傻瓜操作就行了。

注意的是,let encrypt 是通过验证当前服务器IP是否为该域名DNS解析的结果来判断你是不是合法用户的 也就是说

  • 假设你的域名的DNS 结果是 124.233.233.233
  • 那么必须在这台服务上使用lets encrypt,这样lets encrypt才能知道你是不是改域名的真正的拥有者

上述操作完成后,certbot就会给我们生成证书,并且智能的帮我们修改配置文件

server {
  listen 80;
  server_name mb.bitfish.xyz;
  location / {
    root /var/www/MessageBoardVue;
    index index.html ;
 }

    listen 443 ssl; # managed by Certbot
    ssl_certificate /etc/letsencrypt/live/mb.bitfish.xyz/fullchain.pem; # managed by Certbot
    ssl_certificate_key /etc/letsencrypt/live/mb.bitfish.xyz/privkey.pem; # managed by Certbot
    include /etc/letsencrypt/options-ssl-nginx.conf; # managed by Certbot
    ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; # managed by Certbot

}
复制代码

可以看到,我们的证书已近生成并被正确的配置到合适的位置. 接下来访问 mb.bitfish.xyz 就可看到结果了。

宣传

独乐乐不如众乐乐,写完一个项目,当然写个博客,和大家交流经验啦。

转载于:https://juejin.im/post/5c8ef5d4f265da68141661b1

相关文章:

  • DRF教程1-序列化
  • 直播平台建设千万不要忘记流媒体服务器的存在 ...
  • 一个iOS开发者的Flutter“历险记”
  • 12. 掌握Dart最基础的导包操作
  • 魔鬼存在于细节中:从Redshift迁移到ClickHouse后再无数据丢失
  • [2019.3.20]BZOJ4573 [Zjoi2016]大森林
  • JQuery知识总结之选择器
  • 读书之法,在循序而渐进,熟读而精思。
  • REdis CPU百分百问题分析
  • abp 关于service 服务的定义
  • ORACLE-2
  • 第一章 初识Python
  • 吴恩达机器学习系列12:反向传播算法
  • Oracle_11g
  • SegmentFault for Android 3.0 发布
  • 《剑指offer》分解让复杂问题更简单
  • 2017 前端面试准备 - 收藏集 - 掘金
  • Bytom交易说明(账户管理模式)
  • HTTP传输编码增加了传输量,只为解决这一个问题 | 实用 HTTP
  • JavaScript学习总结——原型
  • Linux编程学习笔记 | Linux IO学习[1] - 文件IO
  • Mybatis初体验
  • underscore源码剖析之整体架构
  • WinRAR存在严重的安全漏洞影响5亿用户
  • 安卓应用性能调试和优化经验分享
  • 给Prometheus造假数据的方法
  • 如何借助 NoSQL 提高 JPA 应用性能
  • 山寨一个 Promise
  • 适配iPhoneX、iPhoneXs、iPhoneXs Max、iPhoneXr 屏幕尺寸及安全区域
  • 学习ES6 变量的解构赋值
  • 一个SAP顾问在美国的这些年
  • k8s使用glusterfs实现动态持久化存储
  • 曜石科技宣布获得千万级天使轮投资,全方面布局电竞产业链 ...
  • ​Z时代时尚SUV新宠:起亚赛图斯值不值得年轻人买?
  • #NOIP 2014# day.1 T3 飞扬的小鸟 bird
  • #我与Java虚拟机的故事#连载10: 如何在阿里、腾讯、百度、及字节跳动等公司面试中脱颖而出...
  • (4) openssl rsa/pkey(查看私钥、从私钥中提取公钥、查看公钥)
  • (C语言)深入理解指针2之野指针与传值与传址与assert断言
  • (iPhone/iPad开发)在UIWebView中自定义菜单栏
  • (八)五种元启发算法(DBO、LO、SWO、COA、LSO、KOA、GRO)求解无人机路径规划MATLAB
  • (附源码)springboot助农电商系统 毕业设计 081919
  • (附源码)计算机毕业设计ssm本地美食推荐平台
  • (附源码)流浪动物保护平台的设计与实现 毕业设计 161154
  • (更新)A股上市公司华证ESG评级得分稳健性校验ESG得分年均值中位数(2009-2023年.12)
  • (论文阅读11/100)Fast R-CNN
  • (转)AS3正则:元子符,元序列,标志,数量表达符
  • (转)创业的注意事项
  • (最完美)小米手机6X的Usb调试模式在哪里打开的流程
  • * 论文笔记 【Wide Deep Learning for Recommender Systems】
  • **登录+JWT+异常处理+拦截器+ThreadLocal-开发思想与代码实现**
  • .bat批处理(三):变量声明、设置、拼接、截取
  • .NET 5.0正式发布,有什么功能特性(翻译)
  • .NET 材料检测系统崩溃分析
  • .net和jar包windows服务部署