跳到主要内容

五一假期:南京之行

· 阅读需 6 分钟
林林
在西安读大二的小菜鸡

去年国庆节没出去玩,清明假期短,五一刚刚好。原本想着回一趟家,毕竟在学校待了两个月了,但没约到火车票。不回去了,改成旅游。去北京,但北京的朋友说那边挤,不推荐去。去成都吧,成都的同学不愿意出门。去长沙吧,没有什么时间点不错的车票。南京算是一个还行的选择。

临行前几天,我的母亲又告诉我机票价格降下来了,要不要回家,或者就近去山西太原看看也行,太原啊晋城啊也有好看的,但南京的计划已定,变更起来就麻烦多了。

西安北到南京南,从早上九点到下午三点,中午叫了一份郑州东的外卖,跨过长江。坐高铁的经历对我来说还算新奇,也是头两回坐G开头的车。

西安北到南京南

到达南京南

侵华日军南京遇难同胞纪念馆的票难约,尤其难约。它不像中山陵那样一下就告诉我票没了,它每天放两次票,一直放到参观前一天,我就这么掐着时间点抢着约,今天八点没约到下午五点再战。准点进去提交总是显示人太多了,接着是做滑块和算术题,做完之后接着做,直到这个时间段的票约完为止,也就知道自己白做题了。后面从抖音上看到这种抢票需要慢慢悠悠去预约,刚好避开刚开始的高峰期,就约成了。但我照着这个教程预约,还没出验证码呢,就告诉我没了。一鼓作气,再而衰,三而竭。到后面,我连那个预约小程序都不想打开了,约也是约不上的。南京大屠杀史实陈列的那个展览没约上,但三个必胜的展览倒是一开始就约成了。我将这个作为我到南京的第一站。南京的展览很多,而这算是我整个旅途中看得最认真的展览了。

当天下午下起了雨

一个时间长廊,标记着各年的事件

群像雕塑

步入展厅之前是这样空旷的空间,有灯光在刺眼地闪,非常安静

一些海报

我们胜利了

参观完展览后,坐地铁到一家餐馆与高中同学晚餐。然后逛了逛德基广场,参观了一下豪华厕所。

雨中的新街口

晚上九点多回到民宿,玩会方舟,然后睡觉。第二天起来,附近找了一家店吃了个鸡蛋汉堡,然后坐地铁到钟山风景区,看看明孝陵,然后到梧桐大道看看,发现全是人。

南京小巷

风景有点像市民公园

梧桐大道

神马

孝陵

从明孝陵往下看

到一个地方,参观参观同学的大学估计成了我们的一个传统……在Norcleeh的帮助下,我得以进入南邮参观参观。南邮的仙林校区感觉跟西电一样远离主城区,但因为南邮旁边还有其他几所大学所以附近有些广场和商铺,而西电就没有这样的待遇了。南邮一进去就是两侧栽着梧桐的大道,也算是一个梧桐大道了。高中同学告诉我,南邮又叫南京自行车大学,大道上面不是停满了车,就是骑满了车。

梧桐大道

南邮校门

图书馆门前的一篇草地

参观完南邮之后打了个车回民宿休息,一觉起来就是下午三点半,睡前头晕想吐,估计是中暑了,睡完之后好一些,洗一把脸起来逛一逛瞻园。晚上又到夫子庙看看,所谓不挤一次不算来南京,但感觉没什么好看的,没留什么照片。

南京夫子庙

园林

讲解

园林

秦淮河上

次日早上参观总统府。

临时国民政府

总统府礼堂

天下为公

只要不背叛人民就一定有出路

参观完总统府之后在南京的路上走走,不知不觉就走到浮桥的地铁站了。想着时间也不早了,附近找了一家兰州拉面吃炒刀削,就坐地铁到南京南站。从下午两点到晚上八点,又坐了六个小时的高铁。趴在小桌板上睡了一会,靠在座椅上又睡了几次。

浮桥地铁站

过长江

从南京南向外看

到西安

钟山风雨起苍黄,百万雄师过大江。
虎踞龙盘今胜昔,天翻地覆慨而慷。
宜将剩勇追穷寇,不可沽名学霸王。
天若有情天亦老,人间正道是沧桑。

毛泽东《七律·人民解放军占领南京》

