![]()
可爱的个人网站!主站、棉花糖、资源站和博客站前后端分离,后端均基于Python3 Django5 mod_wsgi框架和mysql8.1数据库,前端依赖jQuery和Swup。博客站前端额外采用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文档。
开始
本站后端基于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.conf和django\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 -pCREATE 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 whitenoisecd c:\iamyukino.cn\djangopython manage.py migrate注释掉\django\pymain\settings.py的INSTALLED_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 iamyukinohttpd -k start -n iamyukino访问localhost,可以看到页面正常。
若遇到问题,可输入以下指令卸载
httpd -k stop -n iamyukinohttpd -k uninstall -n iamyukino或者重启restart刷新 httpd -k restart -n iamyukino
Astro配置
cd c:\iamyukino.cn\astro\fuwarinpm install -g pnpm若npm报错禁止运行脚本,则先输入以下指令再npm install
Set-ExecutionPolicy RemoteSigned下载完pnpm后,执行以下指令(—max-old-space-size可自行根据内存大小调整)
pnpm installpnpm build -- --max-old-space-size=2048Umami API 密钥,用于访问 Umami 统计数据
# 如果在 config.ts 中启用了 Umami,建议在此配置 API 密钥UMAMI_API_KEY=your_umami_api_key_here# bcrypt 盐值轮数(10-14 推荐,默认 12)BCRYPT_SALT_ROUNDS=12pinned 字段允许您将重要文章置顶到博客列表的顶部。置顶文章将始终显示在普通文章之前,无论其发布日期如何。
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.py的INSTALLED_APPS = 中的rssfeed 注释
修改django/mod_iamyukino/views.py中的akismet_api_key为自己的 Akismet Key(必改,可在https://akismet.com/注册获取您的密钥)
打开cmd窗口(不能用powershell)复制这两行执行,即可开始定时任务:
cd c:\iamyukino.cn\django & pythonfrom rssfeed.commands import start,run,stop,status;run();start();status()from rssfeed.commands import start,run,stop,statusrun() # 手动执行一次同步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')
# 测试djangowhere pythonpython manage.py runserver
# 字体子集压缩pip install fonttoolspip install brotlipyftsubset XiaolaiSC.woff2 --text-file=used.txt --output-file=XiaolaiSC.subset.woff2 --flavor=woff2 --no-hinting --desubroutinizepyftsubset 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\djangopython manage.py makemigrations mod_iamyukinopython manage.py migrate
# 测试postcurl -X POST https://iamyukino.cn/api/x/submit_ask/ -H "Content-Type: application/json" -d "{\"nickname\":\"testuser\", \"que_text\":\"Hello, World!\"}"
# Astropnpm install & pnpm add sharp # 安装依赖pnpm preview # 预览pnpm astro --help # 帮助部分信息可能已经过时










