阅读视图
自托管 Bitwarden
起因
使用浏览器保存密码,是我十年以来从使用傲游浏览器开始的习惯。得益于导出和导入的便捷,我换过很多浏览器,这些密码依然被完整的迁移到了我现在使用的 edge 浏览器上,且 edge 安卓版也支持作为密码管理器给应用填充密码,至此我都没有更换密码管理器的想法。
前阵子有博主给我推荐了 keepass,加上浏览器保存的四百多个密码中绝大多数使用的同一个密码,一旦泄露一个,被撞库的后果不堪设想,于是我有了更换密码管理器,且使用这玩意生成复杂密码的念头。
但是阴差阳错,keepass 太丑,我的服务器又可以一键部署 bitwarden,所以我最终选择了后者。
使用官方服务
一开始我并不是很愿意自己托管数据,一方面是 bitwarden 的官方服务够用,且一定程度够安全,自托管可能会面临更多的维护和容灾时间成本,所以我注册了官方的账户。
登陆后,我从 edge 导出了保存的密码——虽然需要输入系统密码,但是如柚子所言,浏览器保存的数据是很容易被导出或窃取的。导出完毕,我便删掉了浏览器保存的密码数据,决心使用 bitwarden 一条路走到黑。
起先体验还不错,但是没多久我就遇到了一个问题。在单位电脑上为某网站创建的账户使用了 bitwarden 生成的复杂密码,并且保存在了该应用中。而在家中的电脑上想自动填充时,却发现浏览器插件提示没有填充项目,即使我在本地一再点了同步密码库。
此时我意识到很可能是在单位时,该账户密码并未成功被同步到 bitwarden 的云端。
因此,我决心自部署该项目。
自部署和托管
在 1panel 中一键部署 bitwarden 是非常轻松的一件事,让我踩坑的点在于后续的配置中。
根据官方文档和碎月的建议,我决定使用域名的子目录来反向代理该服务,一定程度上减少它被恶意扫描和爆破的风险。理论上使用子目录反代很简单,只需要添加一条环境变量,在反代中添加该路径即可。
我的蠢问题
但问题来了:1.环境变量没有生效,2.反代只支持添加域名但不能包含路径。
针对问题2,我和碎月进行了较长的辩(嘴)论(硬)。我认为,一个域名都已经解析到目录 A 了,难道还能反代到目录 B 吗?
即,example.com
对应网站的目录是 /opt/www/sites/
,bitwarden 安装的路径是 opt/docker/bitwarden/
,那么example.com/bit/
是无法解析到后者的。还好碎月有耐心,让我明白了只需要在已解析域名的反向代理中添加前端请求路径和后端代理地址即可。
问题2解决了,问题1困扰了我好久。我添加的三个环境变量如下:
# 指定域名和子目录 |
我首先在该服务目录下的 .env
中写入环境变量,重启服务,没生效;
在 docker-compose.yml
中硬写变量再重启,也没生效,碎月也不知道何故,为此,我还去 1panel 的项目中提了一个 issue (丢脸)。1panel 官方工作人员回复了我,并确认该情况不是 bug。在我多次尝试后发现了问题所在:修改 docker-compose.yml
后我没有点重建!!!
不爱使用 docker 的我,最终为自己的无知感到了羞愧。
避坑
由于在应用商店更新应用会导致非持久化目录下的文件丢失(或覆写),所以我一直在考虑把 .env
添加到持久化目录中,在 docker-compose.yml
里指定路径,还是把环境变量硬写在 docker-compose.yml
里,最终我选择了后者。
为此,我和 deepseek 之间也有一段小小的插曲,因为允许它说脏话,所以我被它骂了,虽然后来它服软——因为我的环境变量里并不包含重要的敏感信息。
因为升级时可以勾选自定义docker-compose.yml
,所以把环境变量写在这里要方便得多。
备份
虽然服务器已经稳定运行好几年了,我时不时会添加快照,但把鸡蛋放在同一个篮子里并非明智之举,所以我通过 1panle 的定时任务每天都会把 bitwarden 的数据同步到 onedrive 中,以免哪天需要恢复。如果你也选择自托管,我强烈建议使用脚本每天备份数据!
体验
自部署的服务无论是增删还是同步都超级方便快捷,除了保存网站或应用的登陆密码之外,我终于把此前明文写在 onenote 中的银行登录密码给迁移到了 bitwarden 的“备注”功能之中。
但是体验也有不那么好的点,在安卓端或浏览器插件中无法批量管理密码(可能是出于安全),只能在服务端的网页上批量操作。此外,在安卓端的自动填充有时会有延迟,比如在浏览器中点好几次都不会及时显示自动填充,在 APP 上创建密码也不会及时弹窗询问是否保存。但大体上使用没什么问题。
写在最后
自托管 bitwarden 让我尝到了甜头,于是最近这些天我在折腾另一件让我苦恼的事,甚至今天水这一篇文也是为了后面的记录做铺垫。
最近我的 onenote 频繁闪退(其实也不算闪退,有退出动画那样时不时自动关闭)。为此,我决定找一个平替,期间尝试了包括但不限于知名的 notion、obsidian、joplin,以及 google play 上的很多如 notesnook、anytype、standard notes、appflowy、silentnotes等等几十款笔记应用,没有一个近乎完美符合我的需求。
需求如下:免费或者开源,非国产,多端同步,支持自托管或加密同步到如 onedrive 或 webdav,支持单篇笔记加密,界面好看不臃肿,支持剪藏更好。下一篇再来详细谈谈我的简单评测。
Microsoft 365家庭版全球一起宕机
回宿舍开始动感单车课程,一开始我觉得自己还没有回过神来,但随着运动时间的延长,我渐渐把那个很烦人的东西放一边了。运动对我来说是一个很好的减压方式,到了一定程度以后我会忘却一切。我不知道这是因为我专注其中,还是运动分泌的某些东西会让我好过一些。
运动结束一看手机,发现有人给我发微信说他回到了办公室,他电脑的office软件正常没问题。打开他的截图,原来是Office2021家庭版,那肯定没有问题。不是痴迷分子,看到office软件可以用,根本不会意识到自己是不是跟我一样的问题,但可以肯定的是,这一次抽风的是Microsoft 365,而且可能是只是家庭版家长以外的用户,但也可能个人版跟家庭版的主账号也会有一些毛病。其它机子附带的那些各种家庭版,又或者是用其它方式激活的各种批量版没有问题。给我发微信的那个同事,也是在我们那个Microsoft 365的家庭版里的其中一个小孩,他虽然知道自己是365的订阅用户,但是他却没有意识到自己办公室那台电脑用的原来是Office2021家庭版。
当他说没问题的时候,我没有电脑,所以我打开了Microsoft 365的app,发现之前说我的账号是免费用户的地方现在显示我是订阅用户,所以这是不是意味着电脑好了呢?于是我赶紧开机,发现电脑还是不好,但不知道为什么之前我的office是无论如何只读状态,这一次打开的时候就直接给了我一个Office2016家庭版的界面,不仅仅是界面,帐户那里也显示我是2016家庭版,所以微软到底什么脑洞呢?365用不了,但是这个帐号下还有一个office,那么就给他切换到那个可用的许可证。但实际上他们真的能做到吗?除了office的界面很不一样以外,功能也很不一样,我不知道这样纯粹只是换了个Office版本许可证,这个阉割版的office到底有什么bug。一个普通的升级降级都会很容易导致office那些功能无端端就不能用,更何况是这种降级了几个级别的?Office 2016、2019、2021,现在最新版本是2024,Microsoft 365对标的是2024,又或者你可以说是2024 plus,因为2024版不具备的功能,可能365也是有的。虽然我不知道这次带了多少bug,但起码office可以打开编辑了,只操作一些低级的功能完全没有问题。
接着我马上打开网页版的微软账号,发现那里依然不显示我是Microsoft 365家庭版的订阅用户,当我再次打开手机app的时候,发现我的账号又变成了免费账号。接下来我又去搜索微信,出来的结果是微软发出了官方的声明,说Microsoft 365家庭版的服务器出了一些故障。除了官方账号以外,其它公众号也说这个故障是全球性的,国内好像是从周四下午开始就陆续有人发现这个问题。可能我的运气比较好,我是晚上19点多才发现的。也不是说我下午一直没有使用。我一直都用着,但一直都没有问题。大概就是那个点,突然我的账号我的软件要跟微软交换某些数据,于是就卡住了,然后就傻掉了。理论上Microsoft 365的账号是不需要一直联网的,但要过一段段时间就服务器认证激活。可能我就是那么好彩,校验的那个时点刚好遇上了他们服务器瘫痪。服务器瘫痪是肯定,从微信公众号上的某条信息看来这是全球性的,我就没那么慌了,这就意味着这不是因为贸易战争,针对中国而出现的毛病。全球性的毛病不需要焦虑,过上一段时间就会好。
大概在周四晚上11点左右,我发现office好像终于正常了,手机app显示我是订阅用户,在网页上微软账号也显示出我是家庭版的订阅用户,电脑上的 office也可以在帐户那里重新切换回Microsoft 365。
折腾了我整整一个晚上的365风波终于告一段落。
腾讯云原生开发自动化部署Hexo
CNB 简介
前阵子偶然在雨月空间站了解到腾讯出了一个云原生构建项目 CNB,一开始以为只是另一个国产的 gitee,但是深入体验后才发现它比半死不活的 gitee 高明得很多,非常接近 github。借用评论区的简要概括:云原生开发是 github codespace,云原生构建是 github actions,制品库是 github registry。
CNB 还是很大方地提供了免费额度,详情见云原生构建定价,实际云开发使用体验也非常不错。自从我换电信宽带后,基本无法直接向 github 推代码,既然如此,那我是不是也可以将我的博客自动化迁移到 CNB 上呢?
CNB 自动化部署hexo流程
必要步骤
1.注册一个 CNB 的账号,目前只支持使用微信登陆;
2.创建一个组织,实测非常见字符可以直接创建,但是短字符或常用字符需要域名验证。因为支持 .cool 域名验证,所以我创建了组织“hin”;
3.创建仓库,和 github 一样,你可以创建公开和私有仓库,此外,github 中的私钥等环境变量在 CNB 中得通过创建秘钥仓库来实现;
4.在这里创建访问令牌,以便拉取和推送代码,场景和权限范围还是非常细致的。特别提醒:记得保存生成的令牌!
创建 hexo 仓库
如果你要推送 hexo 博客到腾讯云 cos,那么你可以使用 hexo-cos-demo 这个模板;如果你要推送到自己的服务器,则可以使用 hexo-rsync-remote这个模板。这两个模板都自带云原生开发环境,可以一键上手。
起初考虑到我的 hexo 以及主题版本都太低,至少有两年没更新了,所以我选择了创建空白仓库,复制原 github 仓库文件和代码,参考案例编写环境。
强烈建议:创建私密仓库,以免配置文件中的一些密钥泄露!!!
仓库根目录创建.ide/Dockerfile
文件,参考内容如下:
# 帮助文档地址: https://docs.cnb.cool/zh/vscode/quick-start.html |
推送 hexo 到仓库
拉取和推送项目的操作和使用 github 一样,不再赘述。在第一次拉取私密仓库或者推送时,需要登陆,在登陆框填写此前创建的令牌即可。
我复制了此前 hexo 文件夹下的 source
、themes
等文件夹,以及 _config.yml
、package.json
等文件,然后 git push
到仓库。
点击右上角的橙色“云原生开发”,很快就会创建好环境,可以选择使用 WebIDE,也可以使用 VSCode 等 IDE 打开。为了方便,我就直接选择了网页版的 IDE。
打开网页版的 IDE 就可以在网页上使用 vscode 进行代码编写、拉取和推送等操作了。IDE 自带了腾讯的代码助手,但是我没使用过它。
和 github codespace 一样,你可以直接在网页版 IDE 中使用 hexo s
这样的命令来在线运行和调试。
此外,建议你使用子模块的方式引入 hexo 主题,以便于后续主题的更新和修改。和在 github 一样,在当前仓库创建 .gitmodules
文件即可,内容参考:
[submodule "themes/butterfly"] |
创建密钥仓库
在网页 IDE 中测试没有问题后,即可开始下一步了。
新建仓库,类型选择密钥仓库,参考文档在仓库里创建一个env.yml
文件,内容参考如下:
# 密钥仓库 env.yml |
详细的参数说明参考官方的 rsync 文档。此外,一定要记得粘贴私钥内容有两个要点:
1.在 yml 中,多行内容要用|
来表明;
2.由于 yml 对格式非常敏感,所以私钥的每一行都需要缩进两个空格而不是 Tab。
一开始我没注意到第二点,导致尝试推送静态文件到服务器时登陆失败,虽然构建日志中也提供满血版 deepseek 帮忙分析日志,但这也为我明明格式正确却无法连接到服务器埋下了另一个伏笔。
创建自动化工作流
在 hexo 仓库(不是密钥仓库)中创建一个名为 .cnb.yml
的文件,它的作用和 .github/workflows/main.yml
是一样的,写法上稍有不同,参考代码如下:
main: |
到此我们要做的事已经基本完成。当这个文件创建之后,云原生构建便会自动开始。起初,我的每一次构建都在上传到服务器这一步失败了,原因是服务器拒绝了连接。后来查看服务器日志才发现,因为之前失败次数达到设定的值,IP 已经被 fail2ban 给拉黑了。
写在最后
其实这个过程我尝试并失败过很多次,比如 hexo s
的时候发现有标签报错呀,我一直很纳闷,明明主题里有这个标签。后来偶然发现,我的主题是以子模块的方式引入的,在 CNB 仓库里没有声明子模块,导致浪费了很多时间。
其实自从腾讯云的 webify 基本没什么存在感之后,我对 CNB 的期待也不会太高,不知道哪一天这个项目也会被腾讯给淡忘。但是就目前来说,拉取和推送代码快速,云端 IDE 方便,配置给得也很大方,后面试试用来编译 openwrt 的固件都是值得一试的,我们切用且珍惜吧。
梯子/翻墙技巧: 一条命令就可以在服务器上设置一个Firefox/火狐浏览器代理
回国的时候最麻烦就是访问国外的网站:邮箱、油管视频等。在中国大陆,翻墙是违法的,但是好像在上海北京等大城市,可以申请许可,比如一些国际驻公司和政府机构因需要则可以申请绕过大墙网GFW/Great Firewall。
翻墙/建梯子的方式很多种,怕麻烦可以买现成的VPN,自己有服务器的可以建Wireguard等。这里再介绍一种简单的方式。
Docker容器里跑火狐FireFox浏览器
假设你的主机/服务器/VPS里已经装有Docker。只需要把下面的脚本存成一个BASH文件,比如 docker-firefox.sh 然后在命令行下跑:./docker-firefox.sh PASS 其中PASS是密码,这个我们下面要用到,PASS如果不写的话则要把 “-e VNC_PASSWORD=” 那行删掉即可。
#!/bin/bash VNC_PASS=$1 docker run -itd \ --restart always \ --name=firefox \ -p 5800:5800 \ -v $(pwd)/config:/config:rw \ --shm-size 1g \ -e ENABLE_CJK_FONT=1 \ -e VNC_PASSWORD=${VNC_PASS} \ jlesage/firefox
等一会儿,这时候Docker会去拉取这个软件镜像,然后完事即可在浏览器里把你的 域名/IP地址 后加上5800端口, 5800是上面脚本里指定的,也可以改成你想要的端口。
这样跑起来了,你的主机就相当于一个中转/代理,你在国内的时候访问你的主机(如果你主机没被大墙网拉入黑名单的话),那你就可以在浏览器里的内嵌FireFox浏览器里打开其它国外网站了。
使用体验
可能是和我的主机配置有关,总觉得有点卡。不是很流畅。还有就是我想登陆我的GMAIL帐号,被GOOGLE认定有风险,要我改密码,吓得我只能作罢。
试了一下,看了一个油管广告,没有声音,所以通过这个技巧看油管视频是不现实的。
还有就是,目前只支持HTTP,而不支持HTTPS,如果域名开启了HSTS,那只能通过IP来访问HTTP。不过,你可以通过nginx/apache设置一个反代 reverse proxy 来访问HTTPS。
比如以下是在Nginx服务器配置443端口重新转向到这个FireFox代理:
server { listen 443 ssl; server_name domain_name ssl_certificate /root/fullchain.cer; ssl_certificate_key /root/key.key; location / { proxy_pass https://your-server-ip:5800; proxy_ssl_verify off; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; } }
这玩意不适合日常工作,但是回国用于救急还是可以的。特别是不想在公共电脑上留下痕迹,只需要用强密码+HTTPS。等不需要用的时候记得把Docker容器删除即可。
docker stop firefox docker rm -f firefox
这个没法支持多用户,也就是说多个用户同时登陆看到的是同一个窗口。
可以使用:docker logs -f firefox 来查看窗口的相关信息:
[init ] container is starting…
[cont-env ] loading container environment variables…
[cont-env ] APP_NAME: loading…
[cont-env ] APP_VERSION: loading…
[cont-env ] DISPLAY: executing…
[cont-env ] DISPLAY: terminated successfully.
[cont-env ] DISPLAY: loading…
[cont-env ] DOCKER_IMAGE_PLATFORM: loading…
[cont-env ] DOCKER_IMAGE_VERSION: loading…
[cont-env ] EGL_LOG_LEVEL: executing…
[cont-env ] EGL_LOG_LEVEL: terminated successfully.
[cont-env ] EGL_LOG_LEVEL: loading…
[cont-env ] GSK_RENDERER: executing…
[cont-env ] GSK_RENDERER: terminated successfully.
[cont-env ] GSK_RENDERER: loading…
[cont-env ] GTK2_RC_FILES: executing…
[cont-env ] GTK2_RC_FILES: terminated successfully.
[cont-env ] GTK2_RC_FILES: not setting variable.
[cont-env ] GTK_THEME: executing…
[cont-env ] GTK_THEME: terminated successfully.
[cont-env ] GTK_THEME: not setting variable.
[cont-env ] HOME: loading…
[cont-env ] LIBGL_DRIVERS_PATH: executing…
[cont-env ] LIBGL_DRIVERS_PATH: terminated successfully.
[cont-env ] LIBGL_DRIVERS_PATH: not setting variable.
[cont-env ] PULSE_CONFIG_PATH: executing…
[cont-env ] PULSE_CONFIG_PATH: terminated successfully.
[cont-env ] PULSE_CONFIG_PATH: not setting variable.
[cont-env ] PULSE_COOKIE: executing…
[cont-env ] PULSE_COOKIE: terminated successfully.
[cont-env ] PULSE_COOKIE: not setting variable.
[cont-env ] PULSE_SERVER: executing…
[cont-env ] PULSE_SERVER: terminated successfully.
[cont-env ] PULSE_SERVER: not setting variable.
[cont-env ] QT_STYLE_OVERRIDE: executing…
[cont-env ] QT_STYLE_OVERRIDE: terminated successfully.
[cont-env ] QT_STYLE_OVERRIDE: not setting variable.
[cont-env ] TAKE_CONFIG_OWNERSHIP: loading…
[cont-env ] XDG_CACHE_HOME: loading…
[cont-env ] XDG_CONFIG_HOME: loading…
[cont-env ] XDG_DATA_HOME: loading…
[cont-env ] XDG_RUNTIME_DIR: loading…
[cont-env ] XDG_STATE_HOME: loading…
[cont-env ] container environment variables initialized.
[cont-secrets] loading container secrets…
[cont-secrets] container secrets loaded.
[cont-init ] executing container initialization scripts…
[cont-init ] 10-certs.sh: executing…
[cont-init ] 10-certs.sh: terminated successfully.
[cont-init ] 10-check-app-niceness.sh: executing…
[cont-init ] 10-check-app-niceness.sh: terminated successfully.
[cont-init ] 10-clean-logmonitor-states.sh: executing…
[cont-init ] 10-clean-logmonitor-states.sh: terminated successfully.
[cont-init ] 10-clean-tmp-dir.sh: executing…
[cont-init ] 10-clean-tmp-dir.sh: terminated successfully.
[cont-init ] 10-fontconfig-cache-dir.sh: executing…
[cont-init ] 10-fontconfig-cache-dir.sh: terminated successfully.
[cont-init ] 10-init-users.sh: executing…
[cont-init ] 10-init-users.sh: terminated successfully.
[cont-init ] 10-nginx.sh: executing…
[cont-init ] 10-nginx.sh: terminated successfully.
[cont-init ] 10-openbox.sh: executing…
[cont-init ] 10-openbox.sh: terminated successfully.
[cont-init ] 10-pkgs-mirror.sh: executing…
[cont-init ] 10-pkgs-mirror.sh: terminated successfully.
[cont-init ] 10-pulse.sh: executing…
[cont-init ] 10-pulse.sh: terminated successfully.
[cont-init ] 10-set-tmp-dir-perms.sh: executing…
[cont-init ] 10-set-tmp-dir-perms.sh: terminated successfully.
[cont-init ] 10-vnc-password.sh: executing…
[cont-init ] 10-vnc-password.sh: creating VNC password file from environment variable…
[cont-init ] 10-vnc-password.sh: terminated successfully.
[cont-init ] 10-web-data.sh: executing…
[cont-init ] 10-web-data.sh: terminated successfully.
[cont-init ] 10-webauth.sh: executing…
[cont-init ] 10-webauth.sh: terminated successfully.
[cont-init ] 10-x11-unix.sh: executing…
[cont-init ] 10-x11-unix.sh: terminated successfully.
[cont-init ] 10-xdg-runtime-dir.sh: executing…
[cont-init ] 10-xdg-runtime-dir.sh: terminated successfully.
[cont-init ] 15-cjk-font.sh: executing…
[cont-init ] 15-cjk-font.sh: installing CJK font…
[cont-init ] 15-cjk-font.sh: fetch https://dl-cdn.alpinelinux.org/alpine/v3.21/main/x86_64/APKINDEX.tar.gz
[cont-init ] 15-cjk-font.sh: fetch https://dl-cdn.alpinelinux.org/alpine/v3.21/community/x86_64/APKINDEX.tar.gz
[cont-init ] 15-cjk-font.sh: (1/1) Installing font-wqy-zenhei (0.9.45-r3)
[cont-init ] 15-cjk-font.sh: Executing fontconfig-2.15.0-r1.trigger
[cont-init ] 15-cjk-font.sh: Executing mkfontscale-1.2.3-r1.trigger
[cont-init ] 15-cjk-font.sh: OK: 694 MiB in 168 packages
[cont-init ] 15-cjk-font.sh: terminated successfully.
[cont-init ] 15-install-pkgs.sh: executing…
[cont-init ] 15-install-pkgs.sh: terminated successfully.
[cont-init ] 55-check-snd.sh: executing…
[cont-init ] 55-check-snd.sh: sound not supported: device /dev/snd not exposed to the container.
[cont-init ] 55-check-snd.sh: terminated successfully.
[cont-init ] 55-firefox.sh: executing…
[cont-init ] 55-firefox.sh: terminated successfully.
[cont-init ] 56-firefox-set-prefs-from-env.sh: executing…
[cont-init ] 56-firefox-set-prefs-from-env.sh: terminated successfully.
[cont-init ] 85-take-config-ownership.sh: executing…
[cont-init ] 85-take-config-ownership.sh: terminated successfully.
[cont-init ] 89-info.sh: executing…
╭――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――╮
│ │
│ Application: Firefox │
│ Application Version: 135.0-r0 │
│ Docker Image Version: 25.02.2 │
│ Docker Image Platform: linux/amd64 │
│ │
╰――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――╯
有用简单的IT小技巧
英文:Using Docker to Run Firefox as a Proxy: A Simple Solution for Accessing Blocked Websites in China
本文一共 804 个汉字, 你数一下对不对.
相关文章:
- 出租房子的教训: 让中介找人上门换一个水龙头竟然要204英镑! 我老婆在剑桥Bar Hill有一套出租房/Buy to Let,但她不想管理。每次房子出问题需要修理时,中介都会联系我。有房子出租闹心的事情真是多,真的印证了那句话:操着卖白粉的心,挣着卖白菜的钱!每次最怕的就是接到中介的电话,因为一有电话就意味着房子有问题要修/要花钱了。 几天前,中介打电话来说,租户反映厨房水龙头打开时有奇怪的声音,挺吓人的。我当时回复他们说我会找个水管工/Plumber第二天过去看看。但挂了电话后,我联系了我认识的中国装修师傅。他手艺很好,在英国生活了几十年,以前帮我家做过不少装修。不过他这次没时间,也不太愿意接这种小活。 前两年这个师傅给我们家换地板,翻新三个厕所,还有就是阳光房地板,门前加建了个Porch等,最近房子也在重新折腾装修,之后弄完再详细说说。 我懒得在网上(比如 MyBuilder.com)再找其他人,就让中介安排了他们自己的工人。 后来,中介回电说水管工已经在房子里了,并报价修理费为170英镑,加上VAT税后(20%)一共204英镑。如果不修,也要付140英镑的上门费,加税后差不多168英镑。觉得价格有点高,但也只能咬牙同意了。 其实让我不爽的是自己为了省事,最后只能任人宰割。老外只要上门就收钱,我当时虽让中介确认报价,但没问上门费的问题,现在骑虎难下。听说中介找的合同工都比较贵。 那个房子一共让中介找过四五次人修房子(各种问题:上次厨房水管堵了,被收了400多英镑,据说水管工花了三小时通下水道),主要是因为这次我认识的师傅没时间。其实我还认识另一个会修房子的中国人,这样看来,以后可能不会再让中介找人了。 去年冬天,因为恶劣天气,房子顶有一小块掉了,中介找人报价要1800英镑,还好我没同意。后来找了个中国师傅,才花了350英镑,而且当时有Landlord保险还全额报销了。 PS:我发了封邮件给中介小小抱怨了一下。 Hi there,...
- 真正意义上的鼓励优秀作品 – 优秀被错过文章 有奖励啦! 大家都知道我的日报第一项就是 《那些优秀可能被错过的文章》这个算法是通过我自己的认识选出一些比较 好的文章 但是收益却比较低, 那么, 通过 @dailychina 天天回复, 比如: 对于作者来说, 除了心理得到表扬之外 并没啥卵用, 是吧. 而且有些作者经常上榜啊, 于是,...
- 按揭贷款(房贷,车贷) 每月还贷计算器 去年给银行借了17万英镑 买了20万7500英镑的房子, 25年还清. 前2年是定率 Fix Rate 的合同 (年利率2.49%). 每个月大概是还 700多英镑. 有很多种还贷的计算方式, 定率/每月固定 是比较常用的. 简单来说就是 每个月交的钱是...
- 一行代码修改引起的血案 – (二) 上一篇说到乱改了一行代码引来的错误, 自己也检讨了一下. 以下已经同事同意: 看了XX在群里发的内容 http://coolshell.cn/articles/4576.html,然后到 http://thread.gmane.org/gmane.linux.kernel/1124982/focus=1126216 仔细看了Linus Torvalds发的邮件,受益匪浅,摘了几段内容附在了 < how to fix bug.xls > 中....
- 逻辑题 – 帽子是黑的还是白的? 老婆每天晚上都会打开一个 智力测试的 APP 然后 有一天就问我这么一道智力题. 有三顶白色帽子 两顶黑色帽子. 有三个人被蒙着眼睛 然后随机的被戴上帽子 其中剩下的两顶就放在隔壁屋 每个人只能看到其他两人帽子的颜色 并不知道自己头顶上帽子的颜色. 每个人只有一次猜对的机会 不能互相交谈 已知第一个人看到其他两个人头顶上的颜色是白色...
- 使用AWK来看见证人生成块的速度 每次见证人出块, 媳妇总我说 “又生了”. 每次出块我总会去算一下离上次出块多少时间, 这是可以通过当前块数和上次出块数算出来的. 首先, 我们可以通过 docker logs 来显示很多很多的记录: 有一个脚本 ./run.sh logs是显示最近几条记录 (tail) 我们可以通过管道...
- STEEM API 系列之获取货币转换 STEEMIT 有 SBD, STEEM, STEEM POWER 还有 VESTS这几个概念. 时不时, 我们就需要知道它们之间几个转换关系: 1个STEEM等于多少SBD? 1个SBD 等于多少STEEM? 1个SP等于多少VESTS? 1M的VESTS...
- 测试 Crontab 是否工作的PHP脚本 LINUX 下的 crontab 是用来定时运行 程序任务的工具. 当然你需要简单配置一下 一般是通过 crontab -e 命令 来编辑. 如果你想简单知道 是否配置正确 和任务实际上会被调用的频率 你可以通过下面简单的PHP脚本来实现....
共享主机(Shared Hosting)和VPS主机的比较
共享主机 vs VPS 主机:关键区别
当我开始我的互联网之旅时,我将我的个人网站放在资源有限的共享主机上,后来我学会了管理服务器(Linux),并将我的网站迁移到 VPS 服务器。我开始开发 Web 应用程序和 API,甚至有一些应用程序在专用服务器(Dedicated Server)上运行。
简介
选择合适的主机托管方案对于网站的性能、可扩展性和安全性至关重要。目前流行的两种选择是共享主机(Shared Hosting)和虚拟专用服务器(VPS Hosting)。虽然它们都相对经济实惠,但在资源分配、性能和管理控制方面存在显著差异。本文将深入探讨这些区别,帮助您做出明智的决策。
什么是共享主机?
共享主机是一种网站托管方式,多个网站共用同一台物理服务器及其资源,包括 CPU、内存和存储空间。这是最经济的选择,适用于小型网站、个人博客和流量较低的企业网站。
共享主机的优点
- 成本低廉,是入门级的理想选择。
- 由主机提供商管理,无需技术经验即可使用。
- 易于设置,通常配备预配置环境和用户友好的控制面板。
共享主机的缺点
- 服务器上的其他网站可能会影响您的网站性能。
- 对服务器设置和自定义的控制权限有限。
- 安全风险较高,一个网站的漏洞可能影响同一服务器上的其他网站。
什么是 VPS 主机?
虚拟专用服务器(VPS)是一种更高级的托管方案,它通过虚拟化技术将物理服务器分割成多个独立的虚拟环境。每个 VPS 都拥有专属的 CPU、内存和存储资源,相比共享主机提供更好的性能和控制权。
VPS 主机的优点
- 独立的资源确保稳定的性能,不受其他用户影响。
- 更高的控制权限,可安装自定义软件并配置服务器。
- 更安全,虚拟环境相互隔离。
- 可扩展性强,可根据需求增加资源。
VPS 主机的缺点
- 相比共享主机,价格更高。
- 需要一定的技术知识来管理和配置。
共享主机与 VPS 主机的主要区别
特性 | 共享主机 Shared Hosting | VPS 主机 |
---|---|---|
资源分配 | 多个用户共享 | 独立的虚拟资源 |
性能 | 可能受其他网站影响 | 更稳定可靠 |
自定义与控制 | 控制权限有限,无 root 访问 | 完全 root 访问,可自由配置 |
可扩展性 | 有限,升级可能需要迁移 | 可轻松扩展资源 |
成本 | 最经济实惠 | 比共享主机更贵 |
安全性 | 共享安全风险 | 独立环境,更安全 |
适合用户 | 小型网站、个人博客 | 成长型企业、高流量网站 |
应该选择哪种主机?
- 选择共享主机:如果您是初学者,拥有一个小型网站,或者希望获得经济实惠且易于管理的解决方案。
- 选择 VPS 主机:如果您的网站需要更多资源、更好的性能,更高的安全性,或者计划未来扩展业务。
结论
共享主机和 VPS 主机各有优劣。若您需要一个预算友好的、易于管理的托管解决方案,共享主机是不错的选择。但如果您追求更好的性能、控制权限和可扩展性,VPS 主机是更具长期价值的投资。
英文:Shared Hosting vs VPS Hosting: Key Differences and Comparisons
服务器
本文一共 960 个汉字, 你数一下对不对.
相关文章:
- VPS 有点慢啊.正在找原因,别着急. 从昨天晚上开始,VPS服务器就变得特别慢,特别多进程,也不知道是哪里不对了,尝试了各种配置,还是不太理想. 明天继续弄.由于是最便宜的未托管的VPS,所以服务商不管啊,什么都得自己配置.LINUX的 Apache2 服务器太多参数了.稍微哪个不对就不行.郁闷. 原因有:一,VPS配置本来就不是很高,1G内存而已,Apache2 很吃内存.二,上面有5个网站,很多搜索引爬虫都太没节操没有限制的在抓取.三,Apache2 的配置参数有问题. 明天继续. 本文一共 157 个汉字, 你数一下对不对. VPS 有点慢啊.正在找原因,别着急.. (AMP...
- 按揭贷款(房贷,车贷) 每月还贷计算器 去年给银行借了17万英镑 买了20万7500英镑的房子, 25年还清. 前2年是定率 Fix Rate 的合同 (年利率2.49%). 每个月大概是还 700多英镑. 有很多种还贷的计算方式, 定率/每月固定 是比较常用的. 简单来说就是 每个月交的钱是...
- 智能手机 HTC One M9 使用测评 虽然我对手机要求不高, 远远没有像追求VPS服务器一样, 但是怎么算来两年内换了四个手机, 先是三星 S4 用了一年多, 然后 Nokia Lumia 635 Windows Phone, 后来又是 BLU, 半年多前换了...
- SteemIt 高级定制微信文章列表 RSS/API/阅读器 v2.0 The Advanced Wechat Group Posts Feed/API/Reader v2.0 Abstract: I have added five parameters to the...
- 同一台服务器上多个WORDPRESS站点的一些设置可以移出去 我自从把所有网站都挪到一处VPS服务器上 就发现很多事情省事很多 可以同时管理多个网站 包括 WORDPRESS博客. 比如我有四个WORDPRESS博客 然后我就把通用的一些资料给移出去 移到 HTTP或者HTTPS都不能直接访问的文件夹里这样就更安全许多. 文件 wp-conn.php 存储了 相同的数据库资料. 1 2...
- 英国房子的EPC节能报告(Energe/Efficiency Performance Certificate) EPC (Energe/Efficiency Performance Certificate) 是英国房子的节能报告, 法律上规定, 每个房子都必须要有一个EPC报告, 报告的有效期为十年. 房东在把房子出租或者想卖房的时候, 这个EPC就必须有效, 在一些情况下 比如出租房子的时候, 这个EPC报告还必须符合一些最低标准, 比如房子必须满足 F档(类似及格线)...
- 怎么样改变屏幕的显示方向? 只要我在家里办公,我儿子们总能趁我起身(泡茶)一小会儿的功夫去按我的键盘.这不,一会儿不知道怎么回事, 我的屏幕就成这样子了. 后来查了, 发现儿子(更有可能是两个儿子各按到一些键)是碰巧按到 CTRL + ALT + 方向下 键.这得是多小的概率啊. 同理,屏幕方向朝上需要按快捷键 Ctrl + Alt +...
- 在英国带孩子去露营全攻略 之前就做了一些露营的准备工作, 因为大儿子Eric 很兴奋说是要去 Camping Holiday 估计是在 Papa Pig 里看到的. 英国有很多可以露营的地方, 最后面选了一个离家开车1个多小时. 看了评论还不错. 地址为: New Road,...
VPS, 专用服务器和云托管专用服务器: 主要区别和建议
理解VPS、专用服务器和云管理专用服务器
选择合适的托管解决方案可能会让人感到困惑,尤其是在当今可用选项繁多的情况下。其中,虚拟专用服务器(VPS)、专用服务器和云管理专用解决方案各自具有独特的优势。在本文中,我们将深入探讨它们之间的区别,并提供建议,帮助您做出明智的决定。
什么是VPS?
虚拟专用服务器(VPS = Virtual Private Server)是在物理服务器上创建的虚拟化环境。使用VPS托管时,您与其他用户共享物理服务器的资源(CPU、内存、存储)。然而,虚拟化技术确保您获得这些资源的专用部分,相比共享主机,提供了更多的控制、灵活性和性能。
VPS托管非常适合需要可扩展性的中小型项目,而不需要支付专用服务器的高成本。
什么是专用服务器?
专用服务器(Dedicated Server)为您提供一整台物理机器,专供您使用。此设置提供无与伦比的性能、定制性和控制力。没有资源共享,您可以根据特定的工作负载优化服务器,使其适用于高流量网站、大型数据库或有高要求的应用程序。
尽管专用服务器提供顶级性能,但它们的价格较高,并且需要高级的技术知识来进行管理。
什么是云管理专用服务器?
云管理专用服务器(Cloud-Managed Dedicated Servers)将专用硬件的优势与云基础设施的灵活性和便捷性结合起来。例如,许多供应商提供裸金属云解决方案,提供专用的CPU和内存,同时融入云的特性,如快速部署、可扩展性和按需计费。
这些解决方案提供专用服务器的原始计算能力,但消除了传统服务器管理的复杂性。它们非常适合那些希望在性能、可扩展性和易用性之间找到平衡的企业。
关键区别
以下是这些托管解决方案之间的主要区别:
- VPS:共享物理资源,价格实惠,可扩展,适合中等负载的项目。
- 专用服务器:专用物理资源,价格昂贵,高度可定制,适合资源密集型任务。
- 云管理专用服务器:专用物理资源,具有云特性如可扩展性和简化的管理。
建议:什么时候选择哪种?
- VPS托管:最适合创业公司、小型企业或正在发展中的开发者,他们需要一个性价比高且可扩展的解决方案。
- 专用服务器:最适合企业、大型网站或需要不妥协性能和完全服务器控制的应用程序。
- 云管理专用服务器:推荐给那些需要专用服务器的计算能力,但又希望拥有云平台的灵活性和管理简易性的企业。
对比表:VPS vs 专用服务器 vs 云管理专用服务器
特性 | VPS | 专用服务器 | 云管理专用服务器 |
---|---|---|---|
资源分配 | 共享物理服务器和虚拟化资源 | 完全专用的物理服务器 | 完全专用的物理服务器 |
性能 | 中等 | 高 | 高 |
可扩展性 | 良好 | 有限(需要硬件升级) | 优秀 |
成本 | 实惠 | 昂贵 | 中等到昂贵 |
管理 | 需要一定的技术知识 | 需要高级专业知识 | 由提供商管理,更简便 |
最适合 | 中小型项目 | 高流量网站、大型应用 | 需要在性能和灵活性之间找到平衡的企业 |
结论
在选择VPS、专用服务器和云管理专用解决方案时,理解您的项目需求至关重要。如果您刚刚起步,VPS托管是一个不错的选择。对于高性能需求,可以选择专用服务器。若您需要在性能、灵活性和管理简便性之间找到平衡,云管理专用服务器值得考虑。
您可以使用VPS数据库工具比较一些VPS供应商。
英文:VPS vs Dedicated Servers vs Cloud-Managed Dedicated Servers: Key Differences and Recommendations
服务器
本文一共 1103 个汉字, 你数一下对不对.
相关文章:
- 按揭贷款(房贷,车贷) 每月还贷计算器 去年给银行借了17万英镑 买了20万7500英镑的房子, 25年还清. 前2年是定率 Fix Rate 的合同 (年利率2.49%). 每个月大概是还 700多英镑. 有很多种还贷的计算方式, 定率/每月固定 是比较常用的. 简单来说就是 每个月交的钱是...
- 智能手机 HTC One M9 使用测评 虽然我对手机要求不高, 远远没有像追求VPS服务器一样, 但是怎么算来两年内换了四个手机, 先是三星 S4 用了一年多, 然后 Nokia Lumia 635 Windows Phone, 后来又是 BLU, 半年多前换了...
- 推荐英国三文鱼的烹饪方法 Tesco超市里都有卖三文鱼, 我最喜欢的是这种没有被烟熏过的. 产地挪威, 生的. 昨天圣诞节特价, 原价 24 镑, 半价只要 12 镑. 果断买了一盒. 其实我最喜欢生吃, 沾着介末吃, 老婆也很喜欢,...
- 共享主机(Shared Hosting)和VPS主机的比较 共享主机 vs VPS 主机:关键区别 当我开始我的互联网之旅时,我将我的个人网站放在资源有限的共享主机上,后来我学会了管理服务器(Linux),并将我的网站迁移到 VPS 服务器。我开始开发 Web 应用程序和 API,甚至有一些应用程序在专用服务器(Dedicated Server)上运行。 简介 选择合适的主机托管方案对于网站的性能、可扩展性和安全性至关重要。目前流行的两种选择是共享主机(Shared Hosting)和虚拟专用服务器(VPS Hosting)。虽然它们都相对经济实惠,但在资源分配、性能和管理控制方面存在显著差异。本文将深入探讨这些区别,帮助您做出明智的决策。...
- SteemIt 高级定制微信文章列表 RSS/API/阅读器 v2.0 The Advanced Wechat Group Posts Feed/API/Reader v2.0 Abstract: I have added five parameters to the...
- 时代不同, 我儿子10岁就能通过github pages做一个静态网站 今天,我二娃搞了一个网页/网站,他通过 GitHub Pages 完成的,其实不难。几天前,他注册了一个 GitHub 账户(被戏称为全世界最大的“同志网站”——gayhub),取了个 ID,叫做 faceless15748。他说 faceless15 已经被人注册了。 他还自学了 HTML 和 Markdown,并且稍微懂一些 JavaScript...
- 怎么样改变屏幕的显示方向? 只要我在家里办公,我儿子们总能趁我起身(泡茶)一小会儿的功夫去按我的键盘.这不,一会儿不知道怎么回事, 我的屏幕就成这样子了. 后来查了, 发现儿子(更有可能是两个儿子各按到一些键)是碰巧按到 CTRL + ALT + 方向下 键.这得是多小的概率啊. 同理,屏幕方向朝上需要按快捷键 Ctrl + Alt +...
- 同一台服务器上多个WORDPRESS站点的一些设置可以移出去 我自从把所有网站都挪到一处VPS服务器上 就发现很多事情省事很多 可以同时管理多个网站 包括 WORDPRESS博客. 比如我有四个WORDPRESS博客 然后我就把通用的一些资料给移出去 移到 HTTP或者HTTPS都不能直接访问的文件夹里这样就更安全许多. 文件 wp-conn.php 存储了 相同的数据库资料. 1 2...
新年给博客迁新服
1/8日更新:3天AWS新服体验不佳,吃灰已久的Jetpack宕机监控功能3天下来跳了几次,已迁至阿里云港服。从
到
再到
,博客站物理位置离自己更近了
。
博客重新上线时用的是Amazon Lightsail最低标准,配置是512MB内存 2vCPU,每月3刀,一个WordPress小博客站点够用了。用了一段时间有了折腾后发现不够用,就单单一次上传多个图片就能给整爆失联,得重启服务器恢复。后来干脆快照形式搬迁至1GB内存 2vCPU配置,每月5刀,用到现在没出现什么问题,期间亚马逊AWS还涨过一次价至7刀。
以上用的实例位置均在新加坡,期间有博友发现其无法畅通访问得挂梯子并告诉我(其实我自己用的网络环境中并没有遇到过,网络运营商处理这些在我看来有点玄学)。之后就心念着想换位置,理想位置是香港,毕竟是没有备案的最佳选择。还有一个想换的原因是用Bitnami栈打包的Apache服,怎么说呢,Bitnami非常好非常安全非常稳定,但对我来说太麻烦了,修改一些文件权限要整来整去,一些服务版本的更新还得大动干戈,就想换成原味。主要是自己的懒惰,就一直搁着。
新年嘛,就趁新年第一个周末给站点搬家。看了阿里云ECS和腾讯云CVM,最终选择了老东家亚马逊。亚马逊的EC2有港服,但没港服的Lightsail它更便宜!选了和原来一样的配置7刀/月,不同的是位置从新加坡换到了日本,离中国近一点哈哈,经过测试真的是快了一点~阿里云和腾讯云的轻量应用服务器也便宜且有港服,但当我看到“建站内容也是受限制的,出现违规域名会被封禁。”时总觉得会缺少点什么,虽然自己爱国守法,但还是算了,这些年使用过和正在使用的服全是外面的,也无所谓运营商玄学,就对搬回来这欲望并不是那么强烈。
周六上午就开好实例,用Debian12作服务器系统,习惯了Debian,很好。下午只需要旧服备份数据新服搭建环境后一气呵成。然而过程中出了一些状况,需要放下手头其他事,搁置了已经进行到一半的搬迁事宜。当时就连把域名解析回旧服ip从而恢复访问的操作都不想做,出现502 404 TIMED OUT之类已经无所谓了,因为儿子生病了。
周六当天儿子出现两次呕吐症状,第一次呕吐物比较少,里面有少许上午吃的水果。期间儿子还说过自己肚子痛痛,但我们仅凭他当时精神状态很正常,并就有没太多处理,只是揉揉肚子和各种无知的揣测原因。隔三四个小时后出现第二次呕吐,我们这时才意识到问题的严重性,并立马带他去医院,医生给的诊断结果是小儿病毒性肠炎。晚上儿子就出现发热症状,又是一个不眠夜。第二天还在发热,但属于低烧范围,已经不会再呕吐,也说肚子不痛痛了,状态也不错。
周日下午才有完全属于自己的时间接着去处理搬新服后续的事,算是比较顺利。出现问题是服务器莫名过载让网站无法访问,SSH也连接不上且持续很长时间,得重启服务器恢复。线索来源于“PHP message:Connection refused”,先排查插件发现W3TC所使用的缓存方式会导致此问题,Redis与Memcached都试过但问题依旧,干脆先停用,反正新服速度不错。病根应该是php,先搁置,等有空再处理~ //已解决,PHP权限问题
Lightsail真的很Light很轻量,CPU给压的死死的,便宜嘛,这货持续高负载就卡挂。属于突增型,就是说你平时使用CPU的利用率低于10%时(性能基准,实例配置不同基准百分比不同),能积累一种“能量”,当CPU利用率高于10%时,累积的“能量”就会消耗,如果持续高负载直至“能量”耗尽,CPU最大利用率就会压回10%,这就是为什么会挂掉的原因。以上是我对突增型服务器的理解,也罢,够用!
2025年了,看到大家都在写总结,晒清单,立新年Flag,由衷佩服大家的行动力,这是身为一个博主应该拥有的积极人生态度啊,反观自己真的是弱爆了。我属于是佛系,博客更新频率低,写的东西也属于肤浅的记录。时间是有的,陪小朋友、玩游戏、刷手机是我工作时间以外最放松的时候,所以不想“浪费”在写博文上。偶尔打开Follow看看大家写了啥,说真的点开订阅也成为另一种心理负担,因为每次点开后这么多的未读文章,每篇都想点进去瞄一眼,这时间就刷刷走了~

哪吒监控 1.5.1 自定义头像
对于哪吒监控自带的授权登录,最近不知道是github问题还是什么问题,一直登录失败。醒着直接升级下监控版本,结果,效果很不错,成功升级了。
感觉是换了一个全新的版本,但是这个版本确登录不了。
多次尝试更新之后,终于默认账号登录成功了,但是,伴随而来的是另外的一个问题。所有的监控项都没了,并且首页提示websocket建立失败。查阅文档才发现,新的版本需要将websocket一块进行代理:
server { listen 443 ssl http2; listen [::]:443 ssl http2; # http2 on; # Nginx > 1.25.1,请注释上面两行,启用此行 server_name dashboard.example.com; # 替换为你的域名 ssl_certificate /data/letsencrypt/fullchain.pem; # 域名证书路径 ssl_certificate_key /data/letsencrypt/key.pem; # 域名私钥路径 ssl_stapling on; ssl_session_timeout 1d; ssl_session_cache shared:SSL:10m; # 如果与其他配置冲突,请注释此项 ssl_protocols TLSv1.2 TLSv1.3; underscores_in_headers on; set_real_ip_from 0.0.0.0/0; # 替换为你的 CDN 回源 IP 地址段 real_ip_header CF-Connecting-IP; # 替换为你的 CDN 提供的私有 header,此处为 CloudFlare 默认 # 如果你使用nginx作为最外层,把上面两行注释掉 # grpc 相关 location ^~ /proto.NezhaService/ { grpc_set_header Host $host; grpc_set_header nz-realip $http_CF_Connecting_IP; # 替换为你的 CDN 提供的私有 header,此处为 CloudFlare 默认 # grpc_set_header nz-realip $remote_addr; # 如果你使用nginx作为最外层,就把上面一行注释掉,启用此行 grpc_read_timeout 600s; grpc_send_timeout 600s; grpc_socket_keepalive on; client_max_body_size 10m; grpc_buffer_size 4m; grpc_pass grpc://dashboard; } # websocket 相关 location ~* ^/api/v1/ws/(server|terminal|file)(.*)$ { proxy_set_header Host $host; proxy_set_header nz-realip $http_cf_connecting_ip; # 替换为你的 CDN 提供的私有 header,此处为 CloudFlare 默认 # proxy_set_header nz-realip $remote_addr; # 如果你使用nginx作为最外层,就把上面一行注释掉,启用此行 proxy_set_header Origin https://$host; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection "upgrade"; proxy_read_timeout 3600s; proxy_send_timeout 3600s; proxy_pass http://127.0.0.1:8008; } # web location / { proxy_set_header Host $host; proxy_set_header nz-realip $http_cf_connecting_ip; # 替换为你的 CDN 提供的私有 header,此处为 CloudFlare 默认 # proxy_set_header nz-realip $remote_addr; # 如果你使用nginx作为最外层,就把上面一行注释掉,启用此行 proxy_read_timeout 3600s; proxy_send_timeout 3600s; proxy_buffer_size 128k; proxy_buffers 4 256k; proxy_busy_buffers_size 256k; proxy_max_temp_file_size 0; proxy_pass http://127.0.0.1:8008; } } upstream dashboard { server 127.0.0.1:8008; keepalive 512; }
而至于数据丢失,官网也写了:
这就很棒。只能重新添加所有服务器,添加之后感觉一切正常了,但是后台那个头像实在是无法忍受。
尼玛,这苦大仇深的表情,作为小仙女坚决不能忍啊。在杜老师的聊天室,交流了一下,他也不知道怎么改。只能尝试js暴力修改src,代码如下:
var images = document.querySelectorAll('img[alt="obaby"]'); images.forEach(function(image) { console.log(image); console.log('first inject to replace avatar!'); image.src = "https://g.h4ck.org.cn/avatar/3a78942c4ddcda86242f20abdacee082?s=256&d=identicon&r=g"; });
然而,将这段代码加入到系统设置的自定义代码内,会发现多数情况下都不能调用,只能通过差距js的方式进行调用,并且哪吒还有个问题,那就是对于其他域名下的js会加载失败,所以只能把js放到同一个服务器下。
后台添加配置:
此时js代码多数情况都能正常调用,为了能够加载这个js,需要修改nginx配置文件将js路径加入nginx配置文件:
location /inject/{ alias /home/wwwroot/s.h4ck.org.cn/inject/; }
此时,顶部的头像已经修改成功了,但是下面的头像还是旧的,就很蛋疼。如果查看页面源码会发现基本都是js绘制的,本身并没有任何的内容。
遇事尝试使用nginx的替换功能进行内容替换,
location / { proxy_set_header Host $host; #proxy_set_header nz-realip $http_cf_connecting_ip; # 替换为你的 CDN 提供的私有 header,此处为 CloudFlare 默认 proxy_set_header nz-realip $remote_addr; # 如果你使用nginx作为最外层,就把上面一行注释掉,启用此行 proxy_read_timeout 3600s; proxy_send_timeout 3600s; proxy_buffer_size 128k; proxy_buffers 4 256k; proxy_busy_buffers_size 256k; proxy_max_temp_file_size 0; proxy_pass http://127.0.0.1:8008; sub_filter 'https://api.dicebear.com/7.x/notionists/svg?seed=' 'https://g.h4ck.org.cn/avatar/3a78942c4ddcda86242f20abdacee082?s=256&d=identicon&r=g&name='; sub_filter_once off; }
然而,这种替换方式竟然只有首次生效,不知道是不是nginx配置问题,最终还是回到了直接修改js文件的方法。
拉出app文件,这个东西是编译的的elf文件,看了下字符串长度过长,替换有些麻烦,也没趁手的elf编辑器,就很麻烦。
转换思路,不好改二进制,那就改对应的js文件,编辑/dashboard/assets/index-CeBwNjOv.js 替换内部的https://api.dicebear.com/7.x/notionists/svg?seed=。
同时将文件头的import改为绝对路径,参考https://s.h4ck.org.cn/inject/index-obaby.js:
修改之前的内容替换代码为:
location / { proxy_set_header Host $host; #proxy_set_header nz-realip $http_cf_connecting_ip; # 替换为你的 CDN 提供的私有 header,此处为 CloudFlare 默认 proxy_set_header nz-realip $remote_addr; # 如果你使用nginx作为最外层,就把上面一行注释掉,启用此行 proxy_read_timeout 3600s; proxy_send_timeout 3600s; proxy_buffer_size 128k; proxy_buffers 4 256k; proxy_busy_buffers_size 256k; proxy_max_temp_file_size 0; proxy_pass http://127.0.0.1:8008; sub_filter '/dashboard/assets/index-CeBwNjOv.js' '/inject/index-obaby.js'; sub_filter_once off; }
重启nginx
通过下面的命令查看是否支持sub_filter ,如果不支持重新编译nginx:
否则会爆下面的错误:
此时头像就ok啦:
另外一个,就是那个命令窗口,V0版本是个全屏的,这V1弄了个小窗口,看着是真tm蛋疼:
这是纯粹为了难看(手动狗头)?
同样通过js修改页面样式:
setTimeout(function () { if (window.location.pathname.includes('terminal')) { console.log("这段代码将在3秒后执行"); var terminals = document.getElementsByClassName('xterm-screen'); for (var i = 0; i < terminals.length; i++) { console.log('change screen size'); terminals[i].setAttribute("style", "width: 941px; height: 900px;") } var divs = document.getElementsByClassName('max-w-5xl mx-auto'); for (var i = 0; i < divs.length; i++) { console.log('change screen size'); divs[i].setAttribute("style", "max-width: 100%;max-height: 100%") } } // ... 执行其他操作 }, 500); // 3000毫秒等于3秒
在引入的js文件中使用windows.onload无法触发,直接延迟执行即可,调整后效果。
看起来顺眼多了,修改顶部图标以及favicon:
var imgElements = document.getElementsByClassName('h-7 mr-1'); for (var i = 0; i < imgElements.length; i++) { imgElements[i].src = 'https://image.h4ck.org.cn/support/uugai.com-1661691272754.png'; } var images = document.querySelectorAll('img[alt="apple-touch-icon"]'); images.forEach(function (image) { console.log(image); console.log('change logo!'); image.src = "https://image.h4ck.org.cn/support/uugai.com-1661691272754.png"; }); var faviconurl = "https://image.h4ck.org.cn/support/uugai.com-1661691272754.png"; /* 替换为自己的 Logo 图片链接 */ var link = document.querySelector("link[rel*='icon']") || document.createElement('link'); link.type = 'image/png'; link.rel = 'shortcut icon'; link.href = faviconurl; document.getElementsByTagName('head')[0].appendChild(link);
最终效果:
看起来好多了,最终js文件:
https://s.h4ck.org.cn/inject/index-obaby.js
https://s.h4ck.org.cn/inject/avatar.js
MySQL参数一键配置脚本: 有效提升数据库性能
我一直是自己租用VPS服务器,然后搭建各种服务,比如博客就是Apache2+MySQL数据库。一般来说就是默认参数,没有去管,不过最近发现MySQL的性能参数都很保守,不能发挥整个服务器的性能。
然后我就网上搜索了一下,根据参数配置建议,用ChatGPT写了以下Python和BASH脚本。只需要在需要优化的服务器上,跑一下该脚本,然后就会显示参数配置,然后直接把参数添加到MySQL数据库配置参数文件上: /etc/mysql/mysql.conf.d/mysqld.cnf
然后运行: service mysql restart 重启MySQL服务器。
运行了几周,发现效果很好,博客反应速度也快了很多,这很大原因是根据了内存增加了MySQL缓存大小。
Python脚本优化MySQL数据库参数
把下面的Python脚本存成 mysql_config.py 然后运行 python3 mysql_config.py
def get_total_ram(): with open('/proc/meminfo', 'r') as f: for line in f: if line.startswith("MemTotal:"): total_ram_kb = int(line.split()[1]) return total_ram_kb * 1024 # 转换为字节(bytes) return 0 # 如果未找到 MemTotal,则返回 0 def calculate_mysql_settings(): # 获取总内存(以字节为单位) total_ram = get_total_ram() # 根据总内存(以字节为单位)计算 MySQL 配置 innodb_buffer_pool_size = int(total_ram * 0.3) # 使用内存的 30% key_buffer_size = min(total_ram * 20 // 100, 512 * 1024 * 1024) # 使用内存的 20%,最大限制为 512MB sort_buffer_size = min(total_ram * 25 // 1000, 4 * 1024 * 1024) # 使用内存的 0.25%,最大限制为 4MB read_rnd_buffer_size = min(total_ram * 625 // 100000, 512 * 1024) # 使用内存的 0.0625%,最大限制为 512KB tmp_table_size = max_heap_table_size = min(total_ram * 5 // 100, 64 * 1024 * 1024) # 使用内存的 5%,最大限制为 64MB join_buffer_size = min(total_ram * 2 // 1000, 4 * 1024 * 1024) # 使用内存的 0.2%,最大限制为 4MB table_open_cache = min(400 + (total_ram // 64), 2000) # 根据内存动态计算,最大限制为 2000 thread_cache_size = min(total_ram * 15 // 1000, 100) # 使用内存的 1.5%,最大限制为 100 innodb_log_buffer_size = min(total_ram * 5 // 100, 16 * 1024 * 1024) # 使用内存的 5%,最大限制为 16MB # 以字节为单位打印配置 print(f"MySQL 配置(基于总内存 {total_ram / (1024 * 1024):.2f} MB):") print("将以下内容添加到 /etc/mysql/mysql.conf.d/mysqld.cnf 的末尾\n") print(f"innodb_buffer_pool_size = {innodb_buffer_pool_size}") print(f"key_buffer_size = {key_buffer_size}") print(f"sort_buffer_size = {sort_buffer_size}") print(f"read_rnd_buffer_size = {read_rnd_buffer_size}") print(f"tmp_table_size = {tmp_table_size}") print(f"max_heap_table_size = {max_heap_table_size}") print(f"join_buffer_size = {join_buffer_size}") print(f"table_open_cache = {table_open_cache}") print(f"thread_cache_size = {thread_cache_size}") print(f"innodb_log_buffer_size = {innodb_log_buffer_size}") # 打印自定义设置 print("expire_logs_days = 3") print("max_binlog_size = 100M") if __name__ == "__main__": calculate_mysql_settings()
会打印出类似以下的配置:
innodb_buffer_pool_size = 626468044 key_buffer_size = 417645363 sort_buffer_size = 4194304 read_rnd_buffer_size = 524288 tmp_table_size = 67108864 max_heap_table_size = 67108864 join_buffer_size = 4176453 table_open_cache = 2000 thread_cache_size = 100 innodb_log_buffer_size = 16777216 expire_logs_days = 3 max_binlog_size = 100M
添加到MySQL的配置文件:/etc/mysql/mysql.conf.d/mysqld.cnf 然后重启数据库即可:service mysql restart
BASH脚本优化MySQL数据库参数
以下是完成同样功能的BASH脚本。
#!/bin/bash # 获取总内存大小(以字节为单位) get_total_ram() { # 从 /proc/meminfo 中提取总内存(以 kB 为单位) total_ram_kb=$(awk '/^MemTotal:/ {print $2}' /proc/meminfo) if [[ -z "$total_ram_kb" ]]; then echo 0 # 如果未找到 MemTotal,则返回 0 else echo $((total_ram_kb * 1024)) # 将 kB 转换为字节 fi } # 根据总内存大小计算 MySQL 配置 calculate_mysql_settings() { # 获取总内存(以字节为单位) total_ram=$(get_total_ram) # 计算 MySQL 配置参数 innodb_buffer_pool_size=$((total_ram * 30 / 100)) # 使用内存的 30% key_buffer_size=$(($((total_ram * 20 / 100)) < $((512 * 1024 * 1024)) ? $((total_ram * 20 / 100)) : $((512 * 1024 * 1024)))) # 使用内存的 20%,最大限制为 512MB sort_buffer_size=$(($((total_ram * 25 / 1000)) < $((4 * 1024 * 1024)) ? $((total_ram * 25 / 1000)) : $((4 * 1024 * 1024)))) # 使用内存的 0.25%,最大限制为 4MB read_rnd_buffer_size=$(($((total_ram * 625 / 100000)) < $((512 * 1024)) ? $((total_ram * 625 / 100000)) : $((512 * 1024)))) # 使用内存的 0.0625%,最大限制为 512KB tmp_table_size=$((total_ram * 5 / 100 < 64 * 1024 * 1024 ? total_ram * 5 / 100 : 64 * 1024 * 1024)) # 使用内存的 5%,最大限制为 64MB max_heap_table_size=$tmp_table_size # 临时表大小等于最大堆表大小 join_buffer_size=$(($((total_ram * 2 / 1000)) < $((4 * 1024 * 1024)) ? $((total_ram * 2 / 1000)) : $((4 * 1024 * 1024)))) # 使用内存的 0.2%,最大限制为 4MB table_open_cache=$(($((400 + total_ram / 64)) < 2000 ? $((400 + total_ram / 64)) : 2000)) # 根据内存动态计算,最大限制为 2000 thread_cache_size=$(($((total_ram * 15 / 1000)) < 100 ? $((total_ram * 15 / 1000)) : 100)) # 使用内存的 1.5%,最大限制为 100 innodb_log_buffer_size=$(($((total_ram * 5 / 100)) < $((16 * 1024 * 1024)) ? $((total_ram * 5 / 100)) : $((16 * 1024 * 1024)))) # 使用内存的 5%,最大限制为 16MB # 打印配置(以字节为单位) echo "MySQL 配置(基于总内存 $((total_ram / (1024 * 1024))) MB):" echo "将以下内容添加到 /etc/mysql/mysql.conf.d/mysqld.cnf 的末尾" echo echo "innodb_buffer_pool_size = $innodb_buffer_pool_size" echo "key_buffer_size = $key_buffer_size" echo "sort_buffer_size = $sort_buffer_size" echo "read_rnd_buffer_size = $read_rnd_buffer_size" echo "tmp_table_size = $tmp_table_size" echo "max_heap_table_size = $max_heap_table_size" echo "join_buffer_size = $join_buffer_size" echo "table_open_cache = $table_open_cache" echo "thread_cache_size = $thread_cache_size" echo "innodb_log_buffer_size = $innodb_log_buffer_size" echo echo "expire_logs_days = 3" # 日志过期天数设置为 3 天 echo "max_binlog_size = 100M" # 最大二进制日志大小设置为 100M } # 主函数调用 calculate_mysql_settings
需要注意的是,我在脚本后面加入了一些我自定义的配置,根据需求自行修改即可。在配置文件里,后面定义的会覆盖前面的,这就是为什么要添加到文件尾的原因。
其中最关键的配置 innodb_buffer_pool_size 我设置为使用当前内存的30%,如果服务器只有数据库/博客这个功能,可以适当的提高比例,比如60%-80%。
英文:Python/Bash Script to Print the Optimized Parameters for MySQL Servers
运维/DevOps
- MySQL参数一键配置脚本: 有效提升数据库性能
- 把 MySQL 中的 MyISAM 表格转换成 InnoDB 的PHP小工具
- 通过 MySQLTuner 来检查数据库配置
- 升级到 PHP 5.5 之后内置 OpCache 加速缓存
- VPS低配置服务器优化的一些方法
- 如何在 Linux 下 列出最耗资源的进程 (BASH 脚本)
- 在LINUX下循环备份的方法
- 更改Wordpress博客全站的评论名称
- 几条Wordpress 博客 有用的 SQL 语句

相关文章:
- 步步高学生电脑上 Basic 编程语言 peek 用法示例 步步高学生电脑 是8位FC机的经典之作.它上面的BASIC有三个版本 1.0, 2.0 和 2.1 2.1 版本有个在线帮助,实际上是 help.cmd 1.0 是用 Esc 键退回到 DOS 的,...
- 一张图告诉你北京的雾霾有多严重 一北京的朋友朋友圈发的: 左上为全新口罩;右上为全新口罩本周一到周五每天室外戴20分钟左右;左下为全新口罩今早室外+公交车戴一个半小时;右下为全新口罩今早开车戴一小时左右. 还有这图 空气污染 – 红色的是严重的.中国,尤其是华北地区,是全球最红的地区,没有”之一”. 本文一共 113 个汉字, 你数一下对不对. 一张图告诉你北京的雾霾有多严重. (AMP 移动加速版本) 赞赏我的几个理由. ¥...
- 你给SteemIt中文微信群拖后腿了么? 这年头不缺算法, 就缺数据. 这两天花了很多时间在整API上, 整完之后自己用了一下还觉得真是挺方便的. 今天就突然想看一看自己是否给大家拖后腿了, 于是调用每日中文区微信群排行榜单的API, 刷刷拿着 NodeJs 练手: 1 2 3 4 5 6...
- 穷举算法的应用 – 去除EXCEL文件中的保护 EXCEL 是可以用密码来保护的. 比如 这个EXCEL 就用了密码保护. 打开EXCEL文件 你会注意到 无法编辑 无法查看宏(VBA)的代码. 去除保护很简单 第一步先编辑宏 VBA 把下面的VBA代码拷贝到VBA编辑器里 并按下F5运行 1...
- 谈谈 Utopian 成立公司 就在刚刚 Utopian 的老板 @elear 在 帖子和 discord 上宣布在 意大利成立 Utopian 公司. 可喜可贺! 这开始只是 Steem 上的一个小项目,...
- 步步高多媒体学生电脑 汇编程序设计 – 1 英文同步 90年代后期步步高生产的软驱一号(又称步步高多媒体学生电脑)和98型学生电脑都带了软驱,一按电源件, 都从软盘启动(98型可以从内置的电子盘启动) 步步高提供了直接在学习机上写汇编开发的工具 BASM. BASM 可以用来写 6502 汇编,并可以编译成 CMD 小型可执行程序 不支持 EXC 程序. CMD...
- 按揭贷款(房贷,车贷) 每月还贷计算器 去年给银行借了17万英镑 买了20万7500英镑的房子, 25年还清. 前2年是定率 Fix Rate 的合同 (年利率2.49%). 每个月大概是还 700多英镑. 有很多种还贷的计算方式, 定率/每月固定 是比较常用的. 简单来说就是 每个月交的钱是...
- 舍得给员工培训的公司是好公司 最近出差比较多, 很多人问我都干嘛去. 各种开会, 各种培训. 公司从剑桥一个软件公司请了一个专业的软件专家来做软件工程上的顾问. 我是 R&D 研发经理, 所以很自然的就要和他经常讨论, 然后目标是把当前公司的软件开发流程给完善, 提高, 把以前做的不对的得整对了. 培训的内容很多, 让我觉得以前公司完全就是在瞎搞, 什么...
blog搬家
11月末有好几件事让人焦虑。除了单位的工作以外,还有我自己的blog。因为我们合租的服务器到期了,11月28日到期。据说我们已经连续在那个服务器供应商那里好多年,我感觉有10年以上。那这一次我们觉得真的要离开了,因为那个供应商在我们提交了工单以后,半天都不回复,其次就服务器的性能来说,其实那家不算太好,虽然访问速度我个人觉得在广东电信之下还是可以的。服务器也比较稳定,试过宕机,但是几率不高。一直以来我都觉得在WordPress的后台没法用,自带的导出功理论能把全站的内容导出,我们可能是那个空间的设定的问题,每次当我下载不到2MB的时候就会停掉,结果打开那个xml文件实际上是不完整的,所以我根本没办法做全站的导出,我只能手动地分段导出文章,但那样的话,我就会丢失其它所有内容。
今年3月开始,包租公就告诉我要备份了。因为他忘记了服务器的密码。所以经典的那个WordPress搬家方式不可行,我得用其它方式把WordPress的东西全部备份出来,那个时候我觉得这根本是不可能完成的任务,但后来的确有牛逼的插件能做这个。一开始包租公告诉我,是10月到期,于是10月的时候我就找他,10月底的时候我继续找他,然后他告诉我11月到期,我不确定11月什么时候到期,有一天突然服务器宕机了,我以为是我们到期了,虽然前一天我已经做好备份,但是突然打不开,让人忐忑,结果被告知,我们还没到期,我们到期的日期是11月28日,所以11月25日的时候,我又找包租公。他居然把那个给忘记了,但是他很快就买了新的空间,然后开始往里面装东西。我们的速度很快,在11月26日我们就已经完成了搬家,虽然有一些奇怪的东西还是好像没有完全解决,但总的来说,基本上所有东西,能一次性挪走的都已经挪走了,至于哪些东西出了问题,我还没办法逐一检查出来,检查不出来的只能发现一个解决一个。其中一个比较明显的问题是有些页面有140多条评论,但实际上前台只显示了两条,当我在后台查询的时候,我的确能看到140多条,所以为什么会出现这种情况呢?其它文章评论看上去是正常的,我没有仔细的数过,但起码你能看到评论有很多,至于是不是显示多少条的那个数量,我没有仔细研究过,但为什么一些页面的评论展示数量是正常的,而另外一些却不行呢?这件事情很诡异。我记得当我用插件完成搬家的时候,除了完成按钮以外还有两个链接一个是永久链接的设置,另外一个是评论插件。在我印象之中,我没有使用任何评论插件。永久链接在那个,搬家插件之前那个版本,永久链接会神经病,得手动重选,但在这个新的插件里搬家完毕后,好像永久链接依然会以我自定义的形式显示,没有出现问题,但我还是按照以前的步骤走了一遍。
搬家的时候,我用的是IP地址,但搬家完毕以后,我把IP地址绑定到了我的域名,后来我又发现媒体文件那里当我从某个前台地址打开图片,图片显示的不是域名地址,显示的是IP地址。这算是一个很傻瓜的问题,肯定可以通过一波替换全部处理掉。域名也好,IP地址也好,实际上都能指向那个图片,万一我换了一个网址呢?那个图片就会变成失效。这种东西可以通过在后台数据库做替换简单解决,但这也是搬家过程之中经常会发生的事情。哪怕不是搬家,是从http变成https也会有这种毛病,所以为什么我就没有一种快捷的方式替换掉所有这些东西呢?
但总算搬家这个事情解决了,而且好长一段时间,我都不需要在这个问题上操心。
弱鸡鸡的机房
某次单位进行电力监控的升级改造,要在半夜的时候断电进行操作。理论上大半夜没有作业,大家都在睡觉,这样的操作影响应该是最低的,但关键是第二天,整个单位的业务瘫痪了。因为浪潮的智能化系统挂掉了。我一整天都不知道是怎么回事,反正就好像单位那个刷车车船排队的网页无论如何打不开,理论上正常的话,单位早上8、9点就会有重车校验的图片以及说明,但是那一天一整天都没有,从调度信息来看,理论上那天是要装船的,但是车船记录都没有。我以为是微信在平板上登录了,但实际上没有,所以我退出了手机的微信。我还清楚记得那天是周日,因为那天傍晚吃过晚饭我回单位,但结果是当我准备从家里离开的时候,打开手机打开微信才发现单位同事找我要前几天的库存数据。一个管网络的人找我要库存数据,你们的数据就没有备份?后来我才知道,因为半夜进行电力改造,但是单位的服务器没有提前手动关掉,所以对服务器来说,等于是突然断电,突然断电导致数据丢失,并且出现莫名其妙的错误。
机房的升级改造之前,浪潮的数据库会出现错误,绝大多数情况都是缓存数据满了,于是新的数据没法写入,这时,你能看到非常明确的提示,接下来,网管同志就知道该如何做了,另外一个情况就是整个系统越用越慢,这种情况谁也说不清到底是怎么回事,但重启一下就好了。
电力监控改造是有计划的,但是管机房的人却少了这个心眼手动把数据库关掉。在机房改造之前,我不知道那里有多少设备、有多少UPS,直到周二我去询问情况的时候才被告知,现在的机房服务器的设备多了很多,UPS也大了很多,但现在的UPS蓄电池只能支撑两个小时。两个小时能做什么?即便机房24小时都有人值守,但可能打个瞌睡都不止两个小时了。
这一次也是一个周日,我们遇到了也说不准到底是什么原因的突然停电,而且是半夜停电,可想而知,服务器们又是突然就挂掉,因为那些UPS甚至无法支撑到天亮就全部耗尽了。停电的那一天,我第一走进机房,看到那些UPS蓄电池的放置场所我的第一个反应是为什么就只放半人高呢,又是周二,我才被告知,那个地板的承受能力也就只能在那个面积上面堆这么多蓄电池了。我感觉那堆蓄电池的占地大概几个平方。虽然堆起来密度已经不小了,但是它们却仅仅能支撑十几米一堵墙那么多服务器两个小时的电量,可能除了那些服务器以外,还包括空调。在改造之前,据说以前的UPS只能支撑20分钟。20分钟,我即便收到信息马上赶过来都赶不上,但2个小时,如果发生在半夜,同样无解。为什么要搞UPS呢?就是为了停电的时候还有个后路,但2个小时的设计等于没有路。既然升级机房的时候你要选择华为分布式的服务器,华为怎么可能不告诉你我至少得有多少UPS蓄电池支持才能持续运行多长时间。
UPS不能保证你一直没有问题,但起码得支撑到管理员到达现场处理或者远程处理。让我觉得非常不可理解的是为什么他们既然知道UPS在启动了、UPS的电量不足了,但是服务器却没有一个逐步保存关闭的程序。突然断电服务器肯定受损,而且那种受损是你无法预知到底损在了哪里。知道没有电,就进行逐步自动关闭,等于是模仿人工应急的操作,能把损害降到最低,为什么就没有这个自动自我关闭的设定呢?是华为自己没有这个设定,还是浪潮根本就没往这方面想?为什么其它的机房不会有这种问题,人家的UPS蓄电池到底用多久?别人的电路到底有多少条?为什么别人能保证当这一条电路不行的时候能切换到另外一条?哪怕都不行了以后,依然能保证服务器里面的东西安全。
周日的停电,除了让我们的生活非常痛苦以外,现在的后遗症很明显,就是浪潮的应用跟数据库出岔子了。整套智能化系统基本属于瘫痪的状态。突然停电算是意外的天灾,但是一次又一次在同一个问题上摔跤,依然没有一个确切的解决方案,这就是人祸。
2024年的第一篇文,比以往来得更晚一些

讲一件事情
起因:服务器到期了
经过:服务器的境况,首年新用户优惠才千把块,但是续费的话就翻几倍。提前接到续费的通知时,想着是换新地方?还是干脆把博客关了,等有空再重新买服务器回来折腾?思想反复横跳,再等等,再等等。时间就这么慢慢过去,直到服务器离到期还有5个小时的时候,冲动的顿悟(麻痹在健康面前,钱算个毛,就冲了,然后一冲就动了),及时给服务器喂了一口奶。
结果:博客成功续命一年,花了小几千,心率和血压有一分钟左右的暂时性升高。
优雅的文字,东施效鼙
也许,大部分写博客的男人面对互联网和数码技术时,都常常难以自控。一旦沉浸在博客折腾更新、社交媒体的动态中,时间仿佛在指缝间溜走,其他事情都被挤占了。每次打开电脑和手机,都能找到无数个理由继续留在虚拟的世界里,却忽视了生活中的其他美好。
也有可能我理解偏差,只是我有这个问题。
回头看看博客接近一年的空白,几乎被遗忘在角落里,并不是因为我失去了对博客折腾的热情,而是我的注意力被其他兴趣所吸引。
文雅的说法:这不仅仅是一个简单的停滞,而是一段向未知方向自我探索的旅程。
自认洒脱的文字,其实胸无点墨
通俗的说法:尼玛的,一年的服务器钱,没有更新一篇文章,跑去弄啥咧,煞笔玩意。

秋日的午后,听着窗外的拖拉机哒哒哒的轰鸣,心情也跟着澎湃起伏,思绪万千。飞牛高低要整一篇文章出来,不为什么,只为了当时的冲动而做些什么,让自己心安理得。
显然很长一段时间没有写过东西。期间,泡了一泡茶、假寐了三次、抽了七支烟,故作高雅、假装思考、瞎找灵感,写下了这篇惊世骇俗的水文。
接下来,可能会经常更新博客,也有可能明年的这个时候续费再来水一篇,以应付明年的冲动。
判断服务器的硬盘类型: 是否是固态硬盘/NVMe
拿到服务器,想看是否是固态硬盘(SSD/NVMe),可以用以下几种方法,还有另一种方法是使用“dd”命令来测试硬盘的读写速度。
检查磁盘类型:SSD(固态硬盘)
要检查 VPN 服务器上的磁盘是否为 SSD固态硬盘,您可以根据操作系统使用以下方法之一:
Linux
在 Linux 上,您可以使用以下命令检查磁盘是否为 SSD:
方法 1:使用 lsblk
lsblk -d -o name,rota
示例输出:
NAME ROTA
loop0 1
loop1 1
loop2 1
loop3 1
sda 1
ROTA 列显示设备是否为旋转式(1)或非旋转式(0)。
如果 ROTA 为 0,则设备可能是 SSD。
方法 2:使用 cat 查看 /sys/block
cat /sys/block/sdX/queue/rotational
将 sdX 替换为您的实际磁盘(例如,sda、sdb)。
如果输出为 0,则该磁盘为 SSD/固态硬盘。如果为 1,则为 HDD。
方法 3:使用 lsblk 的 -D 选项(用于丢弃/Discord功能)
lsblk -D
示例输出:
NAME DISC-ALN DISC-GRAN DISC-MAX DISC-ZERO
loop0 0 4K 4G 0
loop1 0 4K 4G 0
loop2 0 4K 4G 0
loop3 0 4K 4G 0
sda 0 32K 2G 0
├─sda1 0 32K 2G 0
├─sda14 0 32K 2G 0
├─sda15 0 32K 2G 0
└─sda16 0 32K 2G 0
SSDs 通常支持“丢弃”功能,因此在“DISC-GRAN”列中有非零值通常表示具有 SSD 功能。
Windows
如果您使用基于 Windows 的 VPN 服务器,可以使用 PowerShell 检查磁盘类型:
MacOS
在 MacOS 上,您可以使用 diskutil:diskutil info diskX | grep "Solid State"
将 diskX 替换为实际磁盘标识符(例如 disk0)。
如果磁盘为 SSD,它将显示“Solid State: Yes”。
这些方法中的每一种都可以帮助您确定 VPN 服务器上的磁盘类型。
检查磁盘类型:NVMe SSD
上述方法也适用于 Linux、Windows 和 MacOS 上的 NVMe/Non-Volatile Memory Express(非易失性存储器标准)驱动器,但在文件路径和命令输出方面存在一些差异:
Linux
在 Linux 上,NVMe 驱动器通常显示为 /dev/nvme0n1、/dev/nvme1n1 等。以下是针对 NVMe 调整的方法:
方法1:使用 lsblk
lsblk -d -o name,rota
NVMe 驱动器通常会显示 ROTA 为 0,表示非旋转(SSD)。
方法2:使用 /sys/block
cat /sys/block/nvme0n1/queue/rotational
将 nvme0n1 替换为您的 NVMe 设备。
输出应为 0 表示 NVMe 驱动器。
方法3:使用 nvme 工具
如果您安装了 nvme CLI 工具,还可以检查驱动器信息:
nvme list
您可以在 Ubuntu 上安装 nvme-cli 包,例如:
sudo apt install nvme-cli
这将显示所有 NVMe 设备的详细信息,包括型号、容量和序列号,有助于识别它是否为 NVMe SSD。
Windows
在 Windows 上,PowerShell 命令也可以识别 NVMe 驱动器:
Get-PhysicalDisk | Select-Object -Property DeviceID, MediaType, Model
在输出中,MediaType 显示为 SSD 表示 NVMe 驱动器。Model 字段可以帮助确认驱动器是否基于 NVMe。
示例输出:
DeviceID MediaType Model -------- --------- ----- 1 HDD Elements 25A3 2 HDD Elements 25A3 0 SSD MZVL22T0HBLB-00BMV SAMSUNG
macOS
在 macOS 上,diskutil 命令对 NVMe 驱动器也适用:
diskutil info diskX | grep "Solid State"
将 diskX 替换为 NVMe 磁盘标识符(例如 disk0)。如果是 SSD,您将看到“Solid State: Yes”,并且可以通过制造商提供的附加信息确认是否为 NVMe。
英文:How to Check Hard Disk Type (NVMe SSD) on Servers/VMs?
本文一共 689 个汉字, 你数一下对不对.
相关文章:
- 按揭贷款(房贷,车贷) 每月还贷计算器 去年给银行借了17万英镑 买了20万7500英镑的房子, 25年还清. 前2年是定率 Fix Rate 的合同 (年利率2.49%). 每个月大概是还 700多英镑. 有很多种还贷的计算方式, 定率/每月固定 是比较常用的. 简单来说就是 每个月交的钱是...
- LOGO 海龟作画 系列 一 之 给孩子最好的编程启蒙语言 – Logo Turtle Graphics – Series 1 – Best Introductory Programming for Kids I think the LOGO turtle graphic is the best introductory programming language for the kids....
- WordPress 更新服务站点列表 当你发表一篇博文的时候, wordpress 会自动把文章提交到几个更新服务站点里 当然提交的越多 文章被第一时间推送更新可能性就越大. 在设置 – 撰写 – 更新服务里 每一行就是一个站点推送地址. http://rpc.pingomatic.com/ http://api.moreover.com/RPC2 http://api.my.yahoo.com/RPC2 http://api.my.yahoo.com/rss/ping...
- 英国硬盘数据恢复失败的经验和教训 上一周, 不小心触碰了机箱后面的电源线, 接触不良, 结果机器再也开不起来了. 显示 Invalid Disk, Replace. 大概就是主硬盘MBR区坏了. 我以为是接触不良, 于是反复插把硬盘卡槽好几次, 机器认不出, 硬盘也没声音, 于是便网上搜索了一个剑桥评价最高的 硬盘数据恢复公司...
- 测测你的幸运 – Linux Fortune-Teller LINUX 下有很好很好玩的命令,之前已经介绍过: figlet, rig, curl. 现在推荐另一个 命令 fortune 是用来随机显示一段(句)话的.fortune 在英文里就是幸运的意思. 这个命令可以不需要 参数 如果没有 可以通过 apt-get...
- 在波场上最简单的被动收入: 质押TRX投票见证人获取奖励(年化4.8%)! 波场上最简单的被动收入: Stake & Earn 质押获取收益 在波场(Tron)区块链上获得被动收入(TRX)的方法很简单, 如下只要3步: 质押或锁定 TRX. 需要14天才能解锁(质押模型v2.0). 您可以在 tronlink 钱包(Chrome 扩展程序)或 tron-cli...
- 国内现在的外卖真是又快又便宜 这次回国感触最深的就是国内的外卖。第一天去颐和园回到我姐家5-6点很累,不想出门,所以就在家点了外卖。手机微信小程序(美团)选了支付下单,半小时内就送到了。 一开门,就见外卖小哥的一只手把食物送了过来,人的正脸都没见到,外卖小哥转身就走,走太快在拐角处还差点滑倒了。 我姐说,现在平台算法优化很厉害,送晚了,平台会罚钱,所以外卖小哥争分夺秒一刻也不敢多逗留。 撇开外卖食物是否干净健康,中国现在的外卖真是又快又便宜,比如那天和我姐一起去北京的环球影城,在回家的路上(坐地铁7号钱坐一个小时到菜市口站),我姐快到家的时候点了两碗粥,到家一会儿就送到了,你猜多钱?也才19元。19元也就2英镑多一些,在英国都不够小费的。 在国内真是幸福,怪不得国内房子的厨房大多不大,我姐二环2居室,厨房真是一点点,只够一人进去的,两人在厨房就很挤了。我估计是国内(打工)人吃饭大多外卖/餐馆,一年下厨房的次数估计一个手就能数过来。 望京小腰-这店名取得真不错。 本文一共 398 个汉字, 你数一下对不对. 国内现在的外卖真是又快又便宜. (AMP 移动加速版本) 赞赏我的几个理由. ¥...
- 和孩子到英国Suffolk进行复活节Easter Egg Hunt 去年复活节刚好因为疫情 只能待在家里, 于是在院子里和家里藏好复活节Egg然后孩子找蛋. 前年去了到 Beth Chatto 花园找复活节彩蛋 今年疫情好转, 政府允许在室外活动, 于是驱车到了Suffolk进行复活节Easter Egg Hunt. 地址是: The Rotunda,...
换华为云的香港主机了
2个月前,抢了个阿里云香港轻量机,这两个月除了做梯子,没啥用了。期间客服给我打电话说可以一直送2元优惠券,不过得找客服要,没错,还得要!后来我在淘宝上看到相对比较便宜的是华为云的香港轻量机,跟阿里云配置一样,应该是华为云的分销商,只要10元/月,瞬间觉得阿里云的24元一个月不香了。于是决定转入华为云。快一个月了,除了梯子,还有一个站通过那个穿透的。今天找那店续费了。可能有人会问为什么不一次性多续几年?因为续一年价格是150多,平均就不只10元一个月了。问过客服,现在华为做活动,也不知道这个价格能撑多久。
本文链接: 换华为云的香港主机了
14年的独立blog
blog在WordPress上,不知不觉已经14个年头。如果没记错的话,是在2010年开始的,因为那个时候BlogBus崩掉了。这14年,我都是跟着同一个团长。那个团长是在豆瓣上认识的,估计现在那个团里面就只剩下我和他了,其他人可能都已经渐渐退掉。实际上,对blog有需求的人,可能只剩下我一个,只有我一个积极用户。团长本身就只是做那个事而已,我不知道他有没有在服务器上折腾些什么。以前可能他是有折腾的,但折腾这种事,对普通人来说不可能一直都折腾。因为写blog本身不算太折腾,每天都耗费基本上相似的时间,习惯下来就好。
我有想过有一天团长不干了,我该怎么办。我自己独立一个门户吗?那个时候,如果遇到一些技术上的故障,我该怎么办呢?现在实际上,我们也的确遇到了技术上的故障。因为团长换电脑了,所以那个服务器的账号密码不见了。理论上联系服务商,只要你提供足够的资料,对方是可以帮你找回密码或者帮你重置密码的,但关键是邮件发过去,对方完全不理你,还真一点办法都没有。当然,如果服务商是大型的,估计不会发生这种事,但如果那只是一个小众的服务商,那么发生这种事,绝对是有可能的,中途跑路也是有可能的。这么多年下来一直都相安无事,我觉得都已经是个奇迹了。中途我们有没有搬过家呢?我没什么印象,因为不是我操作的,我顶多是一段时间开不了网页,但实际上,无论我开得了还是开不了网页,我的blog都会继续,都会在记事本上写下来。重新能开网页的时候,我就把之前囤下的那些东西发布上去,仅此而已。
如果有一天团长不干了,我还会继续每天写,但那个时候估计就不能称之为blog,要称之为日记了,blog和日记对我来说,最大的区别在于一个自己存着,另外一个放在网上,谁都可以看到。
服务商这种东西,即便是最大型的,也说不准靠谱不靠谱,因为大型的服务商也非常有可能有倒闭的那一天,某一天,他们不再开展这个业务了,转而开展别的,把这个业务关闭了,你一点办法都没有。一直以来我们的数据都是放在外国的服务器的。以现在的局势看来,继续放在外国好像有点风险。倒不是因为我的数据有什么问题,涉及了什么方面的东西,而是如果一旦某些事情发生,互联网中断,即便我的东西还存在着,但我再也接触不到了。
我从2004年开始写自己的blog,到昨天为止,我备份了一下全站的内容,媒体资料有400多MB,数据库有70多MB,其它的都是一些很小的脚本。文字内容的东西基本上都在数据库的SQL文件里,附件类图片音频之类的东西其实这么多年下来也不是很大,最主要的原因是可能一开始我会用得比较多,尤其是在我刻橡皮章的时候,后来越来越少了,尤其是近几年,我基本上没有了什么兴趣爱好之后。
还记得一开始在BlogBus上开我自己的blog的时候,我的誓言是一辈子都写,每天不间断,但现在看来,写不写下去靠的是我个人,但能不能让其成为blog,外部干扰因素很大。如果是短时间内,外部因素干扰可以忽略,但如果把时间延长到十年甚至几十年,外部干扰因素影响非常大。
获得最新Apache服务器访问记录的脚本
apache 服务器将访问请求记录在 /var/log/apache2 中,因此我们可以分析这个日志文件来找出最后的几个请求。
下面解析 apache2 服务器日志,并逐行打印请求。它基于 BASH 命令:tail 和 awk。
#!/bin/bash NUMBER_OF_REQUESTS=50 LOG_FILES_PREFIX=/var/log/apache2/access tail -n $NUMBER_OF_REQUESTS $LOG_FILES_PREFIX* | awk -F'"' ' # 确保 IP 地址、请求和用户代理字段存在 $1 ~ /^[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+/ && $2 ~ /^(GET|POST|HEAD|PUT|DELETE|OPTIONS|PATCH)/ && $6 != "" { split($1, part1, " ") ip = part1[1] split($2, request, " ") method = request[1] path = request[2] user_agent = $6 print ip, path, user_agent } '
示例输出(每行包含 IP 地址、URI/URL 和用户代理字符串):
有了它,我们可以集成到 BASH 脚本中,当 CPU 平均负载较高时发送电子邮件通知,以帮助我们了解导致峰值的原因。
英文:How to Get the Last Requests to Apache2 Server?
本文一共 198 个汉字, 你数一下对不对.
相关文章:
- 按揭贷款(房贷,车贷) 每月还贷计算器 去年给银行借了17万英镑 买了20万7500英镑的房子, 25年还清. 前2年是定率 Fix Rate 的合同 (年利率2.49%). 每个月大概是还 700多英镑. 有很多种还贷的计算方式, 定率/每月固定 是比较常用的. 简单来说就是 每个月交的钱是...
- 在币圈第一次被骗1355 USDT(1000英镑)的惨痛经历(Wirex) 今天回家,在帮媳妇干活的时候,收到一邮件,手机上打开,以为是来自Wirex的,要我验证手机号,我想也没想,就打开验证了,然后不到2分钟,里面的钱就被转走了。 手机上打开没细看,电脑上打开该邮件 其实很容易发现是诈骗邮件的。因为邮件不是来自于官方,而且我的姓名前是加了一些乱码。一眼假。只不过当时在干活,也没多想,才被骗。 损失1355 USDT(1000多英镑),因为在Wirex上有X-Account,我锁定了XX个大饼,还好锁定了(30天才能解锁),后怕啊,不然全被搞走了,真得上天台了。 X-Account帐号锁定解锁需要30天,骗子马上启动解锁了。但钱还在,我立马联系客服,客服回得也挺快(以前不太重要的邮件就得好几天才回),客服立马把我的帐号锁定了,然后进行调查。 庆幸当初为了高1%的利息锁定币30天,要不然今天估计就全丢了。 Wirex通过手机短信就可以把钱搞走,而且登陆/更改资料都需要SMS验证码,实在是不合理,我要改回我手机号,则需要向骗子手机要验证码。虽然我开通了更为安全2FA二维码验证,但是貌似一个手机SMS验证码就可以关闭。 这个假期本来很完美,结果因这事搞得很不愉快。惨痛的教训,就当学费了。骗子不得好死。 Wirex客服这次回得挺快: I am truly sorry you...
- 智能手机 HTC One M9 使用测评 虽然我对手机要求不高, 远远没有像追求VPS服务器一样, 但是怎么算来两年内换了四个手机, 先是三星 S4 用了一年多, 然后 Nokia Lumia 635 Windows Phone, 后来又是 BLU, 半年多前换了...
- HPZ800服务器主板太老不支持超过2TB的大硬盘 我家里一直用的是HPZ800服务器, 很吵, 很老, 虽然这台服务器已经有十年之久(我在EBAY上买来用了五年多了), 但是即使放到今天, 这服务器速度依旧很快, 很稳定. 由于服务器用的是ECC较验内存, 所以基本上不重启关机. HPZ800主机有两个硬核CPU – 因特志强 X5650 – 每个CPU是12核....
- 英国博士毕业答辩是怎样一个过程? 坛子发了篇 “欧洲博士毕业答辩是怎样一个过程?” 但是英国不太一样, 请听我细细道来. 我是2006年9月开始博士课程的, 当时很不容易 争取到免学费, 第二第三年学费免不免得看研究进度. 确定导师 如果你是中规中矩的进去 一般院里会给你安排个一导, 也可能是你跟着导师, 导师有钱, 这时候有钱给你生活费的就是一导, 一般至少需要2个导师,...
- WordPress 最简单的过滤垃圾评论的方法 WordPress 很多垃圾评论都是由程序直接调用访问 wp_comments.php 造成的. 所以我们可以在 functions.php 文件里加入以下代码 新增一个过滤 简单的检查是否是直接调用. 1 2 3 4 5 6...
- 穷举算法的应用 – 去除EXCEL文件中的保护 EXCEL 是可以用密码来保护的. 比如 这个EXCEL 就用了密码保护. 打开EXCEL文件 你会注意到 无法编辑 无法查看宏(VBA)的代码. 去除保护很简单 第一步先编辑宏 VBA 把下面的VBA代码拷贝到VBA编辑器里 并按下F5运行 1...
- 在LINUX下循环备份的方法 备份是我们常需要做的事, 你可以在服务器上有一个文件夹专门用于存放备份.然后定期删除(可以是一个脚本定期执行),这样就比较麻烦,因为如果你想每次删除比较旧的备份, 你就得对备份进行时间倒序. 其实可以完全利用LINUX下的 date命令来生成想要的文件名用于备份.比如你想保留过去的 24 小时备份,那么,你可以用: 1 2 H=`date +"%H"` ls > backup_$H #...
使用 1panel 自动申请和续签通配符证书
起因
自阿里云宣布不再提供一年期的免费证书后,腾讯云在今年4月25日起也不再提供一年期的免费证书。我的域名主要在 dnspod,所以也因此会受到影响。
好在服务器面板 1panel 提供了自动申请证书服务,虽然同样只有三个月的有效期,但是优点有二:
一是证书为通配符证书,无需逐个申请;
二是面板支持自动续签,大概可以算得上是一劳永逸。
开始折腾
其实整个过程也不算折腾,甚至不用文档,按照流程摸索着来,一次就能申请成功。
创建 Acme 账户
按照如下顺序点击“Acme账户”,输入你自己的邮箱。账号类型和密钥算法我保持了默认,这可能不是最优解。
提示:虽然不会验证邮箱,但是建议填写自己真实的邮箱地址。
创建腾讯云子账户
由于 dnspod 的 API 即将废弃,所以域名在 dnspod 的可以选择腾讯云。
在获取Secret ID
和Secret Key
之前,我强烈建议创建一个腾讯云子账户,并且设定用户组和权限,尽可能避免不必要的风险。
创建子账户可以参考腾讯云官方的文档,这里我分享一下的配置的策略。
点击这里进入到腾讯云的访问管理控制台,点击“新建自定义策略”,选择“按策略语法创建”,选择“空白模板”,填写以下内容,名称自拟:
{ |
当然,如果你不喜欢json
,也可以选择“按产品功能或项目权限创建”,只不过这样稍微繁杂一点。
创建完成之后,还需要把它关联到用户/组/角色。
最后,点击左侧的“用户”,选择“用户列表”,点击自己创建的子账户,点击 API 密钥,新建一个密钥即可。
注意SecretKey
仅支持在创建时查看,请及时保存SecretKey
。
创建 DNS 账户
回到 1panel 中,点击“DNS账户”,再创建账户,输入刚才获取的Secret ID
和Secret Key
就可以了。
申请证书
点击“申请证书”,参考图片填写:
如果你要申请的证书是特定的网站,可以选择“从网站中获取”,不过我觉得通配符证书更方便,所以选择了前者。为了能一定程度上“一劳永逸”,记得勾选上“自动续签”。
关于“推送证书到本地目录”我没勾选,因为我的服务器上不止一个网站目录,所以我是申请成功之后在“网站”的“HTTPS”里,手动选择了申请的通配符证书。
按照上述图片填写完成后,保存并点击申请,然后就可以看到申请日志:
最后
前面也说过,这个过程其实并不算折腾。但是由于 1panel 是明文保存的Secret ID
和Secret Key
,在权限策略和安全性问题上我纠结了很久,最终决定只赋予最少必要权限。
此外,由于我使用的 CDN 支持自动续签,所以我无需把服务器申请的证书推送到 CDN 那边,也给我节省了一些时间。
当然,如果对于上述的权限配置之类的有不同看法,欢迎赐教。
关于服务器
准备做一个自用的展示站,不能用家里被封了 80 和 443 端口的服务器了。
随想起来之前有朋友留言里有谈到使用 cdn 来去掉后面的端口。
搜了一下,有人说了使用 cloudfare 的 dns 功能来实现去掉端口,于是找了一个没啥用的域名,修改了 dns 服务器为 cloudfare 的,但是试了半天,别说去掉端口,解析都失败,等了半天 ping 过去还是 cloudfare 的 ip,我在里面设置的指向一直没有生效,是不是老美那边的服务这边更新比较慢,尝试更改了本地 dns,又等了会,还是不行,随作罢。
看了阿里云,godaddy,腾讯云、华为云、vultr 等,
也有 99 块 1 年的,但是不能选海外机房,我不想去备案啊,
阿里云的虚拟主机也要几百一年,一直白嫖家用宽带的人感觉好贵,
我只是放个自用的展示站点,访问量很小的说啊。
我想起来大学刚毕业那会给人做网站,几十块钱买一个虚拟空间,在里面放很多不同的文件夹,一个文件夹放一个网站,把域名都解析到这个空间,在空间根目录放一个根据域名指向不同文件夹的代码,这样就用几十块钱解决了十几个企业站的空间问题。
随打开淘宝,香港空间 10 块一年。。。。
要不要用,算了 ,我再翻翻找个贵点的店铺,起码也收个 30 块我才安心啊
抢一个阿里云香港服务器
“抢”,为什么要用“抢”呢?因为真的很难买到。估计是在模仿小米的饥饿营销吧。
前几日是在谁那里看到阿里云香港主机,30M带宽,才24元/月,有点心动,了解了一番,才发现是阿里云香港轻量服务器,1G2核1T流量30M带宽(峰值)配置。比起腾讯轻量服务器稍微划算了些。但是基本上都是售罄的状态,每日0点放货。所以手速不快,基本上抢不到。不过我发现GitHub有个抢这个的脚本,基于Python写的,我今晚第一次用就抢到了。

自动抢阿里云24元香港轻量服务器脚本:GitHub地址。
下载这个脚本sample.py,修改sample.py 填写以下两个字段: access_key_id='' access_key_secret='',这在阿里云——AccessKey管理里可以新建得到。
阿里云充值
第一步也是最关键的,就是给阿里云账号充24块钱,这是香港主机一个月的费用,以免自动脚本因为没有付款而订单失败。
准备Python环境
我是在虚拟机上配置的Python环境,第一次弄,基于Debian。Debian 12默认安装了Python 3,可以使用以下命令验证是否已安装:
python3 --version
如果您看到了Python的版本信息,则表示已成功安装。如果没有安装,则可以使用以下命令安装Python 3:
apt install python3
然后安装pip,pip是Python的包管理器,用于安装和管理Python软件包。因为这个脚本需要安装阿里云SDK,需要用到pip。您可以使用以下命令在Debian 12上安装pip:
apt install python3-pip
安装完成后,您可以使用以下命令验证pip是否安装成功:
pip3 --version
安装阿里云SDK
你可以通过运行脚本(python3 sample.py)看到需要的SDK。
第一个是alibabacloud_swas_open20200601,通过pip命令安装:
pip install alibabacloud_swas_open20200601==3.0.0
如果出现下图所示的错误,error: externally-managed-environment,即“外部管理环境”错误,但这不是一个 bug。

我的解决方法是简单粗暴——强制删除此警告,回归到熟悉的操作。
mv /usr/lib/python3.x/EXTERNALLY-MANAGED /usr/lib/python3.x/EXTERNALLY-MANAGED.bk
将 “x” 替换为实际版本。。
还有其他解决方案呢,详细可以参见这篇文章。
然后你就可以正常安装SDK了。
第二个SDK是alibabacloud_tea_openapi,安装命令:
pip3 install alibabacloud_tea_openapi
第三个SDK是alibabacloud-tea-console,安装命令:
pip3 install alibabacloud-tea-console
然后你在运行脚本就会出现售罄的信息,那说明SDK组件都安装成功了。
python3 sample.py
code: 400, 该套餐每日限量售卖,当日售出量已达上限,如有需求请次日购买 request id:......................................
定时脚本
通过crontab –e将脚本添加到定时任务里,设置每日0点运行任务即可。
0 0 * * * python3 /root/sample.py
然后service cron restart重启定时任务,service cron status查看任务状态。

OK,大功告成!剩下的就等待下一个0点凯旋的消息吧!
那么你的阿里云香港服务器是通过什么方式买的呢?
我也简单SFTP上传和下载以及SSH测试了下上传和下载的速度,不知道是不是因为现在这个点比较闲,峰值很高。



网上有人测评,说阿里云香港服务器线路不是很好,还不如新加坡线路快。我先用一个月试试。如果不满意还是可以退款。毕竟这么抢手的东西,我想也不会差很多。我唯一不满意的就是有流量限制,我买服务器就不喜欢限制流量。目前没有想到用它来做什么,不过既然是香港主机,通过它看向世界还是不错的路径,嘎嘎。
本文链接: 抢一个阿里云香港服务器