说起第一次自己动手搞一个全站导航,我还记得那天凌晨三点,咖啡已经凉到可以直接倒进嘴里,却还是硬着头皮打开了 GitHub,刷到一个看起来“炫酷又实用”的导航模板。装好环境、改完数据库,一键部署成功的感觉,简直比拿到免排队的演唱会门票还爽。
环境准备
- 操作系统:Ubuntu 22.04(我用的 WSL2,装了个小小的 Linux 环境,省事儿)
- 必装软件:Git、PHP 8.1、Composer、MySQL 8.0、Nginx
- 小技巧:先把防火墙的 80、443 端口打开,省得后面调 Nginx 报错。
我把所有依赖一次性写进了
docker-compose.yml,只要docker compose up -d,整个栈就跑起来了,真是省心。
拉取源码
git clone https://github.com/example/nav-site.git
cd nav-site
composer install --no-dev
克隆下来后,我把 .env.example 复制成 .env,顺手把里面的 APP_ENV=production 改成了 APP_ENV=local,这样报错信息会直接显示在浏览器,调试起来更直观。
配置数据库
打开 admin/config/database.php,把下面几行改成自己的信息:
<?php
return [
'host' => '127.0.0.1',
'port' => '3306',
'database' => 'nav_db',
'username' => 'nav_user',
'password' => 'P@ssw0rd!',
];
接着在 MySQL 里手动建库建表,导入 install.sql,只用了两分钟。之前我总是忘记把字符集设成 utf8mb4,导致表情图标全是乱码,这回记得提前写好脚本,一键搞定。
部署上线
Nginx 配置里,我把根目录指向 public/,并加上了常见的重写规则:
server {
listen 80;
server_name nav.example.com;
root /var/www/nav-site/public;
location / {
try_files $uri $uri/ /index.php?$query_string;
}
location ~ .php$ {
include fastcgi_params;
fastcgi_pass unix:/run/php/php8.1-fpm.sock;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
}
}
保存后 nginx -s reload,页面立马弹出来。登录后台 /admin,默认账号 admin,密码 123456,我立马改成了强密码,还顺手把两步验证打开,安全感瞬间提升。
小技巧与坑点
- 图片 CDN:导航站里图标很多,直接放在本地会让页面加载慢。我把
assets/目录同步到 Cloudflare R2,配合Cache-Control: max-age=31536000,打开 DevTools 看,加载时间从原来的 1.8 s 降到不到 0.7 s。 - HTTPS:别小看 Let's Encrypt 的自动续期脚本,跑一次
certbot renew --dry-run,确保不会在凌晨被证书炸掉。 - 后台权限:别把后台直接暴露在根域名下,最好加个子域名或者 IP 白名单,免得被爬虫暴力尝试登录。
部署完毕后,我把自己的导航链接发到 Telegram 群,大家刷完页面的那一瞬间,纷纷点赞——那种被夸“太好用了”的成就感,真的让人想把这套流程写成系列教程。
如果你也想在几杯咖啡的时间里搞定一个自己的导航站,按上面走一遍,基本上不会踩太多坑。等你站上线后,记得把「下载APP」按钮的链接改成自己的真实地址,否则用户点进去只会看到 404,真是尴尬到不行。
就这样,代码跑通,页面闪现,心里暗暗想:下次再玩点儿别的模板,看看还能掏出多少惊喜。


评论(0)