再见面板:Debian构建WordPress

· 阅读需 4 分钟
林林
在西安读大二的小菜鸡

任务要求:使用Debian纯命令行构建自己的WordPress网站,并通过一些方法支持http://linlin.zzo访问。

linlinzzo@linlinzzo:~$ cat /etc/os-release
PRETTY_NAME="Debian GNU/Linux 13 (trixie)"
NAME="Debian GNU/Linux"
VERSION_ID="13"
VERSION="13 (trixie)"
VERSION_CODENAME=trixie
DEBIAN_VERSION_FULL=13.4
ID=debian
HOME_URL="https://www.debian.org/"
SUPPORT_URL="https://www.debian.org/support"
BUG_REPORT_URL="https://bugs.debian.org/"

安装所需要的应用

sudo apt install -y php-fpm # PHP
sudo apt install nginx

安装 nginx 的时候报错Not attempting to start NGINX, port 80 is already in use.,当我通过Linux 查看端口占用情况 | 菜鸟教程的方法去检查端口占用的时候发现lsof和netstat命令都不存在,用apt把lsof安装一下。发现是apache把80端口给占了。

linlinzzo@linlinzzo:~$ sudo lsof -i:80
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
apache2 9027 root 4u IPv6 35905 0t0 TCP *:http (LISTEN)
apache2 9030 www-data 4u IPv6 35905 0t0 TCP *:http (LISTEN)
apache2 9031 www-data 4u IPv6 35905 0t0 TCP *:http (LISTEN)
apache2 9032 www-data 4u IPv6 35905 0t0 TCP *:http (LISTEN)
apache2 9033 www-data 4u IPv6 35905 0t0 TCP *:http (LISTEN)
apache2 9034 www-data 4u IPv6 35905 0t0 TCP *:http (LISTEN)

把apache卸载之后就可以用systemctl启动nginx了。

正要打算从官网下载MySQL,结果发现wget没装,把wget装一下,然后安装MySQL。

CREATE USER '111'@'localhost' IDENTIFIED BY '111';
CREATE DATABASE lin;
GRANT ALL PRIVILEGES ON lin.* TO '111'@'localhost';

ip addr看虚拟环境的IP,通过设置hosts文件让linlin.zzo指向虚拟环境。因为Nginx的配置文件是照搬网上的,一开始看日志是root设置错了还没有设置好访问权限,改好后还是报错,发现是php-fpm的路径不对。用where命令找不到php-fpm。通过下面的方法找到.sock的地址。

linlinzzo@linlinzzo:/etc/nginx/conf.d$ sudo systemctl status php8.4-fpm
● php8.4-fpm.service - The PHP 8.4 FastCGI Process Manager
Loaded: loaded (/usr/lib/systemd/system/php8.4-fpm.service; enabled; preset: enabled)
(...)
linlinzzo@linlinzzo:/etc/nginx/conf.d$ cat /usr/lib/systemd/system/php8.4-fpm.service
(...)
[Service]
Type=notify
ExecStart=/usr/sbin/php-fpm8.4 --nodaemonize --fpm-config /etc/php/8.4/fpm/php-fpm.conf
ExecStartPost=-/usr/lib/php/php-fpm-socket-helper install /run/php/php-fpm.sock /etc/php/8.4/fpm/pool.d/www.conf 84
ExecStopPost=-/usr/lib/php/php-fpm-socket-helper remove /run/php/php-fpm.sock /etc/php/8.4/fpm/pool.d/www.conf 84
(...)

这下可以显示出页面了,提示说需要安装一个PHP拓展,那我们安装一下。

linlinzzo@linlinzzo:/etc/nginx/conf.d$ sudo apt install php-mysqli
Note, selecting 'php8.4-mysql' instead of 'php-mysqli'
...

安装好之后回到刚才的安装界面设置管理账户的用户名和密码,接下来通过WordPress自带的迁移功能进行迁移。

WordPress无论是自己上传插件文件还是从插件市场上安装都需要配置FTP信息,奇怪,为什么我在我服务器上不用这些信息。我不太想配置FTP,所以直接在Windows把压缩包传到Debian然后解压。

当我启用导入插件并将我这个博客的导出文件传进去时,发生了413 Request Entity Too Large。我在Nginx的配置文件中加了一行放宽一下限制:client_max_body_size 100M;

