Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >不务正业,捣鼓了一个破网站,全过程记录

不务正业,捣鼓了一个破网站,全过程记录

作者头像
IOT物联网小镇
发布于 2022-09-26 08:09:18
发布于 2022-09-26 08:09:18
40400
代码可运行
举报
文章被收录于专栏:IOT物联网小镇IOT物联网小镇
运行总次数:0
代码可运行

作 者:道哥,10+年嵌入式开发老兵,专注于:C/C++、嵌入式、Linux

目录

  • 为什么会有这个网站
  • 预览几个页面
  • 网站搭建过程
    • 1. 服务器
    • 2. 域名
    • 3. html + js + css
    • 4. 图片转换
    • 5. 安装 web 服务器
    • 6. 站点部署
    • 7. 使用图床
    • 8. 使用 CDN 加速
  • 总结

别人的经验,我们的阶梯!

这篇文章没有什么关于嵌入式的干货,仅仅是详细记录一下前段时间捣鼓的一个静态的个人网站。

最近都没有想到什么好的文章方向,下一阶段想把之前对Lua语言的学习心得总结一下,实现一个基于插件机制的物联网网关。

或者再稍微往工业领域上走一些,实现一个可以二次开发的工业网关。

目前只是有这个模糊的想法,具体做成什么样子还有待更详细的计划。

写这个网关的目的有两个:

  1. 通过Lua语言来深入的理解一门【语言】,而不仅仅是使用一门语言。
  2. 实现一个基本上可以在生产环节可用的代码模型。

这两个目的基本上符合我的定位:让有意思的事情变得更有意义。

言归正传,回到这篇文章的主题:从头开始,一步一步搭建一个静态的个人网站。

为什么会有这个网站

作为一个嵌入式软件开发者来说,搭一个网站有点是不务正业的。

但是作为一名广义上的程序员,又经常对互联网领域的一些技术心生向往,于是就有了这个破网站。

最主要的初衷是:

在工作的过程中,经常需要参考一些常用的工具,比如:

  1. 查找ASCII码;
  2. 查询 shell 指令;
  3. 时间戳转换;
  4. 格式化 Json/xml 等文档;
  5. 。。。

每次在遇到上面这些需求时,总是需要去麻烦搜索引擎;即使把一些工具站点保存在收藏夹中,还需要按照分类区点击、打开。

所以我就想:是否可以写一个简单的、静态的页面,把自己经常使用的工具、链接都放进去,每次需要使用的时候,就打开这个页面就可以了。

换句话说,这个网站的最大作用就是:工具导航。

市面上也有很多这样的工具导航网站的。

后来发现,我也会经常去翻一下自己写的文章,于是就把所有的文章进行分类,然后也放到网站上。

于是,我就开始用三脚猫的web技术捣鼓这个网站...

我们知道,现在已经有很多现成的一键建站工具了,就像黑盒测试一下,我们只需要把自己的资料按照指定的格式、流程输入进去,一个漂亮的页面就立刻出现在面前。

但是作为一名软件开发者,还是希望能够偷窥一下这里面的一些细节。

在互联网领域,我也是一名门外汉。所以就抛弃了很多现代的、方便的工具,从最基本的html、javascript、css开始,一步一个脚印的把一个静态的个人网站给攒起来。

如果要部署一个动态网站,那需要掌握的东西就多了去了:java、jsp、maven、mysql、mybatis、spring那一套。

当然,为了避免最后的结果太难看,我也充分地“借鉴”了bootstrap前端开发框架,因为它简洁、直观、强悍,并且提供了很多免费的、漂亮的主题框架。

预览几个页面

网站的缺陷

在贴出页面之前,先说一下几个缺点:

  1. 图片太多,导致加载的速度太慢。

我已经把所有的图片放在七牛的图床上了,也启用了CDN节点来缓存页面,但是其中有几个大图片影响了加载速度。

下面是PageSpeed Insights对网站的测试结果:

从测试结果中可以看到,主要还是图片惹的祸。

我已经把所有的图片换成.webp格式了,但是其中几张大的图片影响了加载速度。我也不准备优化了,因为下面第2个原因。

  1. 添加新的内容时,操作步骤太多。

前文说过,这个网站的主要目的还是自用,所以会经常添加新的内容,比如:看到了特别棒的网站,需要把链接添加进去。

由于在网站导航布局中,为了美化一下,使用一个小图片放在站点上。

因此每次添加时,需要下面几个步骤才能完成:

  1. 对目标网站进行截图;
  2. png格式的图片转成 .webp 格式;
  3. 把图片传入到七牛的图床上(需要登录、打开目标位置、选图片、上传);
  4. 修改静态的html页面;
  5. 上传到web服务器;
  6. 更新CDN缓存节点内容;

