Mobile wallpaper 1Mobile wallpaper 2Mobile wallpaper 3Mobile wallpaper 4Mobile wallpaper 5Mobile wallpaper 6
雨雪的棉花糖完成啦!冰屋友链接力平台
本站内容100%人工撰写,不使用AI辅助生成。
2025-12-08 更新
? 浏览 · ? 访客

技术栈

可爱的个人网站!主站、棉花糖、资源站和博客站前后端分离,后端均基于Python3 Django5 mod_wsgi框架和mysql8.1数据库,前端依赖jQuerySwup。博客站前端额外采用Astro框架静态生成。整体框架和后端技术栈简洁实用,易于维护。

功能#

冰屋主站/前端基于Bootstrap+jQuery+Popper,提供基础信息阅读、站点聚合和更新推送服务。您可修改此页的文本内容,来详细介绍您和您的项目的具体信息以及决定朋友圈文章推送、留言推送范围等。页面开发时间跨度长,技术栈可能有些过时。

冰屋主站

棉花糖站(友链接力)前端基于jQuery+Swup,后端基于Django,包含 朋友圈(好文推荐)/ask/circle友链接力/ask/tp友链申请状态检测/ask/friends留言板/ask赞助支持/ask/donate等多个模块。

用户可填写表单申请友链,审核通过后,将在棉花糖站展示,同时加入冰屋友链接力的随机名单。加入后可在您的页面中加入我们的友链接力链接https://iamyukino.cn/tp?from=这里写你的域名

冰屋棉花糖爬虫使用规范的请求头:

{"User-Agent": "Mozilla/5.0 (compatible; Iamyukino Check Bot; +https://iamyukino.cn/ask)"}

符合机器人规范,反爬包含完整请求头(Sec-Fetch-*、DNT、Cache-Control等),降低被拦截风险。爬虫每隔两小时对所有友链进行状态检测。当requests检查失败时,启用退避算法,并尝试启用浏览器模式,提高检测的准确度,支持访问中间跳转页面,跟踪跳转过程。若提供Feed订阅服务,还会每隔两小时获取RSS/Atom的更新信息,在棉花糖站侧边栏和朋友圈等多个页面展示。具体内容详见本文后续部分。

棉花糖站友链 棉花糖站友圈 棉花糖站传送

基于BootStrap和Masonry的资源站由于之前用的CDN过期忘记续费图片全没了,目前只剩下一个Live2d看板娘页面可见,整体框架是准备重构的。

资源站

还有基于Astro+Fuwari搭建的博客站,全自动化构建,分为博客文章和即刻短文两个功能,包含哔哔、番剧、相册等多个特色页面,具体参照Fuwari文档。

saicaca
/
fuwari
Waiting for api.github.com...
00K
0K
0K
Waiting...

开始#

本站后端基于Windows Server+Apache24服务器
文章中所有路径均基于iamyukino.cn,请根据实际情况自行修改,可全局搜索iamyukino(\\?)\.cn替换为自己的$1.域名

将项目复制到 C:\iamyukino.cn
修改\apache24\conf\httpd.conf以下两行为实际Python Home路径

LoadFile "C:/Users/Administrator/AppData/Local/Programs/Python/Python313/python313.dll"
WSGIPythonHome "C:/Users/Administrator/AppData/Local/Programs/Python/Python313"

环境变量Path新增C:\iamyukino.cn\apache24\bin\apache24\目录下新建文件夹logs\并新建文件logs\error.log

暂时关闭HTTPS/SSL测试#

本步骤仅供初次配置使用,后续测试生产环境建议启用HTTPS(如有需要,可启用HSTS),可以在各大云厂商申领免费证书。

* 若您已有SSL证书,可复制其中Apache版本的四个文件到\apache24\conf\ssl\目录下,修改\apache24\conf\extra\httpd-vhosts.conf\apache24\conf\extra\httpd-ssl.confdjango\pymain\settings.py中出现的iamyukino.cn(正则搜索iamyukino\\?\.cn)为自己的域名(或ip),即可跳过本步。