这样大致就OK了。

未完待续

用VirtualBox安装虚拟机之后,使用普通用户登录发现没有sudo权限,改成root身份,后面配置就不用敲sudo了。

附录

再见面板:记zhblogs运维

· 阅读需 5 分钟
林林
在西安读大二的小菜鸡

之前沐云问我愿不愿意回到 zhblogs 参加维护,我回答如果参加的话希望可以负责一些运维有关的任务,于是在 zhblogs 新版本上线前夕,沐云问我愿不愿意部署新版本。

与沐云的聊天记录

整个任务大概是这样的:我先登上服务器把数据库备份下来,然后重装服务器系统,拉取代码,部署。过程中需要给项目整一个维护页面。

沐云vibe了一个维护页面,先是部署在我的服务器上,配置CDN那边花了一点时间,然后发现因为项目域名没有在阿里云接入备案所以被拦截了,于是沐云改用EdgeOne部署维护页面。在他用EdgeOne的时候,我收到了来自EdgeOne的邮件和短信,里面说EdgeOne支持部署Python Flask和Go的进行时了,沐云也为EdgeOne的升级感到惊喜,如果真是这样的话就连后端都不用部署在服务器上了。(ToDo++:重写一下自己的博客,并部署到EdgeOne上)

接着是登录服务器,这个费老大劲了。我先是用ssh-keygen生成密钥对,然后把公钥上传到腾讯云的密钥管理里面,绑定lighthouse,但怎么登都登不进去。后面用腾讯云生成的密钥对,绑定,也是怎么登都登不进去。沐云来远程也找不到哪里出了问题,后面只能曲线救国:用他的私钥登上去。等我登上去发现腾讯云压根没把我的公钥加到~/.ssh/authorized_keys,我手动加上去之后就可以用自己的私钥登录了。

然后找一找postgresql装在哪里,发现是用Docker装的,执行sudo docker exec postgresql-17 pg_dump -U postgres -d zhblogs > /home/zhblogs/db_backup_$(date +%Y%m%d).sql将需要备份的数据库dump出来,再通过scp命令下载到电脑本地。

大佬们好像都对服务器面板不感冒,甚至有点排斥。沐云要求我用纯命令行进行操作,这对我来说是一个机会。(ToDo++:宝塔面板把我的服务器弄得乱七八糟,重装系统自己用命令行把博客部署在一个“干净”的服务器上)

接下来是在不使用面板的情况下重装系统,并完成这些任务:

  • 用户组配置
  • docker,pg,nginx,fail2ban的安装和配置

沐云给出的用户组配置的方案是这样的:

  • 创建一个www用户组
  • 创建一个zhblogs用户,不可登录,位于www和sudo用户组
  • 创建一个linlinzzo用户,位于www用户组
  • linlinzzo用户在执行命令时可以用zhblogs的身份

于是,如果linlinzzo用户要使用root用户的权限执行命令,就需要先sudo -u zhblogs,再sudo

提权之路

关于用户组的配置,我是这么设置的(使用root用户执行):

groupadd www
useradd -r -s /usr/sbin/nologin zhblogs
usermod -aG www zhblogs
usermod -aG sudo zhblogs

useradd linlinzzo
usermod -aG www linlinzzo

visudo
linlinzzo ALL=(zhblogs) NOPASSWD: ALL
zhblogs ALL=(ALL) NOPASSWD: ALL

给这两个命令加个别名,不加的话打多了挺烦的。后面需要用root权限把sudo改成zhb-sudo就可以了。

cat >> ~/.bashrc << 'EOF'
alias zhb='sudo -u zhblogs'
alias zhb-sudo='sudo -u zhblogs sudo'
EOF

source ~/.bashrc

接着就是按照官网的安装文档安装Docker,Postgresql和Valkey我是直接用apt安装的,其中Valkey被搜索到其实软件包叫valkey-server。

短暂的半天又不知道弄了什么。

4 月 30 日,因为我的能力实在堪忧,这些任务重新由沐云来做。于是就有 再见面板:Debian构建WordPress - 林林杂语 这一篇的故事了。

附录

半学期记:春日校园

· 阅读需 1 分钟
林林
在西安读大二的小菜鸡

