唠唠闲话

算起来博客建站将近两年了,主站第一篇已经是 2021 年 7 月 19 日,时间真快。。。

20230716002555

写这篇教程的原因很简单,最近准备将写作迁移到 WordPress,适应新博客后,这边可能就不怎么更新了。在教程开始前,不妨唠嗑一会。尽管博客开篇都是“唠唠闲话”,但事实上我很少真的唠嗑,都是直性子直入主题,把博客当笔记来用,懒得写思考和铺垫。

点这里跳到教程正文

缘起

为什么写博客?说来话长,最开始了解到博客这个概念是在高中,偶然翻到 Matrix67 的网站,网站很多有趣的数学文章。那时对博客没什么认识,只是也喜欢思考数学,上大学后尝试用投稿推送的方式分享感兴趣的课外探究。

写博客产生兴趣是在研二寒假,也就是 21 年初。我正通过“苹果”的 B 站教程自学 Mathematica。这门语言很神奇,苹果的视频风格也很有趣,在视频中苹果特别安利了一个博客,kylen-比特之理。比特之理的这篇《我为什么喜欢 Mathematica》我每次看了都忍不住笑。很随性的聊天风格,就好像 Kylen 本人在跟你调侃似的。

20230716003018

翻看这些博客,有一种碰见志同道合朋友的感觉,也希望自己能成为这类“有趣”的人。

顺便摘录在 CSDN 上看到一段话

这个嘛,我是一开始写博客就是为了让别人看,上边也说了,后来发现还挺有意思。看一下周围大学毕业了有很多人都不知道自己有了什么,留下了什么,会些什么。再看一下发现我的四年还有一个博客,至少发现自己也学习过,而且看着自己的排名和浏览量也有继续学习和写博客的动力了。就这么单纯

兴趣起落

大学接触 C 语言后,编程 + 数学一直是我最热衷探索的形式。但随着编程的学习深入,不可避免要接触繁杂的计算机知识,而写博客正是梳理这类知识的绝佳实践。

研二摸索了 Netlify 搭建博客,通过网站(2021-06)分享讨论班讲义。也第一次发现,拥有个人网站是一件很酷但非常简单的事情(尽管第一次捣鼓免不了折腾)。

20230716003832

暑假跟着程序羊的教程在 GitHub 搭建个人博客,给电脑装了双系统,后来又买了域名和服务器,算正式入坑了。

2021 年刚开始写博客,对什么都充满热情,充满兴趣,想学啥就新建个页面,边学边写。Git,GitHub,服务器,形式证明,量子计算,代数编程,Julia,Python。。。目前一半的博客都是 2021 下半年写。

2022 年转到计算机后,反而过得倍加迷茫,一个间接的表现是博客也不怎么更新了。

重启博客

现在,2023 下半年,人工智能大爆发的一年,特别对自然语言处理(NLP)领域。很荣幸来到这个领域,通常来说,我应该很兴奋才对。但过去一年的起起伏伏,各种焦虑压抑,不断消耗着时间和心态。。。

前边提到,Matrix67 和比特之理是我很喜欢的两个博客网站。转计算机系后也接触了些很有趣的博客,比如苏剑林的科学空间。他是中山大学数学系的大佬,轻松玩转统计,物理,人工智能。。。跟我完全不是一个层级的人。

20230716004118

还有一个非常漂亮的博客,也是我启动新博客的直接动力。苯苯的 Bensz’s blog,一个生物医学的博主,刚发现他也是广东的!!网站很多技术干货,干货之外,也有不少闲聊唠嗑的内容,比如 关于我你需要个人博客吗?

博客颜值很高,技术宅的梦中情站

(=・ω・=)

20230715211028

两年前刚摸索建站的那种热情一股脑地上来了,一次难得的振奋。

未来定位

老实说,我不清楚未来自己会做什么,在学校的这几年该做什么。比起忙着焦虑,不如从这些能让自己兴奋的事情开始做起。 内容方面,这些博客是很好的参考。苯苯的【文献精读】系列,整理兴趣领域最新的研究综述;或者像苏剑林的这种随笔。。。算了,短期做不到这水准。但苯苯第一期 生物快讯 就写得很简陋,干就完事!