以上这个步骤想想都觉得很烦,而且无法用自动化的脚本来实现。

基于以上这些原因,后面会重新部署一下,还是以实用主义为主。

不管怎样,这里还是把目前网站的页面贴几张截图,下个月可能就被撤掉了,以后也能偶尔回忆一下~~

网站搭建过程

1. 服务器

如果把站点部署在公网上,肯定需要买一个服务器。

国内的话就那么三家,选择便宜、文档、使用人数多的买就行了。

我使用的服务器是之前一个项目中用来测试MQTT性能的,后来废弃不用了,第一年费用不到一百元。

购买服务器的时候,需要选择操作系统,这里使用的是Ubuntu18.04

2. 域名

为了便于记忆,最好注册一个域名。

现在的域名很便宜,普通的域名大概30元/年,主要就是域名备案需要花一些时间。

现在备案方便多了,直接在手机上就可以完成。

很久以前的备案,还需要邮寄一块背景幕布,专门用来拍照用。

域名备案完成之后,就可以绑定购买的服务器IP地址了,也就是域名解析

顺便把80端口也打开,因为下面需要通过这个端口来访问站点。

3. html + js + css

因为目标是一个静态网站,所以基本上粗略的掌握上面这三部分的知识点就足够了。

另外,为了美化一下界面,使用了bootstrap这个前端框架,而且它还提供了很多漂亮的模板。

于是,在攒的过程中,我就把每一个模板中被我使用的部分摘抄出来,组装在一起,形成了最后的界面。

下面这张图是文件结构:

在写代码的时候,使用的软件是WebStorm,我觉得挺好用!

4. 图片转换

很多网站使用的图片都是webp格式,它的图像压缩算法比较好,有更小的文件体积,而且保持很高的图片质量,支持Alpha透明以及动画等特点。

这里主要贴一下如何是用谷歌转换工具,批量的把png格式的图片转换成webp格式。

以下步骤是在MAC下操作

(1) 下载libwebp的库

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
brew install webp

(2) 下载转换工具,解压

libwebp-0.6.0-mac-10.12.tar.gz

下载地址:https://storage.googleapis.com/downloads.webmproject.org/releases/webp/index.html

(3) 转换单张图片

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
./cwebp -lossless 输入图像路径 -o 输出图像路径

(4) 批量转换多张图片

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
#!/bin/bash

CMD=/<绝对路径>/libwebp-0.6.0-mac-10.12/bin/cwebp

for file in  *.png
do
${CMD} -lossless "$file" -o "${file%.*}.webp"
done
5. 安装 web 服务器

可选的web服务器有很多,常用的有tomcatapachenginx,当然还有很多其它的选择,都有各自的特点。

感兴趣的朋友可以去搜一下它们各自使用的场景,我最后选择的时nginx,安装命令很简单:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
sudo apt-get install nginx

安装好的文件位置:

/usr/sbin/nginx:主程序 /etc/nginx: 配置文件 /usr/share/nginx:静态文件 /var/log/nginx: 日志

当然,如果要更清楚 Nginx的配置项放在什么地方,可以打开文件/etc/nginx/nginx.conf 看一下。

如果想手动安装的话,步骤如下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
sudo apt-get install libpcre3 libpcre3-dev
apt-get install openssl
apt-get install zlib1g-dev
wget http://nginx.org/download/nginx-1.11.3.tar.gz
cd nginx-1.11.3/
./configure
make
make install

启动、停止服务的相关命令:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
sudo service nginx {start|stop|restart|reload|force-reload|status|configtest|rotate|upgrade}

在启动nginx之后,就可以在浏览器中测试一下安装是否成功,如果一切顺利的话,可以看到nginx的默认页面。

6. 站点部署

最简单的操作,就是直接把本地写好的站点代码直接推送到/var/www/html目录下即可。

为了更灵活的部署(比如:在一个服务器上部署多个站点),最好创建站点独立的目录。

nginx的配置文件位于:/etc/nginx,如下所示:

比较重要的是目录sites-availablesites-enabled

目录中包括:

请忽略这里的 https,那是为了测试 ssl 访问而设置的。

配置文件:/etc/nginx/sites-available/linuxbar.net的内容是:

也就是说:所有的文件是放在/var/www/linuxbar.net/html目录下。

因此创建这个文件,并且把步骤3中的所有文件推送到这个目录下即可,最终部署的所有文件如下:

小结

