# 山月的琐碎博客记录
关于平常工作中在前端,后端以及运维中遇到问题的一些文章总结。以后也会做系列文章进行输出,如前端高级进阶系列,个人服务器指南系列。
说到个人服务器,如果你是新人的话,在阿里云有优惠,这里有连接进行购买:阿里云新人优惠服务器 (opens new window)。可以跟着我的系列文章 跟着山月管理个人服务器 (opens new window) 来学习。 如果你对服务器完全没有概念,建议购买配置
1核2G
,也就八十来快钱。如果对云主机有所了解,建议购买配置2核4G
。
# 名字由来
大学时读了温庭筠一首词,山月不知心底事,水风空落眼前花
,于是就起了一个名字: 山月水风。
后来难免觉得花间词过于矫情,于是把名字拆成两个,只取前两个字:山月。取李白 暮从碧山下,山月随人归
之意,恰好那段时间从京西阳台山下来时伴着月亮。
再后来读书读多了,觉得 松风吹解带,山月照弹琴
与 水风轻,蘋花渐老,月露冷,梧叶飘黄
的意境也不错,也很喜欢。
# 开源及个人项目
# Package
- @shanyue/promise-utils (npm) (opens new window): 一些有用的 promise 工具函数,如 map, filter, retry 与 sleep
- cls-session (npm) (opens new window): Node 类似 CLS 的实现,并避免了 Promise 在 async_hooks 中内存泄漏问题
- we-api (npm) (opens new window): 关于微信公众号 API 封装的 SDK,支持 TS与更好用的 SDK
- shfshanyue/whoami (docker) (opens new window): Tiny node.js webserver that prints os information and HTTP request to output
- shfshanyue/ansible-op (ansible role) (opens new window): 满足你个人服务器一切运维需求的 Ansible Role
- shfshanyue/apollo-server-starter (graphql template) (opens new window): 基于 apollo-server 的 graphql 后端脚手架
# Serverless
- shfshanyue/markdown-to-html-api (opens new window): 根据 mardown 生成美化 html 的 GraphQL API
- shfshanyue/interview-api (opens new window): 程序员面试每日一题
- shfshanyue/geek (opens new window): 极客时间返利平台: https://geek.shanyue.tech (opens new window)
# Side Project
以下项目均部署在我的个人服务器中,详情见 当我有一台服务器时我做了什么 (opens new window)
- shfshanyue/2019-ncov (opens new window): 全国新型冠状病毒,肺炎疫情实时省市地图,单日 PV 最高48万
- shfshanyue/shici (opens new window): 诗词小站,服务器容器运维、爬虫及前后端开发可参考我的博客,单日 PV 500 https://shici.xiange.tech/ (opens new window)
- shfshanyue/shici-spider (opens new window): 诗词小站的爬虫
- shfshanyue/shici-server (opens new window): 诗词小站的服务端
- shfshanyue/wechat (opens new window): 个人公众号的微信开发,黑客增长实践,看文需扫码关注功能
- shfshanyue/wechat-bot (opens new window): 个人微信机器人开发,社群运营、智能对话与提醒。自动通过好友,加群后欢迎语以及基金、疫情信息监控
- shfshanyue/wechat-cron (opens new window): 个人公众号的自动上传素材脚本,使用 we-api (opens new window) 作为 SDK
- shfshanyue/reacht-rubic (opens new window): 使用 react 开发一个魔方
- shfshanyue/tomato (opens new window): 基于 vue 与 cordova 的番茄闹钟APP
- shfshanyue/eleven (opens new window): 小程序十一选五小助手
- shfshanyue/cheat-sheets (opens new window): cheat sheets
- shfshanyue/tieba_post (python) (opens new window): 模拟百度贴吧的登录及自动发帖
- shfshanyue/spider (python) (opens new window): python 写的网页定时备份小工具
# 前端工程化
- 前端高级进阶:javascript 代码是如何被压缩 (opens new window)
- 前端高级进阶:如何更好地优化打包资源 (opens new window)
- 前端高级进阶:网站的缓存控制策略最佳实践及注意事项 (opens new window)
- 前端高级进阶:团队代码规范约束最佳实践 (opens new window)
- 前端高级进阶:在生产环境中使你的 npm i 速度提升 50% (opens new window)
- 前端高级进阶:使用 docker 高效部署你的前端应用 (opens new window)
- 前端高级进阶:CICD 下的前端多特性分支环境的部署 (opens new window)
- 前端高级进阶:前端部署的发展历程 (opens new window)
- 前端高级进阶:本地环境 https 证书配置 (opens new window)
更多文章: 前端工程化系列 (opens new window)
# Node 工程及实践
- Node实践语言篇: 如何引入模块及其细节
- Node实践源码篇: 40 行代码实现精简版 koa
- Node实践代码篇: 为你的应用添加单元测试
- Node实践质量篇: Node 应用中如何做数据类型校验
- Node实践质量篇: Node 脚本遭遇异常时如何安全退出
- Node实践交互篇: 浏览器跨域与服务器中的 CORS
- Node实践日志篇: 如何正确且高效地打印日志
- Node实践日志篇: async_hooks,CLS 与异步资源生命周期监听
- Node实践日志篇: Node 中全链路式日志实践
- Node实践监控篇: 如何监控 Node 服务的内存
- Node实践部署篇: 如何使用 Docker 部署 Node 应用
- Node实践质量篇: Node 脚本遭遇异常时如何安全退出
- Node实践质量篇: Controller 层如何做数据类型校验
更多文章: Node 实践 (opens new window)
# 虫子集
山月在测试环境及生产环境中遇到的那些有关前端,后端及运维的虫子 (BUG)
更多文章: 虫子集
# 技术中的用户增长手段
- 如何使用 wechaty 开发一个微信机器人 (opens new window)
- 如何使用公众号开发从 PC 端网站引流 (opens new window)
- 使用公众号开发进行网站向公众号的导流 (opens new window)
更多文章: 用户增长
# 有可能你并不需要云服务器 | 如何更好地薅羊毛
但仅仅是开发一个简单的项目(弱数据存储),有可能你并不需要一个云服务器。
- 如果你只想搭建一个博客 (opens new window)
- 使用 Netlify 托管静态网站与持续集成 (opens new window)
- 使用 AliOSS 部署及加速你的静态网站 (opens new window)
- Github Actions 持续集成简介及实践 (opens new window)
- Serverless 与 Serverless Framework (opens new window)
- 使用 serverless 开发第一个 Koa 应用 (opens new window)
- 使用 serverless 开发第一个 Next 应用 (opens new window)
更多文章: 你并不需要云服务器 (opens new window)
# 个人服务器运维指南
你可以在阿里云新购一台服务器作为实践:
# 序
# 配置篇
- 高效简单的服务器登录配置 (opens new window)
- 服务器上 git 安装及基本配置 (opens new window)
- 服务器上 ssh key 管理及 github 配置 (opens new window)
- 云服务器基本指标信息查看及命令 (opens new window)
- vim 基本操作及配置 (opens new window)
- tmux 与多窗口管理 (opens new window)
- ansible 简易入门 (opens new window)
# 容器篇
- docker 简易入门 (opens new window)
- Dockerfile 最佳实践 (opens new window)
- 案例: 使用 docker 高效部署前端应用 (opens new window)
- docker compose 编排架构简介 (opens new window)
- docker compose 简易入门 (opens new window)
- 使用 traefik 做反向代理 (opens new window)
- 使用 traefik 自动生成 https 的证书 (opens new window)
- 使用 dnsmasq 搭建本地 DNS 服务 (opens new window)
- 使用 openvpn 访问内部集群私有服务 (opens new window)
- 使用 postgres 做数据存储 (opens new window)
- 使用 redis 做缓存服务 (opens new window)
- 使用 sentry 做异常监控 (opens new window)
- 案例:黑客增长 - 从博客向公众号引流 (opens new window)
- 案例:黑客增长 - 使用公众号开发模拟面试 (opens new window)
# 监控篇
# 命令篇
- sed 命令详解及示例 (opens new window)
- awk 命令详解及示例 (opens new window)
- jq 命令详解及示例 (opens new window)
- tcpdump 命令详解及示例 (opens new window)
- 案例: 使用jq与sed制作掘金面试文章榜单 (opens new window)
# 使用 k8s 管理多服务器
# 集群搭建
- 预备工作 (opens new window)
- 搭建过程中常见 linux 命令使用 (opens new window)
- docker 的安装与配置 (opens new window)
- kubelet/kubeadm 简介与安装 (opens new window)
- 搭建一个集群的主节点 (control plane node) (opens new window)
- 为集群添加一个工作节点 (work node) (opens new window)
- 在本地环境管理集群 (opens new window)
# 资源部署
- 部署你的第一个应用: Pod,Deployment 与 Service (opens new window)
- 通过外部域名访问你的应用: Ingress (opens new window)
- 自动为你的域名添加 https (opens new window)
# 工具与运维
# 业务与技术
- 新人如何快速熟悉业务 (opens new window)
- 前端如何在业务中提升自己 (opens new window)
- 如何为测试环境制造假数据 (opens new window)
- 在线教育考试系统业务分析 (opens new window)
# 杂记
# 技术反思分享
以下都是关于技术思考的文章分享
# 后端
- 各种架构图乱七八糟的图索引 (opens new window)
- linux 性能监控指标速查 (opens new window)
- jwt 实践应用以及特殊案例思考 (opens new window)
- jwt 邮件验证码与登录实践 (opens new window)
- GraphQL 开发指南 (opens new window)
- 由 GraphQL 来思考 API Design (opens new window)
- Node 中异常,EXIT CODE 与 dockerfile (opens new window)
- 限流算法: 漏桶与令牌桶简介 (opens new window)
- 使用 requestId 标记全链路日志 (opens new window)
- Node 中的异常收集,结构化与监控 (opens new window)
- 谈谈 Redis 在项目中的常见使用场景
- 项目实践: 使用微信公众号开发模拟面试功能 (opens new window)
- Sequelize V5 升级记录及注意事项 (opens new window)
- 如何判断文件中换行符 LF(\n) 与 CRLF(\r\n) (opens new window)
- 两个由于 async/await 导致 OOM 的示例 (opens new window)
- 隔离级,悲观锁与诗词字云功能的开发 (opens new window)
- 域名更改注意事项须知 (opens new window)
- 从数据库到前端,使用 enum 代替 constant number (opens new window)
- SQL必知必会 (opens new window)
# 前端
- JS 调试问题汇总及示例 (opens new window)
- 如何实现 Promise 的限流 (opens new window)
- 如何实现一个简单的 Promise (opens new window)
- 你不知道的 JS 之疑难汇总
- 使用纯 CSS 实现仿 Material Design 的 input 过渡效果 (opens new window)
- Canvas VS SVG 画影图形 (opens new window)
- Grid 布局指南 (opens new window)
- 使用 Grid 进行常见布局 (opens new window)
- 浏览器中的二进制以及相互转化 (opens new window)
# 工具与增效
- vim 快速入门 (opens new window)
- 是谁动了我的代码 (opens new window)
- tmux 与多窗口管理 (opens new window)
- ssh 快速登录服务器 (opens new window)
# 关注我
我是山月,一个以前喜欢跑步与爬山的程序员,我会定期分享全栈文章在个人公众号中。如果你对全栈面试,前端工程化,graphql,devops,个人服务器运维以及微服务感兴趣的话,可以关注我的微信公众号【全栈成长之路】。