当然,这只是计划的一部分,还有很多想尝试的。

(`・ω・´)

闲话就唠嗑到这里,下边开始正文吧!


WordPress

教程参考了苯苯的 WordPress系列 搭建 WordPress 个人博客。安装遇到任何问题,欢迎在文章底部留言评论~

环境配置

服务器的环境如下

1
2
3
4
5
6
uname -a
# Linux tianyi 5.4.0-70-generic #78-Ubuntu SMP Fri Mar 19 13:29:52 UTC 2021 x86_64 x86_64 x86_64 GNU/Linux
docker --version
# Docker version 24.0.2, build cb74dfc
docker-compose --version
# docker-compose version 1.28.5, build c4eb3a1f

通过下边命令安装 docker 和 docker-compose

1
2
3
4
5
6
7
8
# 安装 Docker
sudo apt install docker
# 安装 docker-compose
## 根据操作系统下载 1.28.5 版本
# curl -L https://github.com/docker/compose/releases/download/1.28.5/docker-compose-`uname -s`-`uname -m` -o /usr/bin/docker-compose
curl -L https://github.com/docker/compose/releases/download/1.28.5/docker-compose-Linux-x86_64 -o /usr/bin/docker-compose
## 赋予可执行权限
chmod +x /usr/bin/docker-compose

特别留意 docker compose 的版本,用 apt 直接安装的是 1.25.x,比 GitHub 发行版要低,和接下来的配置文件不兼容。

编写配置文件

为保持工作环境干净,新建 workpress 工作区目录,后续操作都在该目录下进行,方便管理和迁移。

1
2
3
mkdir -p ~/docker
mkdir -p ~/docker/wordpress
cd ~/docker/wordpress

编写配置文件 docker-compose.yml.env,前置为容器配置,后者用于编辑关键变量。

编写 .env 文件,定义数据库的账号和密码:

1
2
3
MYSQL_ROOT_PASSWORD=123456
MYSQL_USER=wordpress
MYSQL_PASSWORD=123456

再编写 docker-compose.yml 文件:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
version: '3.0'

services:
db:
image: mysql:8.0 # arm 架构的机器请将 mysql:8.0 改为 mysql:oracle
container_name: wordpress-db
restart: unless-stopped
command: --max-binlog-size=200M --expire-logs-days=2 # 使用mysql 8.0的小伙伴建议使用
environment:
MYSQL_ROOT_PASSWORD: ${MYSQL_ROOT_PASSWORD}
MYSQL_DATABASE: wordpress
MYSQL_USER: ${MYSQL_USER}
MYSQL_PASSWORD: ${MYSQL_PASSWORD}
volumes:
- './db:/var/lib/mysql'
networks:
- default
env_file:
- .env

app:
image: wordpress:latest
container_name: wordpress-app
restart: unless-stopped
ports:
- 4145:80 # 按需修改
environment:
WORDPRESS_DB_HOST: db
WORDPRESS_DB_NAME: wordpress
WORDPRESS_DB_USER: ${MYSQL_USER}
WORDPRESS_DB_PASSWORD: ${MYSQL_PASSWORD}
volumes:
- './app:/var/www/html'
links:
- db:db
depends_on:
- redis
- db
networks:
- default
env_file:
- .env

redis:
image: redis:alpine
container_name: wordpress-redis
restart: unless-stopped
volumes:
- ./redis-data:/data
networks:
- default

networks:
default:
name: wordpress

内容说明:

  • 三个服务:dbappredis,分别对应数据库、WordPress、缓存
  • 容器设置中,container_name 为容器名称,volumes 为主机到容器的目录映射,env_file 指定环境变量
  • app 容器中,ports 为端口映射,也就是站点的访问端口

这里可以指定网络 IP,比如

1
2
3
4
5
6
7
8
9
10
11
12
13
services:
wordpress-app:
image: wordpress
networks:
default:
ipv4_address: 192.168.16.4

networks:
default:
name: wordpress
ipam:
config:
- subnet: 192.168.16.0/20

启动容器

开启服务:

1
docker-compose up -d

该命令会根据 docker-compose.yml 文件创建容器,并在后台启动。当前目录下会创建 dbappredis-data 三个文件夹,用于存放容器数据。

此时访问 http://ip:4145,即可看到 WordPress 的安装界面。(ip 为服务器 ip 地址)

20230715220437

配置 Nginx

下边介绍 Nginx 文件的配置。

注:苯苯教程用的是 NPM(Nginx Proxy Manager),支持可视化且能监控流量。个人对 NPM 的使用不熟,特别对于 proxy_set_header 之类参数的配置,或许以后可以尝试一下。

这一步我们需要一个域名,并解析到当前服务器,以 wordpress.wzhecnu.cn 为例(真实网址不是这个;):

先编写用于 http 访问的 Nginx 配置:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
server {
listen 80;
server_name wordpress.wzhecnu.cn;

location / {
proxy_pass http://172.17.0.1:4145;
proxy_ssl_server_name on;
proxy_set_header Connection '';
proxy_http_version 1.1;
chunked_transfer_encoding off;
proxy_buffering off;
proxy_cache off;
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $remote_addr;
proxy_set_header X-Forwarded-Proto $scheme;
}
}

有几个参数需要重点说明(对 Nginx 有兴趣可以了解):

  • proxy_pass:反向代理的地址,这里 172.17.0.1 是 Docker 容器的网关地址。在 Docker 默认的网络模式中,容器会分配从 172.17.0.2 开始的 IP 地址,并将 172.17.0.1 分配给网关。这个网关用于连接容器网络和宿主机网络,以及不同容器之间的通信。

  • proxy_set_header:设置请求头,这一个参数非常重要,因为 wordpress 对访问有严格控制,不设置 proxy_set_header Host $host 仍可以访问服务后台,但不能正常访问 WordPress 站点。

proxy_set_header 参数介绍

  • Host,默认为上游服务器的 IP 地址,也就是 172.17.0.1,这里设置为 $host,客户端访问的 Host,也就是 wordpress.wzhecnu.cn
  • X-Forwarded-For,默认是代理服务器的 IP,这里用 $remote_addr 设置为客户端的 IP
  • X-Forwarded-Proto 设置协议,httphttps

安全起见,我们一般会用 https 访问,并强制重定向,完整配置如下

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
server {
listen 80; # http 重定向
server_name wordpress.wzhecnu.cn;
return 301 https://$server_name$request_uri;
}
server {
listen 443 ssl;
server_name wordpress.wzhecnu.cn;
ssl_certificate cert/wordpress.wzhecnu.cn.pem;
ssl_certificate_key cert/wordpress.wzhecnu.cn.key;
ssl_session_cache shared:le_nginx_SSL:1m;
ssl_session_timeout 1440m;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2 TLSv1.3;
ssl_prefer_server_ciphers on;
ssl_ciphers TLS13-AES-256-GCM-SHA384:TLS13-CHACHA20-POLY1305-SHA256:TLS13-AES-128-GCM-SHA256:TLS13-AES-128-CCM-8-SHA256:TLS13-AES-128-CCM-SHA256:EECDH+CHACHA20:EECDH+CHACHA20-draft:EECDH+ECDSA+AES128:EECDH+aRSA+AES128:RSA+AES128:EECDH+ECDSA+AES256:EECDH+aRSA+AES256:RSA+AES256:EECDH+ECDSA+3DES:EECDH+aRSA+3DES:RSA+3DES:!MD5;
location / {
proxy_pass http://172.17.0.1:4145;
proxy_ssl_server_name on;
proxy_set_header Connection '';
proxy_set_header Host $host;
proxy_http_version 1.1;
proxy_set_header X-Forwarded-For $remote_addr;
proxy_set_header X-Forwarded-Proto $scheme;
}
}

使用 https 需要申请域名证书,并将证书移动到 /etc/nginx/cert 目录下。

配置编写完成后,重启 Nginx

1
sudo nginx -s reload

设置访问域名

到这一步,访问 wordpress 可能需要带上端口号,比如 https://wordpress.wzhecnu.cn:4145/wp-admin。为此,我们需要在 WordPress 中修改访问地址,如下图。

20230715224157

不出意外,执行到这一步就大功告成了!


以上,配置遇到其他问题,欢迎在评论区留言。