\apache24\conf\httpd.conf中注释掉以下行:

# LoadModule ssl_module modules/mod_ssl.so
# Include conf/extra/httpd-ssl.conf
# <IfModule ssl_module>
# SSLRandomSeed startup builtin
# SSLRandomSeed connect builtin
# </IfModule>

apache24\conf\extra\httpd-vhosts.conf中所有代码注释,然后在末尾加入以下内容:

<VirtualHost *:80>
ServerName default
DocumentRoot "${SRVROOT}/htdocs"
ServerName iamyukino.cn
ServerAdmin iamyukino@outlook.com
ErrorLog "${SRVROOT}/logs/error.log"
</VirtualHost>

配置数据库#

下载MySQL 8.1(可顺带安装Navicat Premium Lite)。
运行MySQL Configurator创建root和iamyukino账号。
若MySQL Configurator失败,下载依赖https://aka.ms/vs/16/release/vc_redist.x64.exe
环境变量path加安装路径\MySQL\MySQL Server 8.1\bin
修改django\pymain\settings.py中相关数据库配置。
然后创建数据库(这里使用用户名为iamyukino)

数据库名称:db_iamyukino
字符集:utf8mb4
排序规则:utf8mb4_unicode_ci

也可以用指令创建

mysql -u root -p
CREATE DATABASE db_iamyukino CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
GRANT ALL PRIVILEGES ON db_iamyukino.* TO 'iamyukino'@'%';
FLUSH PRIVILEGES;
exit

无需创建数据表,Django的ORM会自动帮您创建。

配置Django以及测试#

以管理员打开命令行,输入以下内容。若需使用虚拟环境,请根据实际需要自行调整指令。

pip install django pymysql apscheduler requests feedparser whitenoise
cd c:\iamyukino.cn\django
python manage.py migrate

注释掉\django\pymain\settings.pyINSTALLED_APPS = 中的rssfeed
\django\中新建文件夹statics
测试指令,根据报错下载对应包pip install

python manage.py runserver

如果提示端口被占用,先测试以下指令

netstat -ano | findstr :8000

如果有输出,则说明确实被占用,可改用

python manage.py runserver 8080

浏览器访问localhost:8080若看到页面,说明django配置成功。

Apache24配置#

以管理员打开命令行,输入以下内容:

httpd -k install -n iamyukino
httpd -k start -n iamyukino

访问localhost,可以看到页面正常。 若遇到问题,可输入以下指令卸载

httpd -k stop -n iamyukino
httpd -k uninstall -n iamyukino

或者重启restart刷新 httpd -k restart -n iamyukino

Astro配置#

cd c:\iamyukino.cn\astro\fuwari
npm install -g pnpm

若npm报错禁止运行脚本,则先输入以下指令再npm install

Set-ExecutionPolicy RemoteSigned

下载完pnpm后,执行以下指令(—max-old-space-size可自行根据内存大小调整)

pnpm install
pnpm build -- --max-old-space-size=2048

Umami API 密钥,用于访问 Umami 统计数据

# 如果在 config.ts 中启用了 Umami,建议在此配置 API 密钥
UMAMI_API_KEY=your_umami_api_key_here
# bcrypt 盐值轮数(10-14 推荐,默认 12)
BCRYPT_SALT_ROUNDS=12

pinned 字段允许您将重要文章置顶到博客列表的顶部。置顶文章将始终显示在普通文章之前,无论其发布日期如何。

pinned: true # 将此文章置顶
pinned: false # 普通文章(默认)

提示框: 使用> [!NOTE]> [!TIP]> [!WARNING]等创建
数学公式: 使用$行内$$$块级$$语法编写 LaTeX 数学公式
代码高亮: 高级语法高亮,支持行号和复制按钮
GitHub 卡片: 使用::github{repo="用户/仓库"} 嵌入仓库卡片

