Logo

site icondai.ge | 阿呆

97年,暂居于江苏南京。爱好建站和域名,曾经持有 bo.ke 等精品域名。
请复制 RSS 到你的阅读器,或快速订阅到 :

Inoreader Feedly Follow Feedbin Local Reader

dai.ge | 阿呆 RSS 预览

为网站添加‌Amazon CloudFront免费CDN

2024-11-05 13:29:00

‌Amazon CloudFront 是一项快速内容分发网络 (CDN) 服务,可以安全地以低延迟和高传输速度向全球客户分发数据、视频、应用程序和 API,全部都在开发人员友好的环境中完成。

首先我们需要一个亚马逊云科技账号,访问亚马逊云科技按照提示注册账号登录,在控制台进入CloudFront即可看见CDN面板,在创建加速前,我们需要先为站点申请一个Amazon Certificate Manager证书,以便为站点开启SSL。

在证书管理页面,可以选择导入我们已有的SSL证书或者申请一张新的证书。

申请证书

这里我们以申请新的证书举例,填入域名后点击下一步,页面会给出我们要验证的DNS信息,按照给出的记录去域名解析处添加即可。

添加

解析

解析添加后只需要等待几分钟,刷新页面,当页面上显示“状态:已颁发”,则表示证书已经申请成功,现在回到CloudFront,继续添加加速站点。

CloudFront页面,点击右上角创建分配,输入需要加速的网站信息:

创建

输入域名之后其它默认即可,在最下面选择开启SSL,选择刚刚申请的证书,点击下一步即可创建站点加速,此时页面上会给出一个CNAME地址,我们需要去域名DNS解析处添加这个CNAME解析。

CNAME

我们先PING一下这个CNAME地址看看大陆访问情况如何:

ping

能看见移动和联通的默认线路还是很不错的,而电信线路延迟略高,但也有部分速度快的节点,如果你的DNS支持分线路解析,我们可以选择给移动和联通以及海外线路解析到 CloudFront 给出的CNAME地址,如果你动手能力强的话,还可以手动选择一些低延迟优质节点,直接A解析节点IP,这样在大陆访问也可以做到秒开体验。

1730784398979.png

解析添加完毕后可以进行PING你的域名查看解析情况,如有出现“解析失败”之类,可能是DNS解析在部分地区还未生效,需要等待最多72小时生效时间。

至此,利用Amazon CloudFront为网站提供加速服务就添加完成了,如果有防护需要,还可以在创建站点设置里面,点击安全性,开启WAF防护,但这个功能是付费的,开启页面中有便捷的价格计算器,请根据自身需求选择是否开启。

1730785180026.png

除此之外,还可以自定义缓存配置,一般情况默认即可,也可根据你网站需求进行自定义修改。


亚马逊云科技还提供众多免费云产品,可以访问:亚马逊云科技查看适合你的产品。

剧透 | 观影《毒液3》

2024-10-23 22:54:00

十月二十三《毒液3》上映,兴冲冲找特价票平台买了两张准备和小Y一起看,买完才发现买成了2D票,因为是特价票的缘故,不支持退换。

实在太久没看3D电影了,忍不住重新买了IMAX3D,幸运的是那两张2D票券放闲鱼上亏了13块钱卖掉了,不幸的是IMAX3D没看成。

到了影院取完票,临入场时才说IMAX厅设备出了问题,不能看了,影院给的方案是可以随意观看一场其它电影,明天可以拿这场的电影票再来看IMAX的,最近好像也没别的电影吸引我,烂片《749局》?还是《小丑2》?来都来了,还是将就一下普通3D看《毒液3》吧,体验不好明天再来补IMAX。

果然,普通厅的屏幕和音响效果都不如意,特别是位置有些靠后了,字幕太小,我全程没看清一句字幕。

1729694977084.png

剧透影评

电影谈不上多好,可能是抱的期望太大了,没看到想看的画面有些失望。比如在《毒液2》末尾彩蛋里毒液和艾迪被传送到了漫威宇宙,而在《蜘蛛侠:英雄无归》末尾彩蛋里毒液说想吃荷兰弟蜘蛛侠的脑袋。

我以为在这部毒液最终篇里会有蜘蛛侠和毒液的同框碰撞,结果是 没有。电影一开场就是毒液和艾迪被传送回了自己的宇宙,但是在漫威宇宙留下了一滴共生体,这段在几年前的彩蛋中就已经出现过。

整部电影出现的最大反派——共生体之神 纳尔,一直被囚禁在宇宙一把椅子上没离开过,只是派了一些像章鱼类似的怪物到地球抓毒液,电影结局就是这些小喽啰被解决了,电影突然结束。

