博客

  • 自建Docker缓存加速器

    自建Docker缓存加速器

    方法1:镜像转存

    借助Github和阿里云镜像仓库,转存镜像。

    具体方法参考:https://www.bilibili.com/read/cv35249690/

    👍 优点:无需服务器

    👎 缺点:不灵活,只适合少量镜像下载场景

    方法2:代理连接

    代理服务端具体安装步骤略,大家自行研究。

    部署完代理服务器,只需要给Docker配置上代理链接即可

    1.编辑配置文件 /lib/systemd/system/docker.service ,设置代理地址

    # 在[Service]模块下添加
    Environment=HTTP_PROXY=http://proxyAddress:port
    Environment=HTTPS_PROXY=http://proxyAddress:port
    Environment=NO_PROXY=localhost,127.0.0.1
    

    image.png

    2.重启Docker

    sudo systemctl daemon-reload
    sudo systemctl restart docker
    

    👍 优点:之后拉取镜像走代理,一劳永逸

    👎 缺点:需境外服务器,容器内可能也会走代理

    方法3:自建Docker加速器

    教程1:https://mirrors.ustc.edu.cn/help/dockerhub.html

    教程2:https://github.com/stilleshan/dockerfiles/tree/main/registry-proxy

    我参考的教程2,一个容器搞定。

    1.在境外机器上搭建加速器,我这里没有挂载存储出来,重启即可清理磁盘,更方便

    docker run -d --restart always \
        -p 5000:5000 \
        -e PROXY_REMOTE_URL=https://registry-1.docker.io \
        stilleshan/registry-proxy
    

    2.境内机器上配置加速地址,和之前一样

    # 编辑 /etc/docker/daemon.json,加入地址
    
    {
      "registry-mirrors": ["http://xxxxxxx:5000"]
    }
    

    👍 优点:换个加速器即可

    👎 缺点:需境外服务器

    方法4:CloudFlare Workers搭建Docker镜像加速器

    基于V2EX 用 cloudflare worker 搭建一个 Docker 镜像

    优化了一点点…

    • 删除了返回头中的Docker-Distribution-Api-VersionDocker-Distribution-Api-Version特征,避免空间测绘引擎扫描到
    • 404状态时,返回空字符,进一步避免特征扫描

    使用方法:

    • 直接修改全局镜像地址: 修改或创建/etc/docker/daemon.json写入以下内容
      {
      	"registry-mirrors": [ "https://自定义域名" ]
      }
      

      使用方法

    • 手动拉取单个镜像
      docker pull 域名/ubuntu
      
    • 搭建时,将自定义子域名修改为Workers设置中的自定义域名
    • 必须添加自定义域名,默认的workers.dev在国内无法使用

    以下为Workers源代码

    'use strict'
    
    const hub_host = 'registry-1.docker.io'
    const auth_url = 'https://auth.docker.io'
    const workers_url = 'https://自定义域名'
    /**
    * static files (404.html, sw.js, conf.js)
    */
    
    /** @type {RequestInit} */
    const PREFLIGHT_INIT = {
      // status: 204,
      headers: new Headers({
        'access-control-allow-origin': '*',
        'access-control-allow-methods': 'GET,POST,PUT,PATCH,TRACE,DELETE,HEAD,OPTIONS',
        'access-control-max-age': '1728000',
      }),
    }
    
    /**
    * @param {any} body
    * @param {number} status
    * @param {Object<string, string>} headers
    */
    function makeRes(body, status = 200, headers = {}) {
      headers['access-control-allow-origin'] = '*'
      return new Response(body, { status, headers })
    }
    
    
    /**
    * @param {string} urlStr
    */
    function newUrl(urlStr) {
      try {
        return new URL(urlStr)
      } catch (err) {
        return null
      }
    }
    
    
    addEventListener('fetch', e => {
      const ret = fetchHandler(e)
        .catch(err => makeRes('error: ' + err.stack + "\n", 502))
      e.respondWith(ret)
    })
    
    
    /**
    * @param {FetchEvent} e
    */
    async function fetchHandler(e) {
      const getReqHeader = (key) => e.request.headers.get(key);
    
      let url = new URL(e.request.url);
    
      // 修改 pre head get 请求
      // 是否含有 %2F ,用于判断是否具有用户名与仓库名之间的连接符
      // 同时检查 %3A 的存在
      if (!/%2F/.test(url.search) && /%3A/.test(url.toString())) {
        let modifiedUrl = url.toString().replace(/%3A(?=.*?&)/, '%3Alibrary%2F');
        url = new URL(modifiedUrl);
        console.log(`handle_url: ${url}`)
      }
    
      if (url.pathname === '/token') {
        let token_parameter = {
          headers: {
            'Host': 'auth.docker.io',
            'User-Agent': getReqHeader("User-Agent"),
            'Accept': getReqHeader("Accept"),
            'Accept-Language': getReqHeader("Accept-Language"),
            'Accept-Encoding': getReqHeader("Accept-Encoding"),
            'Connection': 'keep-alive',
            'Cache-Control': 'max-age=0'
          }
        };
        let token_url = auth_url + url.pathname + url.search
        return fetch(new Request(token_url, e.request), token_parameter)
      }
    
      // 修改 head 请求
      if (/^\/v2\/[^/]+\/[^/]+\/[^/]+$/.test(url.pathname) && !/^\/v2\/library/.test(url.pathname)) {
        url.pathname = url.pathname.replace(/\/v2\//, '/v2/library/');
        console.log(`modified_url: ${url.pathname}`)
      }
    
      url.hostname = hub_host;
    
      let parameter = {
        headers: {
          'Host': hub_host,
          'User-Agent': getReqHeader("User-Agent"),
          'Accept': getReqHeader("Accept"),
          'Accept-Language': getReqHeader("Accept-Language"),
          'Accept-Encoding': getReqHeader("Accept-Encoding"),
          'Connection': 'keep-alive',
          'Cache-Control': 'max-age=0'
        },
        cacheTtl: 3600
      };
    
      if (e.request.headers.has("Authorization")) {
        parameter.headers.Authorization = getReqHeader("Authorization");
      }
    
      let original_response = await fetch(new Request(url, e.request), parameter)
      let original_response_clone = original_response.clone();
      let original_text = original_response_clone.body;
      let response_headers = original_response.headers;
      let new_response_headers = new Headers(response_headers);
      let status = original_response.status;
    
      if (new_response_headers.get("Www-Authenticate")) {
        let auth = new_response_headers.get("Www-Authenticate");
        let re = new RegExp(auth_url, 'g');
        new_response_headers.set("Www-Authenticate", response_headers.get("Www-Authenticate").replace(re, workers_url));
      }
      if (new_response_headers.get("Docker-Distribution-Api-Version")){
        new_response_headers.delete("Docker-Distribution-Api-Version");
      }
    
      if (new_response_headers.get("Location")) {
        return httpHandler(e.request, new_response_headers.get("Location"))
      }
      if (status === 404){
        original_text = "";
      }
      let response = new Response(original_text, {
        status,
        headers: new_response_headers
      })
      return response;
    
    }
    
    
    /**
    * @param {Request} req
    * @param {string} pathname
    */
    function httpHandler(req, pathname) {
      const reqHdrRaw = req.headers
    
      // preflight
      if (req.method === 'OPTIONS' &&
        reqHdrRaw.has('access-control-request-headers')
      ) {
        return new Response(null, PREFLIGHT_INIT)
      }
    
      let rawLen = ''
    
      const reqHdrNew = new Headers(reqHdrRaw)
    
      const refer = reqHdrNew.get('referer')
    
      let urlStr = pathname
    
      const urlObj = newUrl(urlStr)
    
      /** @type {RequestInit} */
      const reqInit = {
        method: req.method,
        headers: reqHdrNew,
        redirect: 'follow',
        body: req.body
      }
      return proxy(urlObj, reqInit, rawLen)
    }
    
    
    /**
    *
    * @param {URL} urlObj
    * @param {RequestInit} reqInit
    */
    async function proxy(urlObj, reqInit, rawLen) {
      const res = await fetch(urlObj.href, reqInit)
      const resHdrOld = res.headers
      const resHdrNew = new Headers(resHdrOld)
    
      // verify
      if (rawLen) {
        const newLen = resHdrOld.get('content-length') || ''
        const badLen = (rawLen !== newLen)
    
        if (badLen) {
          return makeRes(res.body, 400, {
            '--error': `bad len: ${newLen}, except: ${rawLen}`,
            'access-control-expose-headers': '--error',
          })
        }
      }
      const status = res.status
      resHdrNew.set('access-control-expose-headers', '*')
      resHdrNew.set('access-control-allow-origin', '*')
      resHdrNew.set('Cache-Control', 'max-age=1500')
    
      resHdrNew.delete('content-security-policy')
      resHdrNew.delete('content-security-policy-report-only')
      resHdrNew.delete('clear-site-data')
    
      return new Response(res.body, {
        status,
        headers: resHdrNew
      })
    }

     

  • 【DIY配置nas】如何选择 CPU

    在选择 NAS(网络附加存储)设备的 CPU 时,主要考虑以下几个因素:

    1. 性能需求:NAS 主要用于存储和数据传输,因此对 CPU 的性能要求不高。除非你有特殊的需求,例如运行虚拟机或多个 Docker 容器。
    2. 功耗:NAS 需要长期 24 小时运行,功耗直接影响电费,因此选择低功耗的 CPU 很重要。
    3. 兼容性:确保 CPU 兼容现有的硬件和软件,例如支持你使用的 NAS 系统(如 Unraid、群晖等)。

    常见的 CPU 性能对比

    以下是几款常见 CPU 的性能对比数据,截图来自 PassMark 网站:

    CPU 型号 首次测试时间 单线程评分 核显信息 总体评分
    N5105 2021年 1500 4500
    N100 2022年 1600 4800
    i3-12100 2022年 2700 9000

    选择建议

    • 无需虚拟 Windows:N5105、N100 足够用。例如 N5105 在运行 Unraid 系统,开 30 多个 Docker 容器和一个虚拟的 iStoreOS,CPU 负载并不高。
    • 需要使用 Windows 虚拟机:可以选择 G7400 或 i3-12100。

    功耗考虑

    NAS 需要 24 小时运行,功耗是一个重要考虑因素。根据全年 365 天计算:

    • 每增加 1W 功耗,每年多耗电 8.7 度。
    • 每增加 10W 功耗,每年多耗电 87 度。

    性能与功耗对比

    下面是几款 CPU 的性能和功耗对比:

    CPU 型号 单线程评分 总体评分 功耗 (TDP)
    i3-8100T 1800 6500 35W
    i3-8100 1900 6700 65W
    N5105 1500 4500 10W
    N100 1600 4800 6W

    可以明显看出,8100 相比 N100 性能优势不大,但功耗高不少,且不支持 12 代 CPU 新增的 AV1 编解码功能。从价格上看,8100 平台的整体成本也较高,N100 更具性价比。

    现有的 i3-8100(T) 配置

    如果你有现成的 i3-8100(T) 配件,组建一套 NAS 当然没问题,但如果从头开始配置,建议选择 N100 或 N5105 这种新一代低功耗、高性价比的方案。

    为什么论坛仍推荐 i3-8100?

    因为群晖支持 11 代、12 代 CPU 仅是近一年的事情,很多用户基于过去的经验仍在使用 6~10 代 Intel 平台。大量分享文章基于这些平台,导致新手用户容易被误导。实际上,选择新一代低功耗 CPU 更为明智。

  • 重磅消息!暴雪国服战网正式开启,可以登录了!

     

    重磅消息!暴雪国服战网正式开启,可以登录了!战网登录地址是:

    account.battlenet.com.cn

    打开上述网址之后,我们就可以看到战网的登录界面,只要输入自己的账号或者手机都可以进行登录,再输入密码就可以了。需要手机进行验证码验证。

    如果登录出现问题则可以点击下方的【无法登陆】进行找回。官方提供了“忘记密码”、“我的战网账号已被锁”和“其他账号问题”等指引。

    战网页面跟以前旧版的战网完全一样。在“充值&游戏时间”一栏可以看到自己所有的战网账号,下面的“近期购买”记录也全部都在,我这里显示了以往在暴雪购买的一些游戏内容,以及礼物领取记录,2016年的记录都在。

    这意味着战网的所有全部数据也都恢复完毕了。

    另外根据其他社区网友发布的消息,上次退款没操作的朋友,战网点数都还在!

    战网页面左边一栏的最下方有一个【下载战网】的标签,但是目前跳转的页面还无法获取:

    download.battlenet.com.cn

    另外还有一个国服战网的支持页面显示“功能开发中,敬请期待”。

    此外,战网还额外开放了一次免费改名服务,由于我没“改过名字”,不知道这个操作是不是新近添加的,有知道的老哥可以评论区补充。(评论区已指出,非本次独有内容)

  • 从零开始玩PT-新人指南

    1. PT是什么?
    2. 理论知识
      1. 种子
      2. DHT
      3. PXE
      4. 辅种
      5. 法力值
      6. 图床
      7. 做种率
      8. 盒子(Seedbox)
      9. 资源的标识
    3. PT站点介绍
    4. 怎样注册某个PT站点的账号?
    5. 新手查核
    6. 常用工具
    7. 注意事项
    8. 结语

    一、PT是什么?

    首先介绍一下BT。BT(BitTorrent)是一种用于对等网络中文件共享的网络协议程序。它的最大特点是下载的人越多,下载速度就越快,因为在你下载的同时,你会把下载到的部分文件上传给其他人,而其他人下载了也会把下载的部分共享出来。由于BT有很多人下载完就跑,不愿意做共享,所以催生了PT(Private Tracker)的产生。

    PT是一个打造我为人人,人人为我的下载协议。最早出现的是BT,我们常常下载的种子便是这种。有人会说那我平常下电影直接用迅雷或百度网盘不就行了嘛,为什么要用PT呢?首先,迅雷和百度网盘的下载速度是多么令人沮丧,它们的程序在后台其实也在间接地把本机的资源共享给其他人,其实原理上都是相同的,只不过它们从中限速做会员割韭菜。此外,你未必能找到相关资源的BT种子,正所谓无规矩不成方圆,如果有一些规矩加以约束,这个圈子才能越来越好,形成良性的闭环。

    PT相比BT有两个明显的改进:一是私密的小范围下载,二是进行流量核算,其依据上传量决定你的权限。因此提供PT服务的网站是不公开的,采用邀请制或不定时开放注册。用户注册后会得到一个passkey,服务器通过passkey识别每个用户,用户从某PT站下载种子后,该种子即带有用户的passkey。因此PT的种子是不可外流到其他地方。

    所以在出现问题询问时,务必隐藏好你的passkey。例如:截图时用马赛克遮挡passkey,因为如果你的key泄露某些别有用心的人就可以使用你的key进行下载,这比你的账号密码泄露更加可怕。

    由于有passkey,用户上传及下载即可核算。在大多数PT站会以下载份额(共享率)规矩用户需上传多少后才可下载多少,共享率过低者会被系统取消使用PT的资格。因为需要有足够的上传方可下载,因此有些用户会租借网络上有大带宽的Seedbox以提升自己的上传率。Seedbox就是租借一个大硬盘大带宽的服务器,在上面发布资源供他人下载,这样别人下载的流量都会核算到你的账号里,上传量会很高,这意味着你自己可以随意下载你想下载的资源。

    二、理论知识

    其实和你平常在网上下载资源相同,我们都会得到一个XXX.torrent的种子文件,无非是BT不带key,PT带key而已。在正式开始之前,我们来补充一下相关理论知识。

    1. 种子

    根据BitTorrent协议,文件发布者会根据要发布的文件生成一个.torrent文件,即种子文件,也简称为“种子”。种子文件本质上是文本文件,包含Tracker信息和文件信息两部分。Tracker信息主要是BT下载中需要用到的Tracker服务器的地址和针对Tracker服务器的设置,文件信息是根据对目标文件的计算生成的,计算结果根据BitTorrent协议内的Bencode规则进行编码。它的主要原理是需要把提供下载的文件虚拟分成大小相等的块,块大小必须为2k的整数次方(由于是虚拟分块,硬盘上并不产生各个块文件),并把每个块的索引信息和Hash验证码写入种子文件中;所以,种子文件就是被下载文件的“索引”。

    下载者要下载文件内容,需要先得到相应的种子文件,然后使用BT客户端软件进行下载。下载时,BT客户端首先解析种子文件得到Tracker地址,然后连接Tracker服务器。Tracker服务器回应下载者的请求,提供下载者其他下载者(包括发布者)的IP。下载者再连接其他下载者,根据种子文件,两者分别告知对方自己已有的块,然后交换对方所没有的数据。此时不需要其他服务器参与,分散了单个线路上的数据流量,因此减轻了服务器负担。下载者每得到一个块,需要算出下载块的Hash验证码与种子文件中的比对,如果相同则说明块正确,不相同则需要重新下载这个块。这种规则是为了保证下载内容的准确性。

    2. DHT

    全称为分布式哈希表(Distributed Hash Table),是一种分布式存储方法。在不需要中心服务器,每个客户端负责一个小范围的路由,并负责存储一小部分数据,从而实现整个DHT网络的寻址和存储。使用支持该技术的BT下载软件,用户无需连上Tracker就可以下载,因为软件会在DHT网络中寻找下载同一文件的其他用户并与之通讯,开始下载任务。这种技术的优点十分明显,就是大大减轻了Tracker的负担(甚至不需要)。用户之间可以更快速创建通讯(特别是与Tracker连接不上的时候)。

    3. PXE

    是Peer Exchange(用户交换)的简写,我们可以将其理解为“节点信息交换”。前面说到了DHT网络是没有中心服务器的,那么我们的客户端总不能满世界去喊:“我在下载这个文件,快来连我吧。”(很大声)。所以就通过各个BT客户端自带的节点去同步路由表实现DHT网络连接。

    4. 辅种

    其他人发布了资源,你手里刚好也有这个资源,那么你下载种子之后,只要数据经过了hash校验就会变成做种状态。

    • 初始做种/超级种子/超级种子模式:有些BitTorrent客户端用户下载完成后就关掉下载任务,整个过程只提供了较少量数据给其他用户。为尽量避免这种行为,在非官方BitTorrent协议中存在超级种子的算法。这种算法对文件发布者的种子文件有要求。文件发布者可以分几步发布文件,发布者不需要一次提供文件所有内容,而是慢慢开放的下载内容的比例,延长下载时间。此时,速度快的人因为未下载完必须提供给他人数据,速度慢的人有更多机会得到数据。

    5. 法力值

    发布资源会消耗法力值,辅种不会消耗法力值。法力值是系统为防止垃圾种子泛滥的一种手段。

    6. 图床

    一般用于发布资源时的图片展示、描述等。这样既能加快网页访问速度,也能加快图片加载速度。

    7. 做种率

    做种率高于3.0的种子,在你做种时流量不计入流量统计。

    8. 盒子(Seedbox)

    指租用大带宽服务器来提高上传速度。

    9. 资源的标识

    一般是几个英文单词的大写首字母+资源发布时间。

    三、PT站点介绍

    1. TTG (The Genesis)

    站点特色:资源丰富,速度快,种子更新及时

    • 是否开放注册:否
    • 是否支持邀请:是

    2. M-Team

    站点特色:动画和剧集资源丰富,速度快

    • 是否开放注册:否
    • 是否支持邀请:是

    3. HDC (HDChina)

    站点特色:高质量电影资源丰富,速度快

    • 是否开放注册:否
    • 是否支持邀请:是

    4. OurBits

    站点特色:资源丰富,速度快,种子更新及时,且社区氛围较好

    • 是否开放注册:否
    • 是否支持邀请:是

    四、怎样注册某个PT站点的账号?

    1. 注册方法之一是通过PT站点的不定时开放注册,但这种机会较少,需要经常关注相关论坛。
    2. 通过已注册用户的邀请获取邀请链接注册账号。

    五、新手查核

    什么是新手查核?

    当新用户首次注册某个PT站点时,通常需要经过一个试用期。在此期间,用户需要证明自己具备合理的下载上传行为,具体表现为保持较高的上传下载比率。这段时间内,用户会受到较为严格的流量监控,并需要在规定的时间内完成特定的上传量和下载量任务,以通过查核期。

    如何通过新手查核?

    1. 合理下载:选择一些种子数量较多的资源下载,这样能够迅速提升上传量。
    2. 多做种:尽可能多的种子资源,以保持持续的上传量。
    3. 关注站点公告:时刻关注站点发布的公告,了解最新的规则和动态。
    4. 求助老用户:如果遇到问题,可以向站点内的老用户或管理员寻求帮助。

    六、常用工具

    下载工具

    1. qBittorrent:一款功能强大的BT下载工具,支持PT站点所需的所有功能。
    2. Transmission:一个轻量级的BT客户端,适用于多平台使用。

    查找工具

    1. PT之家:一个综合的PT站点导航网站,方便用户查找并注册各种PT站点。
    2. NexusPHP:一个优秀的PT站点管理系统,许多PT站点都基于此系统构建。

    辅种工具

    1. RatioMaster:一款模拟上传工具,可以在不实际上传的情况下提高上传量。
    2. Seedbox:租用大带宽服务器,以提高上传速度和上传量。

    七、注意事项

    1. 保持良好的共享率:上传下载比率应保持在一个合理的范围内,以避免账号被封禁。
    2. 遵守站点规则:每个PT站点都有其特定的规则和规范,用户应严格遵守。
    3. 保护个人信息:避免泄露自己的passkey和其他敏感信息,以免被恶意利用。

    八、结语

    通过本文的介绍,相信大家对PT的基础知识和操作有了初步的了解。PT不仅是一种高效的下载方式,也是一种需要用户共同维护的社区文化。希望大家在使用PT的过程中,能够合理分享资源,共同维护一个健康的PT生态圈。

    “`

  • 全国学生可领,网易宣布免费赠送 VIP 邮箱、网易云音乐等会员礼包

    从 5 月 30 日起,全国所有拥有 Edu 邮箱的高校学生,无论是本科生还是研究生,都可以免费领取“启航邮”专属 VIP 邮箱(点击跳转),还能获得网易云音乐、网易严选和有道云笔记的免费会员大礼包。
    image
    据官方介绍,启航邮有以下六大权益:

    • 10G 容量、3G 大附件;
    • 无广告界面,专注邮件收发;
    • VIP 专项客服团队快速处理账号问题
    • 邮箱地址带有学校名和 VIP 标识:如果你是清华的同学,你将得到一个域名为 —— [email protected] 的启航邮(thaa 取自清华校友总会英文简称)。
    • 离开校园后,也能使用;
    • 免费拥有网易云音乐、网易严选、云笔记会员。

    领取步骤:

    1. 网易云音乐(三个月)、网易严选会员:领取启航邮时,绑定手机号码后,该手机号码会被自动关联网易云音乐及网易严选会员。
    2. 有道云笔记会员:成功登录启航邮后,你的邮箱会自动收到一封云笔记会员登录邮件,点击邮件,按照提示填写已注册的有道云笔记账号,即可绑定会员。
    3. 在此之前,网易已经宣布向清华等 10 多所高校免费开通 VIP 邮箱,免费享受网易云音乐、网易严选、云笔记等会员特权,这一次是之前活动范围的扩大。
  • 游戏资讯

    亚马逊

     

    《生命回响》

    【GOG激活】【现已可领取 – 截止至7月18日】
    https://keylol.com/t951383-1-1(发帖人:好马配好鞍)

    《布兰博:山丘之王》

    【Epic激活】【现已可领取 – 截止至7月24日】
    https://keylol.com/t950361-1-1(发帖人:时间入世)

    《辐射3》年度版

    【GOG激活】【现已可领取 – 截止至6月12日】

    《电工模拟器》

    【Epic激活】【现已可领取 – 截止至7月12日】
    https://keylol.com/t948220-1-1(发帖人:时间入世)

    《古墓丽影》年度版

    【GOG激活】【现已可领取 – 截止至6月6日】

    《乐高星球大战III:克隆人战争》

    【GOG激活】【现已可领取 – 截止至6月6日】
    https://keylol.com/t947005-1-1(发帖人:时间入世)

     

    Epic

     

    《骑士精神2》

    【现已可领取 – 截止至6月6日晚上11点】

    神秘游戏

    【6月6日晚上11点才开始 – 截止至6月13日晚上11点】
    https://keylol.com/t951345-1-1(发帖人:cvisy)

    《战锤40K:格雷迪厄斯》

    【现已可领取 – 截止至5月31日】
    https://keylol.com/t950346-1-1(发帖人:q1a2w3s4e5d6)

    多个免费游戏的DLC

    【需要本体,本体免费】【现已可领取 – 截止至6月13日】
    https://keylol.com/t949256-1-1(发帖人:万狐飞仙)

    《Pinball FX》的DLC《Super League Football》

    需要本体,本体免费】【现已可领取 – 截止至6月17日】
    https://keylol.com/t949251-1-1(发帖人:q1a2w3s4e5d6)

     

    亚马逊

     

    《诡野西部:决定版》

    【Epic激活】【6月6号才开始 – 截止时间为止】

    《星球大战:前线II 经典版》

    【GOG激活】【6月6号才开始 – 截止时间为止】

    《神秘力量》

    【Epic激活】【6月13号才开始 – 截止时间为止】

    《爆裂特遣队vs 克里德博士的邪恶军团》

    【GOG激活】【6月13号才开始 – 截止时间为止】
    https://keylol.com/t951156-1-1(发帖人:q1a2w3s4e5d6)

    《布兰博:山丘之王》

    【Epic激活】【现已可领取 – 截止至7月24日】
    https://keylol.com/t950361-1-1(发帖人:时间入世)

    《辐射3》年度版

    【GOG激活】【现已可领取 – 截止至6月12日】

    《电工模拟器》

    【Epic激活】【现已可领取 – 截止至7月12日】
    https://keylol.com/t948220-1-1(发帖人:时间入世)

    《古墓丽影》年度版

    【GOG激活】【现已可领取 – 截止至6月6日】

    《乐高星球大战III:克隆人战争》

    【GOG激活】【现已可领取 – 截止至6月6日】
    https://keylol.com/t947005-1-1(发帖人:时间入世)

     

    Steam

     

    《Clickout》

    【抢先体验阶段免费,之后收费】【现已可领取 – 截止时间未知】
    https://keylol.com/t950973-1-1(发帖人:毛球拌面)

    《战锤40K:格雷迪厄斯》

    【现已可领取 – 截止至5月31日】
    https://keylol.com/t950354-1-1(发帖人:万狐飞仙)

    《坦克世界闪电战》《坦克世界》《战舰世界》分别一个DLC

    【需要本体,本体免费】【现已可领取 – 截止至5月30日】
    https://keylol.com/t950344-1-1(发帖人:万狐飞仙)

    《Cube Hero Odyssey》

    【抢先体验阶段免费,之后收费】【现已可领取 – 截止时间未知】
    https://keylol.com/t949628-1-1(发帖人:冰雪聪明琪露诺)

    《Mind The Abyss》

    【抢先体验阶段免费,之后收费】【现已可领取 – 截止时间未知】
    https://keylol.com/t949156-1-1(发帖人:冰雪聪明琪露诺)

    《Pinball FX》的DLC《Super League Football》

    需要本体,本体免费】【现已可领取 – 截止至6月17日】
    https://keylol.com/t949251-1-1(发帖人:q1a2w3s4e5d6)

    《战舰世界》的2个DLC

    需要本体,本体免费】【现已可领取 – 截止至6月27日】
    https://keylol.com/t949217-1-1(发帖人:毛球拌面)
    FOD免费的形式,部分且是长期有效或者结束时间未知

  • ChatNet v1.8.1 – 在线聊天室源码汉化版

    测试地址:https://chat.dooge.shop/

    ChatNet是国外多一款多用户聊天室源码,程序支持同时创建多个聊天室,全站响应式完美适应PC和移动设备,界面的设计现代且用户友好,将使您的网站或应用无缝地成为功能丰富的社区和社交平台。程序内置英语,可轻松翻译为多种语言。

    安装环境

    • PHP 7.0.33或任何更高版本的PHP 7
    • Apache,NGINX或LiteSpeed
    • mod_rewrite或NGINX重写规则
    • MySQL或MariaDB
    • cURL PHP扩展
    • MBString PHP扩展
    • GD PHP扩展
    • IMAP PHP扩展
    • Json PHP扩展
    • FileInfo PHP扩展
    • Exif PHP扩展
    • Zip PHP扩展

    安装教程

    这里默认你已经绑定好域名,我们将 ChatNet v1.8.1 Nulled.rar 上传到网站目录下,并解压缩。进入 chatnet 目录,选中全文件剪切到网站根目录。

    图片[1]-ChatNet v1.8.1 – 在线聊天室源码汉化版-隐匿者

    配置伪静态

    location / {
    try_files $uri $uri/ /index.php?$args;
    }
    图片[2]-ChatNet v1.8.1 – 在线聊天室源码汉化版-隐匿者

    访问 /install 路径进行安装

    图片[3]-ChatNet v1.8.1 – 在线聊天室源码汉化版-隐匿者

    如果发现有缺少的模块,则需要进入宝塔面板的软件商店,针对指定PHP版本安装扩展,比方说我们这里看到 Exif 模块是缺少的。

    图片[4]-ChatNet v1.8.1 – 在线聊天室源码汉化版-隐匿者
    图片[5]-ChatNet v1.8.1 – 在线聊天室源码汉化版-隐匿者

    安装完成之后记得要重载php服务,否则配置不会生效。

    图片[6]-ChatNet v1.8.1 – 在线聊天室源码汉化版-隐匿者

    然后需要输入数据库相关账户,我们去宝塔面板直接复制即可

    图片[7]-ChatNet v1.8.1 – 在线聊天室源码汉化版-隐匿者
    图片[8]-ChatNet v1.8.1 – 在线聊天室源码汉化版-隐匿者

    设置管理员信息后,进入下一步,购买代码填写 Nulled 即可

    图片[9]-ChatNet v1.8.1 – 在线聊天室源码汉化版-隐匿者
    图片[10]-ChatNet v1.8.1 – 在线聊天室源码汉化版-隐匿者

    下载地址

  • 【Windows】-Clash Verge

     

    简介

    Clash Verge是代理工具Clash内核的GUI图形客户端,支持Windows、Linux、macOS系统,分流规则功能强大且支持多种代理协议,如V2Ray、Trojan、Shadowsocks、ShadowsocksR、Socks等协议,使用方法和功能和Clash for Windows类似,可以完美代替Clash for Windows使用,通过本文2024最新Clash Verge使用教程快速入门篇所掌握的技巧,能快速方便配置代理协议进行代理访问。

    下载地址

    官网下载

    https://github.com/zzzgydi/clash-verge/releases

    新手用户建议下载稳定版本,即版本号后标记为 Laest 的版本,目前截止本文修改日期最新稳定版本为 v1.3.8 为例,如下表所示,其中文件名当中的 1.3.8 为版本号,版本号之后跟着的是平台名称及软件包名称。

    软件支持 x64、x86、arm64 三种架构的 Windows 系统。 如果你不知道你的 CPU 架构,下载 x64 版本即可,即下载文件列表中文件名为 Clash.Verge_1.3.8_x64_zh-CN.msi 的安装文件。

    OneDrive网盘下载

    如果你实在不清楚下载哪个版本,您可以直接点我下载

    如何切换中文

    添加节点

    打开本站仪表盘界面,点击一键订阅 

    将复制的服务商提供的节点订阅地址直接粘贴到软件中,点击软件主界面的配置,直接在配置文件链接框中粘贴,然后点击导入即可,如下图所示:

    导入成功之后,界面右上角会提示 Successfully import profile. 即代表导入节点订阅地址成功,同时在配置文件链接框下面会有一个节点列表,如下图所示:

    自此,就成功添加了一个配置文件,接下来就可以选择合适的代理节点来进项代理上网访问。

    选择节点

    选择节点 在添加为订阅地址之后,需要选择一个代理节点使用,点击软件主界面左侧的 代理 选项卡,软件右上角代理规则处默认保持 规则 即可,代理模式主要有以下四种:

    规则:所有请求根据配置文件规则进行分流

    全局:所有请求直接发往代理服务器

    直连:所有请求直接发往目的地,即不使用代理

    脚本:所有请求根据脚本文件规则进行分流

    全局模式可能会导致国内流量也走代理访问,除了网络会变慢外,还会消耗套餐流量。规则模式的好处就是区分国内国外的流量只有在规则内的国外网站才会走代理,这样即不影响国内访问速度,又节省套餐流量,所以如果没有什么特别的需求,一般选择 规则 即可。

    然后在展开的节点组之中任意单击鼠标左键选择一个节点即可,如下图所示:

    开启代理

    在选择完节点之后,就可以开启系统代理来进行科学上网了,点击软件主界面左侧的 设置 选项卡,在系统设置处找到 系统代理 选项并开启开关即可,开启状态下按钮状态为紫色,如下图所示为开启状态。

    Ipv6节点使用

    开启如图设置即可!

    注意事项

    1.重启电脑后若无法访问网络,请关闭系统代理后重启电脑

     

    2.打开系统代理仍然无法访问外网时请尝试安装并打开服务模式,随后打开tun模式并关闭系统代理

     

    3.导入时注意不要开启其他代理软件

     

    4.内核切换失败时请尝试重启电脑以及卸载重装

     

  • 非常简约的影视程序

    采用 VUE + element plus 开发的

    演示地址:https://tv.dooge.shop/

    设计灵感来源于 @youjia 大佬的 keai.cm

    代码和设计比较简陋,毕竟是上班无聊花了几个小时功夫写的,后面有时间再优化和写网站后台

    资源站是写死的  采用的 1080zy 库,比较高清,测试了一下好像没看到有广告?!

     

     

    压缩包说明:已经打好包了,上传宝塔即可

    搭建细节:

    首先,宝塔的网站配置需要增加两行,否则代理接口会返回 502

        proxy_ssl_server_name on;
        proxy_ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
    Markup

    然后反向代理需要配置,否则程序无法正常使用

    最后伪静态,否则刷新会 404:

    location / {
        try_files $uri $uri/ /index.html;
    }
    
    Markup

     

     转自:https://www.dalao.net/thread-28530.htm