完成以上步骤之后,就可以在本地浏览器中输入域名,然后就可以看到漂亮的网站了!

7. 使用图床

在上面的第6步中,把所有的文件都放在了站点中,包括图片文件。

当浏览器访问站点的时候,所有的文件(特别是图片)都直接从web服务器的链路里获取,浪费流量。

可以利用一些免费的图床来存放图片文件,浏览器获取html文件之后,加载图片时,就从图床中获取图片文件,大大减少了web服务器的压力。

我使用的是七牛的图床,因此把所有图片上传到图床上,然后把html文件中对图片的链接全部修改一下就可以了。

当然了,也可以选择其他的图床工具,很多免费的(收费的也很便宜)。

8. 使用 CDN 加速

在上面第二步:绑定域名和IP地址的时候,使域名直接解析到对应的web服务器所在的IP地址。

可以利用CDN域名加速功能,来提升访问速度,提高用户体验。设置如下:

配置完成之后,会得到一个cname,然后在域名解析设置中把域名指向这个cname即可:

完成这个设置之后,在浏览器中输入域名,将会访问CDN节点。

当然了,如果节点中没有内容,将会访问web服务器,把最新的页面缓存起来,然后再返回给浏览器。

总结

这篇文章从一个初学者的角度,来描述如何从零开始建一个静态页面的个人网站。

如果文中有描述错误,请不吝赐教!感谢!