挺。。。让人感觉看了一个寂寞,我看了个啥?特别是在看不见字幕的情况下我更懵逼了。

设定也挺离谱,纳尔派的小怪找毒液,就是因为毒液身上有法典,而法典可以让纳尔统领宇宙大概是这个意思,看不起字幕我不知道法典怎么诞生的,总之就是那么多共生体就毒液有,而且小怪来地球是找不到毒液的,只有在毒液变身包裹着艾迪的时候小怪才能感应到,哪怕是毒液脱离艾迪,或者是他俩一半一半,小怪都感应不到,这明明就很安全啊?而他们偏偏要合体变身,就为了...莫名其妙的跳舞。

然后就是被小怪追杀了,最后是在51区这个地方,军方关押着很多共生体,明明一直在被关起来研究,小怪杀来找毒液的时候,这些共生体就莫名其妙的出来保护毒液撤离...然后全部被杀,前面两部共生体都在杀毒液啊喂,怎么突然帮忙了?

真的挺没有逻辑的,甚至没看到毒液和小怪大战,全程被追着跑,在51区也是其它共生体出来和小怪打了半天,然后毒液出来吸引着那堆小怪拉一起在硫酸自杀,就尼玛结束了???

这个实力怎么大战共生体之神纳尔,不过这应该是毒液最后一部电影了,后续毒液估计是以漫威宇宙留下的那滴共生体出场,毕竟漫画中蜘蛛侠也是共生体之一,到了漫威宇宙找上蜘蛛侠也说不准,而且在抖音刷到别人截图的彩蛋有句字幕旁白是说 纳尔将在蜘蛛侠电影中登场,我是没看见,因为我看不见字幕。。。

是否适合电影院观看?我的建议是 等资源吧。

TG自建Python版的RSS订阅Bot

2024-10-09 13:02:00

以前找moe.one要了一个TG新帖推送插件,我上TG上的少没细心关注,这几天才发现这个推送机器人抽风很厉害,不能做到实时推送,中间会间隔一堆才推一次,看不懂代码逻辑,于是自己在网上找了RSS订阅BOT部署,试了两个用的人多的项目,都是docker部署,我想改改消息格式都不知道怎么下手,实在对docker不懂...默认的消息格式让我强迫症实在难受,于是让AI配合写了如下Python脚本,此文记录一下搭建步骤,避免以后有需要时又要去找AI掰扯。

打开服务器终端,安装Python和所需库

安装 pip
更新包列表:

apt update

安装 python3-pip:

apt install python3-pip

安装完成后,确认 pip 是否正确安装:

pip3 --version

正常会返回 pip 的版本信息。

安装所需库

pip3 install feedparser requests python-telegram-bot

下一步,我们需要去Telegram创建Bot,在TG里搜索@BotFather,进入对话框,输入/newbot以创建新机器人,然后回复一个机器人名字,再回复一个机器人的用户名,需要带bot,可以参考截图设置:

1728448409299.png

@BotFather会回复你一个机器人的HTTP API,保存它,后面会用到。

进入刚刚创建的机器人对话框,将他拉进一个你需要推送的群,或者直接给你自己推送也行,拉群记得给它管理员和消息权限。

TG搜索@get_id_bot,进入对话框点击右上角,将他拉到刚刚的群里,在群聊对话框输入:/my_id@get_id_bot发送,会得到一个-开头的群聊ID,记录它,包括-符号。

1728449020735.png

信息获取完成,接下来就是创建脚本了,回到服务器终端

  1. 创建目录
    假设创建一个名为 dalaorss 的目录:
mkdir dalaorss
cd dalaorss
  1. 创建 Python 文件
    在 dalaorss 目录中,创建一个 Python 文件,这里使用 nano 编辑器创建一个名为 rss_bot.py 的文件:
nano rss_bot.py
  1. 添加代码
    将下面代码复制进脚本中,注意修改为你的信息
import feedparser
import logging
import asyncio
import json
import os
from telegram import Bot
from telegram.error import TelegramError

# Telegram Bot Token 和目标聊天 ID
TELEGRAM_TOKEN = 'Bot Token'
CHAT_ID = '群ID'

# 存储已发送的帖子 ID 的文件
POSTS_FILE = 'sent_posts.json'

# 读取已发送的帖子 ID
def load_sent_posts():
    if os.path.exists(POSTS_FILE):
        with open(POSTS_FILE, 'r') as f:
            return json.load(f)
    return []

# 保存已发送的帖子 ID
def save_sent_posts(post_ids):
    with open(POSTS_FILE, 'w') as f:
        json.dump(post_ids, f)

