DevOps 运维相关的知识点
Mac安装homepage
1. homepage介绍
官网地址:这里
一个现代化、完全静态、快速、安全、完全代理、高度可定制的应用程序仪表板,集成了 100 多种服务,并可翻译成多种语言。通过 YAML 文件或 Docker 标签发现轻松配置。
2. 为什么要写这个?
因为官网提供的是docker、k8s等安装方式,并没有提供mac本地安装,而我想在自己电脑上有这么一个。所以就要用源码安装了。
3. 普通安装会出来什么问题?
mac新版本用iTrem2的nohup启动后,退出iTrem2后,Session会关闭,导致nohup不成功
4. 如何处理?
4.1 下载源码,切换分支
git clone https://github.com/gethomepage/homepage.git HomePage
git checkout tags/v0.8.9
4.2 确定node版本,编译
# 应该在18以上,我是20
# 到工作目录
npm install -g pnpm
pnpm install
pnpm build
4.3 创建plist
地址:~/Library/LaunchAgents
名称:wiki.micah.homepage.plist 注意,这里必须plist结尾的
内容:xxx表示你的用户目录
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>Label</key>
<string>wiki.micah.homepage</string>
<key>RunAtLoad</key>
<true/>
<key>KeepAlive</key>
<true/>
<key>ThrottleInterval</key>
<integer>60</integer>
<key>EnvironmentVariables</key>
<dict>
<key>HOME_DIR</key>
<string>/Users/xxx</string>
<key>APP_DIR</key>
<string>/Users/xxx/gethomepage/homepage</string>
<key>HOMEPAGE_ALLOWED_HOSTS</key>
<string>homepage.xxxx,localhost:3000</string>
</dict>
<key>ProgramArguments</key>
<array>
<string>/bin/zsh</string>
<string>-c</string>
<string>-l</string>
<string>source $HOME_DIR/.zshrc; /Users/micah/xxx/bin/pnpm start</string>
</array>
<key>WorkingDirectory</key>
<string>/Users/xxx/gethomepage/homepage</string>
<key>StandardOutPath</key>
<string>/Users/xxx/homepage.micah.wiki.node.info.log</string>
<key>StandardErrorPath</key>
<string>/Users/xxx/logs/homepage.micah.wiki.node.error.log</string>
</dict>
</plist>
4.4 加入到启动项目中
# 加入到启动项目
launchctl load ~/Library/LaunchAgents/wiki.micah.homepage.plist
# 从启动项目删除
launchctl unload ~/Library/LaunchAgents/wiki.micah.homepage.plist
Ubuntu服务器初始化
初始化需要的步骤
1. 更新
sudo apt upgrade
2. 安装软件
sudo apt-get install nginx
# 修改启动用户为root
vi /etc/nginx/nginx.conf # 第一行
# user root;
Mac电脑如何配置有格式的文件夹
# 文件名命名
1. 从下面json多语言化中选择一个Key作为文件夹名
2. 在新建的文件夹名下,创建一个文件`touch .localized`
# 下面的文件地址: `/System/Library/CoreServices/SystemFolderLocalizations/zh_CN.lproj`
# 现在是二进制的,需要转换为其他格式,命令如下:
plutil -convert json SystemFolderLocalizations.strings # 该命令需要有执行权限的地方,不如拷贝到download下
# 更改图标
1. 右击查看“显示简介”
2. 命令行cd到`/System/Library/CoreServices/CoreTypes.bundle/Contents/Resources` 然后输入 `open .`
3. 找到最喜欢的图标,然后`cmd+c`,在简介中的最上面图标点击后`cmd+v`
{
"Saved Searches": "已存储的搜索",
"Relocated Items": "迁移的项目",
"Deleted Users": "已删除的用户",
"Favorites": "个人收藏",
"Public": "公共",
"Compositions": "Compositions",
"Groups": "群组",
"Documents": "文稿",
"Sites": "站点",
"Network": "网络",
"System": "系统",
"My Network": "我的网络",
"Shared Items": "共享的项目",
"My Applications": "我的应用程序",
"Movies": "影片",
"Mail Downloads": "邮件下载",
"Servers": "服务器",
"Server": "服务器",
"Pictures": "图片",
"Shared": "共享",
"Recovered files": "恢复的文件",
"Configuration": "配置",
"Utilities": "实用工具",
"Security": "安全性",
"Incompatible Software": "不兼容的软件",
"Desktop": "桌面",
"Music": "音乐",
"Faxes": "传真",
"Downloads": "下载",
"Users": "用户",
"Guest": "客人",
"Drop Box": "投件箱",
"Web Receipts": "网页收据",
"Library": "资源库",
"Local": "本地",
"Applications": "应用程序"
}
图片服务整体架构
1.背景
面向海外用户设计图片类app的后端架构。
2. 目标
-
考虑跨地区访问图片列表。
-
图片容灾和备份服务。
-
用户访问突增的解决方案。
-
海外服务政策相关注意事项。
3. 方案(图片)
ps:这里先统一考虑图片的设计过程,图片解决后,再考虑业务后台过程
3.1 自研
方案设计