4月22日,期中考试结束了,半个学期就这么过去了。校园很美,翻了翻这半个学期来自己拍的照片,技术很烂,用手机记录下的照片并不清晰,有些照片我现在看过去自己都没看懂要表达什么。我将一些照片筛选出来,与各位分享。

旧事重提:大学生“AI+信息素养”大赛参赛微记

· 阅读需 5 分钟
林林
在西安读大二的小菜鸡

这个是去年的事情了,之所以现在写是因为没什么东西写了,星火杯比赛的东西写成博客了,要不把这个信息素养大赛的经历也写一下,就当是做个记录了。之所以叫“微记”,是因为前一篇小记实在长,相比之下这一篇就短太多了,此外这一篇也没有什么技术含量,小下面轮到微了。

留到现在的资料
比赛不像星火杯,没有留下什么材料。参赛视频是给组委会备查用的,不好看,文件也大。至于赛事组委会的文件,每年基本都不一样。

事情的缘起是我去年9月份到我高中学长的西工大去参观参观,在他们的图书馆看到这个信息素养大赛的海报。“要不你报一下?”我微信打开扫码,发现学校的选项竟也有西电,就把名报了上去。

后面参加初赛,自己一个人在图书馆待了两三个小时,都是通过网络来搜集信息的题目,比如“某个大学图书馆的某本书在哪个校区”“某篇论文的第几页第几段第几行第一个单词是什么”“联合国一个组织的调查报告的某个位置是什么单词”“某个检索词能在数据库中搜到多少篇专著”等等等等。有一些诸如搜索引擎搜索词的规则这类可以直接过,像国家统计数据、论文、AI工具使用就只能到对应的网站去查证了。整个初赛参加完的感受就是“死网快转啊”,时不时就要在校园网和我个人热点之间来回切换。后面得到一个分数,初赛就这样结束了。

初赛过去许久,临近省淘汰赛的时间,原本以为学校忘记这件事了,没想到一天图书馆的老师联系我跟两位学长参加淘汰赛。

与学长组队参加晋级赛
在网上见到两位学长之后,我们讨论了一下我们的队名要取什么。之前在哔哩哔哩上面刷到过一些有趣的队名,比如“啊对对队”之类的。因为我们没想到要玩什么梗,所以就老老实实地用校名。

淘汰赛分为个人对抗和团队对抗,也就是三个人各自做题和三个人一起做题。比赛之前还比较紧张,打开比赛组委会的知识库看点东西。信息素养这个东西感觉不是那种理解完材料就能突飞猛进的,看这些东西感觉像徒劳无功,赛前抱佛脚属于是。

在比赛之前提前把知网和维普打开
个人对抗赛没答几题就收卷了,现在看当时的比赛录屏感觉自己的动作好慢,为自己感到着急。有一题“在某个网站检索某个关键词得到的第一本书籍某一页的单词是什么”,这种费时间的题目当初就应该及时跳过。团队对抗赛有些题四个选项是相互独立的,这个时候队长把题目发到微信群里,我们三个一起排除答案。团队对抗赛的时间也紧,我记得当时有几道题卡着模棱两可,一看就很费时间,我们直接跳过了,毕竟这个淘汰赛会按照答题时间排名。

省淘汰赛之后就是省赛,需要我们提交一个关于AI和信息素养的案例。当时准备作品的时间和期中考试撞在一起了,我们的队长想出了一个“线性代数的秩:从检索到证据的闭环学习”案例,我们在这个案例的基础上做PPT和说明文档的美化和润色。队长不知道在哪个平台弄的,在案例介绍视频里加了一个数字人。

案例介绍视频开头
队长将材料交上去后,得了奖。我的“关于我”就多了这样一行。

所获奖项多了一行
我们省赛的微信群到现在还没有解散,两位学长非常的厉害,我星火杯的时候还向两位学长寻求经验。

附录
以下为本次大赛过程的材料。有需要的同学可自行下载,仅供个人学习参考。请勿二次传播、转载或用于任何商业/竞赛直接提交用途。
https://www.alipan.com/s/tMEHoB7vhEd 提取码:gk40
https://pan.baidu.com/s/1Te9tw4DxZKYzz3AHi1zKlQ 提取码:39qk