------ End ------

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2022-07-15,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 IOT物联网小镇 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
应用示例荟萃 | 全方位认识 information_schema
在上一篇《InnoDB 层压缩相关字典表 | 全方位认识information_schema》中,我们详细介绍了InnoDB层记录压缩表信息的字典表,本期我们将为大家带来系列第九篇《应用示例荟萃 | 全方位认识information_schema》,也是"全方位认识information_schema"的最后一篇,下面请跟随我们一起开始information_schema系统库的系统学习之旅吧
老叶茶馆
2020/11/26
7110
Server层表级别对象字典表 | 全方位认识 information_schema
在上一篇《Server层统计信息字典表 | 全方位认识 information_schema》中,我们详细介绍了information_schema系统库的列、约束等统计信息字典表,本期我们将为大家带来系列第三篇《Server层表级别对象字典表 | 全方位认识information_schema》。
老叶茶馆
2020/11/26
1.1K0
InnoDB 层系统字典表 | 全方位认识 information_schema(IFS)
在《Server 层混杂信息字典表 | 全方位认识 information_schema》中,我们详细介绍了information_schema下的状态变量、系统变量、进程状态、字符集和校对规则等字典表,本期我们将为大家带来系列第五篇《InnoDB 层系统字典表 | 全方位认识 information_schema》,下面请跟随我们一起开始information_schema 系统库的系统学习之旅吧。
老叶茶馆
2020/11/26
9770
InnoDB 层锁、事务、统计信息字典表 | 全方位认识 information_schema
在上一篇《InnoDB 层系统字典表|全方位认识 information_schema》中,我们详细介绍了InnoDB层的系统字典表,本期我们将为大家带来系列第六篇《InnoDB 层锁、事务、统计信息字典表|全方位认识 information_schema》
老叶茶馆
2020/11/26
1.4K0
Server 层混杂信息字典表 | 全方位认识 information_schema(中)
该表提供查询关于语句性能分析的信息。其记录内容对应于SHOW PROFILES和SHOW PROFILE语句产生的信息
老叶茶馆
2020/11/26
4120
Server 层混杂信息字典表 | 全方位认识 information_schema(上)
在上一篇《Server层表级别对象字典表 | 全方位认识 information_schema》中,我们详细介绍了information_schema系统库的表级别对象字典表,本期我们将为大家带来系列第四篇《Server层混杂信息字典表 | 全方位认识 information_schema》,下面请跟随我们一起开始information_schema系统库的系统学习之旅吧。
老叶茶馆
2020/11/26
9540
Server 层混杂信息字典表 | 全方位认识 information_schema(下)
该表提供查询关于表级别权限信息,该表中的内容来自mysql.tables_priv
老叶茶馆
2020/11/26
3260
统计信息查询视图|全方位认识 sys 系统库
在上一篇《会话和锁信息查询视图|全方位认识 sys 系统库》中,我们介绍了如何使用 sys 系统库总的视图来查询会话状态信息以及锁等待信息,本期的内容先给大家介绍查询表和索引相关的统计信息快捷视图。下面请跟随我们一起开始 sys 系统库的系统学习之旅吧。
沃趣科技
2018/09/04
2.3K0
统计信息查询视图|全方位认识 sys 系统库
mysql中information_schema库下的COLUMNS_EXTENSIONS表详解
`information_schema.COLUMNS_EXTENSIONS` 表是 MySQL 8.0.22 及以上版本中引入的一个元数据表,用于存储与表列相关的扩展属性。这些属性主要用于存储引擎级别的信息,例如 InnoDB 存储引擎的列属性。下面是对该表的详细解释:
jack.yang
2025/04/05
850
mysql的information_schema下的COLUMNS表详解
`information_schema.COLUMNS` 表是 MySQL 中的一个元数据表,用于存储数据库中所有表的列信息。这个表对于查询和管理数据库结构非常有用,可以帮助您了解每个表中的列定义、数据类型、约束等细节。
jack.yang
2025/04/05
860
mysql中information_schema库下的KEY_COLUMN_USAGE表详解
`information_schema.KEY_COLUMN_USAGE` 表是 MySQL 中的一个元数据表,用于存储关于表的键列信息,包括主键、唯一键以及外键的详细信息。这个表包含了关于哪些列参与了哪些类型的键约束的信息。下面是这个表的详细解释:
jack.yang
2025/04/05
990
MySQL information_schema详解 COLUMNS
如果一个栏位在多个索引中,COLUMN_KEY只会显示其中优先级最高的一个,顺序为PRI, UNI, MUL
bsbforever
2020/08/18
4K0
InnoDB 层压缩相关字典表 | 全方位认识 information_schema
在上一篇《InnoDB 层全文索引字典表|全方位认识 information_schema》中,我们详细介绍了InnoDB层的全文索引字典表,本期我们将为大家带来系列第八篇《InnoDB 层压缩相关字典表|全方位认识 information_schema》,下面请跟随我们一起开始 information_schema 系统库的系统学习之旅吧。
老叶茶馆
2020/11/26
4410
MySQL information_schema详解 KEY_COLUMN_USAGE
https://dev.mysql.com/doc/refman/5.7/en/key-column-usage-table.html
bsbforever
2020/08/18
1.7K0
MySQL字段信息统计机制场景
同事咨询个问题:某个业务基于 INFORMATION_SCHEMA 统计表的信息(比如最大值)向表里面插入数据。
bisal
2023/08/09
4260
MySQL information_schema 系统库介绍
当我们安装好 MySQL 数据库后,会发现数据库实例自带有 information_schema 系统库,你是否有去关注过这个系统库呢?是否有查询过此库中的表数据呢?又是否清楚此库存在的具体作用呢?带着这些疑问,我们一起来看本篇文章。
MySQL技术
2021/08/24
9730
介绍一下 information_schema 库
今天给大家介绍一款 Mysql 中附属的数据库,就是 information_schema 数据库,为什么说是附属呢?是因为这个数据库是在安装 Mysql 的同时就会安装到你电脑上。这个数据库里面主要存储了关于数据库里面的各种库、表、列、注释等信息。这个库对我们有什么用呢?有很大用处,尤其是当一个公司没有数据字典的时候,你就可以通过查看这个数据库,然后自己去梳理字典。
张俊红
2019/06/24
1.9K0
权限系统表 | 全方位认识 mysql 系统库(一)
前面我们已经完整的介绍了performance_schema 、sys、information_schema三个系统库,今天开始我们为大家开启"全方位认识 mysql 系统库"系列,这也是MySQL中的最后一个系统库 ,在更早之前,我们在《MySQL 的 help 命令你真的会用吗?》一文中其实已经介绍过mysql 系统库的帮助信息表了。在接下来的系列文章中,我们将全面介绍 mysql 系统库。下面,请跟随我们一起开始mysql 系统库 的学习之旅吧。
老叶茶馆
2020/12/15
1K0
mysql的information_schema库下COLUMN_STATISTICS表详解
`information_schema.COLUMN_STATISTICS` 表是 MySQL 8.0.16 及更高版本中引入的一个元数据表,用于存储关于表列的统计信息,特别是直方图数据。这些统计信息有助于优化器更准确地估计查询的成本,从而选择更高效的执行计划。
jack.yang
2025/04/05
600
InnoDB 层全文索引字典表 | 全方位认识 information_schema
在上一篇中,我们详细介绍了InnoDB 层的锁、事务、及其相关的统计信息字典表,本期我们将为大家带来系列第七篇《InnoDB 层全文索引字典表 | 全方位认识 information_schema》。
老叶茶馆
2020/11/26
1.2K0
推荐阅读
相关推荐
应用示例荟萃 | 全方位认识 information_schema
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验