- 分布式文件系统:采用开源系统进行搭建分布式文件系统
- 文件系统服务:可以新增图片时可以生成索引返回给业务,当业务只需要根据索引,就能查询到对应的文件内容
- 业务层:上传服务主要负责图片的上传、而列表服务则是需要根据请求,获取列表及数据
- 接入层:接收用户的请求,把请求代理到业务上
这么设计,可以实现一个图片类的应用。在实际中会有什么问题?
- 不同区域的用户,体验不一样,用户离部署的节点越近,用户体验更好
因为根据之前的经验,地域对于网络的延迟影响很大。大致从ping上就能体现
| 地区1 | 地区2 | ping时间 |
|---|---|---|
| 上海 | 广州 | 30ms |
| 上海 | 上海 | 10ms |
| 上海 | 美国 | 100ms |
- 从终端的成功率上看,由于网络上的丢包、延迟,成功率会低很多,特别是图片(目前图片1~3M都是比较正常的),这么大的图片,在过程中,发生丢包、延迟,失败率可想而知,会特别的高。
这种场景,我们可以考虑下,访问国外某些网站的时候,经常是失败,体验非常差
改进点
那么需要怎么改进呢?
比较容易想到的就是,既然是距离远,那么直接在对应的地方部署一个服务,不就行了么?

这样各地的用户,通过dns的调度,访问对应的接入层,接入层只访问当前区域的服务(同一个区域),这样就减少了网络上的问题。解决了用户体验。但是,好像跟需求不是太耦合。。。需求是跨区域访问。
那么要怎么样实现跨区域访问呢?

从图上可以看出来,如果底层数据实现了数据同步,那么是不是就可以了?
比如亚洲用户发布内容,那么我们把数据同步给其他集群,这样其他集群就可以访问到亚洲用户的信息了
要怎么实现同步呢?目前了解到**FastDFS**可以实现分布式任务系统的,他是采用binlog进行同步,在log中有个标志位用户记录该条记录是C: 增加 D: 删除 A: 添加 M: 修改 U: 更新整个文件 T: 截断文件 等,当亚洲区域进行添加时,会发送日志给美洲、欧洲,他们也会根据binlog的日志添加,这里需要注意:同步数据采用的标识与写入的是不一样的,采用小写,目的是为了区别是否需要同步给其他集群。
这里还没有对FastDFS跨区同步进行测试过,还不确定具体的延迟能够到达多少(有待验证)。
理论上,上面的方案是可以实现的,那么我们会有什么问题呢?
- 所有图片数据,都存在多份,每个数据都需要进行公网的同步。
- 文件传入与数据传输需要保证一致,不能有数据了,没有文件
那么我们有没有其他方案进行呢?下面我们来看下

对于图片,可以采用CDN加速。
对于API接口了解到市面上,有一种产品,叫做“全站加速”或者“动态加速”,也就是cdn不进行缓存,直接访问,这样的话,我们可以直接让用户访问,这样的话,所有数据都访问了中心区域的数据,通过“动态加速”把用户和源进行连接,核心是增加了数据传输的稳定性,降低失败率。
这种方式存在什么问题:
-
数据量问题:
a) 扩容问题:这个也不算特别问题,是项目一般都会遇到