# 从 RSS 源获取更新
def fetch_updates():
    feed_url = "订阅地址"
    try:
        return feedparser.parse(feed_url)
    except Exception as e:
        logging.error(f"获取 RSS 更新时出错: {e}")
        return None

# 转义 Markdown 特殊字符
def escape_markdown(text):
    special_chars = r"_*~`>#+-.!"
    for char in special_chars:
        text = text.replace(char, f"\{char}")
    return text

# 发送消息到 Telegram
async def send_message(bot, title, link):
    # 转义 Markdown 特殊字符
    escaped_title = escape_markdown(title)  # 转义 Markdown 特殊字符
    escaped_link = escape_markdown(link)    # 转义 Markdown 特殊字符

    # 使用 Markdown 格式,将标题包裹在反引号中以避免超链接,链接直接显示
    message = f"`{escaped_title}`\n{escaped_link}"
    try:
        await bot.send_message(chat_id=CHAT_ID, text=message, parse_mode='MarkdownV2')
        logging.info(f"消息发送成功: {escaped_title}")
    except TelegramError as e:
        logging.error(f"发送消息时出错: {e}")

# 主函数
async def check_for_updates(sent_post_ids):
    updates = fetch_updates()

    if updates is None:
        return  # 如果获取更新出错,则返回

    new_post_ids = []  # 用于存储新帖子 ID

    for entry in updates.entries:
        # 从 guid 中提取帖子 ID
        post_id = entry.guid.split('-')[-1].split('.')[0]  # 提取 ID

        # 检查是否为新帖子
        if post_id not in sent_post_ids:
            new_post_ids.append((post_id, entry.title, entry.link))  # 存储 ID, 标题和链接

    # 如果有新帖子,按 ID 升序排序并发送最新帖子
    if new_post_ids:
        new_post_ids.sort(key=lambda x: int(x[0]))  # 升序排序
        latest_post_id, title, link = new_post_ids[0]  # 获取最新的帖子
        async with Bot(token=TELEGRAM_TOKEN) as bot:
            await send_message(bot, title, link)

        # 更新已发送的帖子 ID
        sent_post_ids.append(latest_post_id)
        save_sent_posts(sent_post_ids)  # 保存到文件

# 主循环
async def main():
    logging.basicConfig(level=logging.INFO)

    # 加载已发送的帖子 ID
    sent_post_ids = load_sent_posts()

    while True:
        try:
            await check_for_updates(sent_post_ids)
        except Exception as e:
            logging.error(f"检查更新时出错: {e}")
        await asyncio.sleep(60)  # 每 60 秒检查一次

if __name__ == "__main__":
    asyncio.run(main())
  1. 保存并退出
    在 nano 编辑器中,按 Ctrl + O 保存文件(字母O不是数字0),然后按 Enter 确认,接着按 Ctrl + X 退出编辑器。
  2. 运行脚本
    nohup(no hang up)命令可以让脚本在后台运行,即使您关闭终端会话也能保持运行。
nohup python3 rss_bot.py &

现在就可以去更新rss看看推送状态了,这里的脚本内容以我自己论坛为例,如果你也是xiuno论坛那么照抄就行,如果是博客或者其它程序,可能还需要做一些修改。

推送效果:

1728449810062.png

个人比较喜欢这种格式,如果你喜欢别的模式比如消息内预览,可以使用docker版本的,网上搜一下就有。

脚本运行后,怎么查看或关闭:

检查当前运行的进程

ps aux | grep python

会得到正在运行的进程,查看到rss_bot那条,最前面有一个ID,命令行输入

kill ID

即可停止。

网站自动增量备份到另一台服务器

2024-10-05 12:15:00

国庆的时候,智联IDC联系我说:给你赞助服务器,需要啥开口就行。

于是,我要了一台韩国物理机。

1728120062137.png

大陆优化,我还是保持套用CDN,昨晚已经将论坛迁移上去了,可能是心理作祟,明显觉得响应速度比之前快了。

第一件事还是搞定时备份,数据库好说,压缩下来也就40多MB,搞了个每两小时备份一次到又拍,但是网站压缩包有5GB大,每次自动备份上传都会因为文件过大失败,所以昨晚研究了一下增量备份。

我的操作很简单,这个备份方式也适用所有人,非常方便,以下教程以宝塔为例,把网站数据从主服务器(网站所在)备份到副服务器(专门备份)

首先,安装 rsync:
确保在两台服务器上都安装了 rsync,可以使用以下命令安装,打开终端输入对应命令:

sudo apt-get install rsync    # Debian/Ubuntu
sudo yum install rsync        # CentOS/RHEL

然后,在主服务器SSH里连接副服务器:

ssh-keygen
ssh-copy-id 副服务器SSH用户名@副服务器IP

回车根据提示输入密码即可,弹出Enter passphrase (empty for no passphrase):是让你设置密码短语,直接回车不要设置。

然后,在主服务器根目录下的/root/目录里,创建一个文件:backup.sh,内容写:

#!/bin/bash

# 设置变量
SOURCE_DIR="/www/wwwroot/网站目录"  # 主服务器上的网站目录
DEST_DIR="副服务器SSH用户名@副服务器IP:/www/wwwroot/网站目录"  # 副服务器上的备份目录
LOG_FILE="/root/backup.log"  # 日志文件路径

# 输出脚本开始执行的消息
echo "脚本开始执行" | tee -a "$LOG_FILE"

# 使用 rsync 进行增量备份,排除 .user.ini 系统文件
rsync -avz --delete --exclude='.user.ini' "$SOURCE_DIR/" "$DEST_DIR" >> "$LOG_FILE" 2>&1

# 输出备份完成的消息
echo "备份完成" | tee -a "$LOG_FILE"

因为在上面脚本中我们加入了日志,所以还需要在/root目录下手动创建一个backup.log文件,以便备份日志记录。

再次打开终端,执行

chmod +x ~/backup.sh

赋予它执行权限,现在可以运行脚本。执行以下命令:

~/backup.sh

看到提示信息就说明备份成功了,接下来创建一个脚本来定时执行这个任务。

要定时执行 ~/backup.sh 脚本,在终端中运行以下命令,以打开 crontab 编辑器:

crontab -e

crontab 的格式如下:
第一个 * 表示分钟(0 - 59)
第二个 * 表示小时(0 - 23)
第三个 * 表示日期(1 - 31)
第四个 * 表示月份(1 - 12)
第五个 * 表示星期几(0 - 7,0和7都表示星期日)

比如我每小时执行,就是:

0 * * * * ~/backup.sh

按 Ctrl + O 保存,按 Ctrl + X 退出。

查看当前的定时任务是否创建成功:

crontab -l

或者

直接在宝塔定时任务那里添加shell脚本任务,以root身份执行,脚本内容:

sh ~/backup.sh

增量备份机制:

在备份过程中,会比较源目录和备份目录中的文件,它通过检查文件的大小和修改时间来判断文件是否被修改过,如果源目录中的文件被修改,只传输这些变化的文件,而不是重新传输整个目录,这种机制大大减少了需要传输的数据量,提高了备份速度和效率。

假设在主服务器的 /www/wwwroot/www.dalao.net 目录中有以下文件:
file1.txt(未修改)
file2.txt(已修改)
file3.txt(已删除)

当执行命令后:
file1.txt 会保持不变(未修改)。
file2.txt 会被传输到备份服务器,因为它已经被修改。
file3.txt 会从备份服务器中删除,因为它在源目录中被删除了。

以上是网站文件的增量备份,数据库也大同小异,但我没有去做,因为文件不大,直接备份到七牛了,这样增量似乎也可以实现多源站方案。

白嫖每月50TB流量的BGP线路CDN

2024-10-01 15:27:00

先看图

说明:可以无限白嫖,套餐到期后去站点删除添加的站点别名,重新注册一个账户又有免费套餐,且注册无需任何验证,无需实名。

 

共四家CDN,但可能背后是一家,末尾放地址,先讲解一下

默认注册后送免费套餐,添加站点后系统给的CNAME别名地址Ping出来只有几个节点,甚至只有美国节点,但是他们有香港BGP集群,没做限制,只要接入了域名,无论什么套餐都能用,我们要做的就是找出这些集群IP,自己弄个域名A解析上这些集群,然后给加速站点CNAME到我们自己解析的那个域名,类似于CloudFlare的优选IP。

 

不过,这几家CDN容易删除掉没有用CNAME指向他们给出的地址的站点,于是,你可以在添加站点时添加一个毫不相干的站点,比如我要给dalao.net加速,那么添加的时候随便写一个自己名下的域名二级,不要写dalao.net,然后把添加上的域名解析到给出的CNAME地址,再去站点管理里面添加别名管理,写我实际要用的地址,如 dalao.net

将dalao.net用CNAME解析到我们前面自己解析的集群节点上,如此,你的站点就算接入完成了,后续的SSL添加也用dalao.net的就好。

 

四家CDN地址与他们的BGP节点:

(以上,独家整理发布,转载请注明本帖地址:https://www.dalao.net/thread-33769.htm)