最近带新生做 MoeCTF,自己也跟了一份运维入门。运维知识碎,系统课里很少单独讲。
下面是本地部署 Typecho 博客的简易说明,涵盖一些基础的运维知识。
运维是什么
运维全称运行和维护:让设备、系统、网络保持可用。开发把功能做对、做快;运维把这个功能从你自己能用扩到很多人同时用:用户之间隔离、服务尽量一直在线、挂了能起来、流量挤在一起时能分担。
服务器这边主流是 GNU/Linux。Windows Server 要授权,比赛和本篇都不覆盖。移动端为了省电会杀后台,不适合当长期服务端,这里也不谈。
需要哪些知识
先会开操作系统,再叠服务。常见一块:
| 层 | 具体 |
|---|---|
| 系统 | 发行版、用户/sudo、文件权限、进程、systemd、日志 |
| 包与软件 | APT(Debian/Ubuntu)、换源、装包、看服务是否在跑 |
| 网络 | IP、端口、防火墙、DNS、hosts、HTTP/HTTPS |
| Web | Nginx/Apache 反代、静态文件、FastCGI 把 PHP 交出去 |
| 数据 | MySQL/MariaDB:建库、授权、备份 |
| 再往后 | 证书、CDN、负载均衡、监控、故障恢复 |
懂一点开发和架构有帮助,但入门不必先上完一轮后端。发行版(Ubuntu、Debian、Fedora、Arch)差在软件包版本、安装方式和维护团队,命令习惯大体相同。Debian 单一版本 ABI 稳、生命周期长,适合当第一台服务器;本篇环境已经是 WSL Ubuntu 24.04,按 Ubuntu 写。
一切皆文件,在 Linux 里经常碰到:配置、socket、systemd 的 unit 都是文本或特殊文件,用 cat、nano 就能看、能改。
博客是什么
博客(Blog,也叫部落格、网络日志)是按时间写文章的站点。稀土掘金、CSDN、博客园上的个人空间更像一份对外简历;独立博客是你自己的站点,文章、域名、主题、备份都由你管,适合当思想苗圃,写生活或写技术都行。
搭博客这件事本身就把运维里几块串起来:Linux、包管理、Web 服务、数据库、域名解析。程序可以以后再换,这条链路会留下。
常见几条路,难度递增:
- 服务器面板(宝塔、1Panel):装好面板点几下,LNMP 和博客程序一起出来。适合先看到成品。
- 手装现成程序(Typecho、WordPress):自己装 Nginx、PHP、数据库,改配置。本篇走这条。
- 静态博客(Hexo、Astro):文章编成 HTML,可以挂 GitHub Pages / Vercel,不一定买服务器和域名。
- 自己写一套:程序和运维都自己扛。
WordPress 和 Typecho 都是 PHP,LNMP 步骤几乎一样,换程序目录即可。
本次环境
WSL Ubuntu 24.04(Noble)。架构 LNMP:Linux + Nginx + MariaDB + PHP-FPM。本地域名 blog.kali。PHP 服务名 php8.3-fpm(Debian 13 常见是 php8.4-fpm,包名不要混抄)。
步骤:换源 → 更新 → PHP → 数据库 → 站点文件 → Nginx → hosts → 浏览器安装。
1. 更换 APT 软件源
Ubuntu 24.04 起,软件源是 DEB822 格式,文件在:
/etc/apt/sources.list.d/ubuntu.sources
22.04 及更早仍是 /etc/apt/sources.list。先确认版本和架构:
. /etc/os-release && echo "$VERSION_CODENAME"
dpkg --print-architecture
noble 是 24.04。amd64 用 Ubuntu 软件源;arm64 用 ubuntu-ports,URI 改成 https://mirrors.tuna.tsinghua.edu.cn/ubuntu-ports。
备份后编辑:
sudo cp /etc/apt/sources.list.d/ubuntu.sources /etc/apt/sources.list.d/ubuntu.sources.bak
sudo nano /etc/apt/sources.list.d/ubuntu.sources
nano:Ctrl+O 保存,回车确认,Ctrl+X 退出。
amd64 + Ubuntu 24.04,整文件替换为清华源(内容以 tuna Ubuntu 帮助页 选择 24.04 LTS 为准):
Types: deb
URIs: https://mirrors.tuna.tsinghua.edu.cn/ubuntu
Suites: noble noble-updates noble-backports
Components: main restricted universe multiverse
Signed-By: /usr/share/keyrings/ubuntu-archive-keyring.gpg
Types: deb
URIs: http://security.ubuntu.com/ubuntu/
Suites: noble-security
Components: main restricted universe multiverse
Signed-By: /usr/share/keyrings/ubuntu-archive-keyring.gpg
security 源保持官方地址,镜像站同步有延迟。
Debian 改的是 /etc/apt/sources.list,模板在 tuna Debian 帮助页。
2. 更新软件包
sudo apt update
sudo apt upgrade -y
update 刷新索引,upgrade 按新索引升级已装软件。
sudo:当前用户临时以 root 执行命令。生产环境一般关闭 root 直接登录。
3. 安装 PHP-FPM
sudo apt install php-fpm php-mysql php-mbstring -y
php -v
systemctl list-units --type=service 'php*-fpm*'
24.04 上服务名是 php8.3-fpm:
sudo systemctl start php8.3-fpm
sudo systemctl enable php8.3-fpm
sudo systemctl status php8.3-fpm
确认 socket:
ls -l /run/php
常见结果:
php-fpm.sock -> /etc/alternatives/php-fpm.sock
php8.3-fpm.sock
php8.3-fpm.pid
php-fpm.sock 是指向当前版本 socket 的软链。Nginx 里写这个路径,PHP 小版本升级后不用改站点配置。
php8.3-fpm.service 没有扩展名,一样是文本。查看 unit:
systemctl cat php8.3-fpm
4. 安装 MariaDB 并建库
sudo apt install mariadb-server -y
sudo systemctl start mariadb
sudo systemctl enable mariadb
sudo mariadb
进入 MariaDB 后执行(每句以分号结尾):
CREATE USER 'moectf'@'localhost' IDENTIFIED BY 'xdsec';
CREATE DATABASE blog;
GRANT ALL PRIVILEGES ON blog.* TO 'moectf'@'localhost';
FLUSH PRIVILEGES;
EXIT; 离开。这是本地实验账号。命令写成 mysql 也可以,MariaDB 提供兼容入口。
浏览器安装 Typecho 时填:
| 项 | 值 |
|---|---|
| 数据库地址 | localhost |
| 数据库端口 | 默认 |
| 数据库用户 | moectf |
| 数据库密码 | xdsec |
| 数据库名 | blog |
| 表前缀 | 默认 |
5. 下载 Typecho
sudo apt install wget unzip -y
sudo mkdir -p /var/www/html
cd /var/www/html
sudo wget https://github.com/typecho/typecho/releases/latest/download/typecho.zip
sudo unzip typecho.zip
sudo rm typecho.zip
ls
sudo chown -R www-data:www-data /var/www/html
解压后应有 admin、index.php、install.php、usr、var。PHP-FPM 以 www-data 跑,属主不对则安装程序无法写配置。
不要对系统目录乱 chmod。sudo chmod 750 /usr 会让普通用户无法执行系统命令。
6. 配置 Nginx
sudo apt install nginx -y
sudo systemctl start nginx
sudo systemctl enable nginx
Ubuntu 默认启用 sites-enabled/default,监听 80 且为 default_server,根目录也是 /var/www/html,首页是欢迎页,PHP 未启用。自己的站点要单独写一份配置,并关掉默认站点。
sudo nano /etc/nginx/sites-available/blog
写入:
server {
listen 80;
server_name blog.kali;
root /var/www/html;
index index.php;
location / {
try_files $uri $uri/ /index.php$is_args$args;
}
location ~ \.php$ {
include fastcgi.conf;
fastcgi_pass unix:/run/php/php-fpm.sock;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
}
含义:
listen 80:HTTP 默认端口server_name blog.kali:只处理 Host 为这个名字的请求root/index:站点目录和默认首页try_files:文件不存在时交给index.php(Typecho 伪静态)fastcgi_pass:PHP 交给 FPM 的 unix socket
启用站点、关掉默认站点、检查后重载:
sudo ln -sf /etc/nginx/sites-available/blog /etc/nginx/sites-enabled/blog
sudo rm -f /etc/nginx/sites-enabled/default
sudo nginx -t
sudo systemctl reload nginx
nginx -t 必须报 syntax is ok 和 test is successful 再 reload。
7. 配置 hosts
本机用 hosts 把 blog.kali 指到 WSL。不买域名。
Windows(管理员编辑):
C:\Windows\System32\drivers\etc\hosts
加一行:
127.0.0.1 blog.kali
WSL 里 Windows 的 80 会转到 Ubuntu 的 Nginx,用 127.0.0.1 即可。
也可以在 WSL 里 ip addr 看 eth0 的地址,把该 IP 写进 Windows hosts。WSL 重启后这个地址常会变,要跟着改。
WSL 自己的 /etc/hosts 由 WSL 生成。若要长期手写,在 /etc/wsl.conf 里关 generateHosts,否则重启可能被覆盖。只在 Windows 浏览器访问时,改 Windows hosts 就够。
8. 浏览器安装 Typecho
地址栏带协议:
http://blog.kali/
应跳到安装页。环境检查通过后,数据库按第 4 步表格填写,再设管理员账号。
只输入 blog.kali、不写 http://,浏览器可能当搜索词,不会走 hosts。
WordPress 同样是 PHP,LNMP 步骤相同,换程序目录和 Nginx 的 root 即可。
9. 公网访问(可选)
hosts 只对改过文件的这台电脑有效。要给别人访问:租带公网 IP 的服务器,注册域名,在 DNS 加 A 记录指向该 IP;或用内网穿透。证书和 HTTPS、CDN 是后续步骤。
面板(宝塔、1Panel)能点选安装 LNMP。自己走完上面路径之后,再看面板改的是哪些文件。
Hexo、Astro 这类静态博客不需要 PHP 和数据库。
操作视频(指北配套):BV1U9NX6yEsX。部署步骤依据 Reverier Xu、linlinzzo 的运维入门指北,环境改为 WSL Ubuntu 24.04。
结尾


就这里的编辑外观这里,就可以出成 web 题目
公网上去扫这个博客然后批量测试弱口令,利用这里的写文件进行命令执行。