Feed 爬虫#

此爬虫每隔两小时爬取所有state不为0的友链,对于提供Feed(RSS/Atom)地址的网站,get请求监测feed地址状态,爬取前十篇文章的相关信息,和数据库比对,进行增量更新。对于未提供Feed地址的网站,通过ping监测站点状态,对可能的异常进行标注。

pip install feedparser python-dateutil apscheduler psutil
取消\django\pymain\settings.pyINSTALLED_APPS = 中的rssfeed 注释

修改django/mod_iamyukino/views.py中的akismet_api_key为自己的 Akismet Key(必改,可在https://akismet.com/注册获取您的密钥)

打开cmd窗口(不能用powershell)复制这两行执行,即可开始定时任务:

cd c:\iamyukino.cn\django & python
from rssfeed.commands import start,run,stop,status;run();start();status()
from rssfeed.commands import start,run,stop,status
run() # 手动执行一次同步
start() # 开始定时器(两小时)
stop() # 结束定时器
status() # 获取下次执行的时间

后续使用#

更新Django和Apache相关内容后 httpd -k restart -n iamyukino
更新Astro相关内容后 pnpm build -- --max-old-space-size=2048

每次重启服务器需启动数据库、httpd -k restart -n iamyukino、然后启动Feed爬虫(启动方法见Feed爬虫一节)

全局搜索(建议屏蔽dist目录)iamyukino\\?\.cn替换为自己的域名。
全局搜索百度统计、Umami统计、百度地图API、Akismet API相关的请自行更换为自己的。
配置SSL可按需打开前边步骤注释掉的SSL相关内容。

一些好用的网站(外部链接具有时效性且安全性未知,仅供个人学习参考,雨雪冰屋不对其安全性和可靠性负责):
Svg矢量图代码及图标库,很全且搜索方便,可以直接复制Svg代码:https://icon-sets.iconify.design/
图片压缩工具网站,本地运行无需上传,且能自行决定压缩比和压缩算法: https://squoosh.app/

其余可能用到的指令:

# 运行pip install mod_wsgi生成.so文件mod_wsgi-express module-config(.pyc后缀改.so)
# httpd 相关
httpd.exe -k install -n 'iamyukino'
httpd.exe -k start -n 'iamyukino'
httpd.exe -k restart -n 'iamyukino'
# net start iamyukino (httpd.exe -k start -n 'iamyukino')
# net stop iamyukino (httpd.exe -k stop -n 'iamyukino')
httpd.exe -k uninstall -n 'iamyukino'(httpd.exe -k restart -n 'iamyukino')
# 测试django
where python
python manage.py runserver
# 字体子集压缩
pip install fonttools
pip install brotli
pyftsubset XiaolaiSC.woff2 --text-file=used.txt --output-file=XiaolaiSC.subset.woff2 --flavor=woff2 --no-hinting --desubroutinize
pyftsubset cjkFonts_allseto_v1.11.ttf --text-file=used.txt --output-file=cjkFonts_allseto_v1.11.subset.woff2 --flavor=woff2 --no-hinting --desubroutinize
# 数据库备份
mysqldump -u iamyukino -p db_iamyukino t_ask > t_ask_backup.sql
# 数据库结构调整后
cd c:\iamyukino.cn\django
python manage.py makemigrations mod_iamyukino
python manage.py migrate
# 测试post
curl -X POST https://iamyukino.cn/api/x/submit_ask/ -H "Content-Type: application/json" -d "{\"nickname\":\"testuser\", \"que_text\":\"Hello, World!\"}"
# Astro
pnpm install & pnpm add sharp # 安装依赖
pnpm preview # 预览
pnpm astro --help # 帮助
雨雪的棉花糖完成啦!冰屋友链接力平台
https://iamyukino.cn/blog/posts/about-this-site/
作者
iamYukino
发布于
2025-12-08
许可协议
CC BY-NC-SA 4.0

部分信息可能已经过时

×