前情提要
我最近给我那1核2G的云服务器扩到了3M带宽。
但在此之前,它其实过得挺惨的。没过几天就在日志里发现一个海外IP扫了我几百次,查了一下威胁等级10/10。那一刻我突然意识到:我的服务器正在被全世界的扫描器当靶子打。
于是我开始给它加固:配置防火墙,配置黑名单,搞监控随时看资源——这些故事以后可以单独写一篇。总之,等它"强壮"起来后,我开始想:能不能用这台小服务器干点正事?
比如,存点照片之类的。
为什么不用某度网盘
理由很简单:
- byd的不冲会员给我跑不到1mbps的下载速度
- 还要提防我珍贵的照片哪一天被删掉了
- 不想每次都登陆
- 软件太臃肿
- ………还有更多
怎么选 选什么自托管相册
网上搜了一圈自托管相册,选项还挺多:
| 软件 | 资源要求 |
|---|---|
| Immich | 内存建议4G+ |
| PhotoPrism | 内存建议2G+ |
| Piwigo | 最低1G内存 |
| Kopia | 极低,无Web界面 |
考虑到我服务器只有2G内存,还要跑博客和监控,piwigo无疑是最好选择 什么? 你问我为什么不选Kopia?
我记不住命令
搭建过程(踩坑实录)
- 装环境
我服务器是debian系统,先装一个LNMP全家桶:
sudo apt update
sudo apt install nginx mariadb-server php-fpm php-mysql php-gd php-mbstring php-xml php-zip php-curl -y
MariaDB装好后,进去创建数据库和用户:
CREATE DATABASE piwigo_db;
CREATE USER 'piwigo_user'@'localhost' IDENTIFIED BY '你的密码';
GRANT ALL PRIVILEGES ON piwigo_db.* TO 'piwigo_user'@'localhost';
FLUSH PRIVILEGES;
EXIT;
- 下载Piwigo(第一个坑)
去官网下载最新版,结果用wget直接下载一直404。后来发现中文站的链接可能失效,老老实实去英文站下,然后英文站链接也失效,我只能自己下到本地再传回服务器
# 本地下载后上传
scp 你下载的文件名 user@你的服务器IP:/var/www/
cd /var/www
sudo unzip piwigo-14.5.0.zip
sudo mv piwigo photos
sudo chown -R www-data:www-data /var/www/photos
- 配置Nginx
创建站点配置文件/etc/nginx/sites-available/photos:
server {
listen 80;
server_name photos.your-domain.com;
root /var/www/photos;
index index.php index.html;
location / {
try_files $uri $uri/ =404;
}
location ~ \.php$ {
include snippets/fastcgi-php.conf;
fastcgi_pass unix:/var/run/php/php8.2-fpm.sock; #看你自己php是第几个版本,这里我以8.2举例子
}
}
然后启用配置:
sudo ln -s /etc/nginx/sites-available/photos /etc/nginx/sites-enabled/
sudo nginx -t && sudo systemctl reload nginx
- 访问安装界面
浏览器打开 http://photos.your-domain.com,结果给我502 Bad Gateway(记得在域名dns解析里添加A记录photos)
先查Nginx错误日志:
sudo tail -f /var/log/nginx/error.log
发现是connect() to unix:/var/run/php/php-fpm.sock failed。检查PHP-FPM状态:
sudo systemctl status php8.2-fpm
居然没启动!赶紧sudo systemctl start php8.2-fpm。再试,还是502?
后来发现fastcgi_pass路径写错了,应该是/var/run/php/php8.2-fpm.sock(之前少写了版本号)。改完重启,终于不502了。
- CDN的SSL坑
本地访问没问题,但通过域名就是打不开。查了一圈,原来是CDN的SSL/TLS模式设成了"完全(严格)",但我的Nginx只监听80端口,没有配SSL。于是把模式改成灵活,让CDN到源站走HTTP,用户到CDN走HTTPS。瞬间好了。(CDN你肯定知道是谁家的)
- 最蠢的来了
访问我的域名,还是不行?排除了一小时,最后dig一下,发现子域名根本没解析——我在CDN控制台里把记录名写成了photo而不是photos。改回来,秒开。
配置
按你自己之前mysql的配置填进去
安全加固
这一段是机密 不给你看
上传图片
用rsync传服务器目录,再进后台同步:
rsync -avP -e "ssh -i 你的ssh私钥" ./ user@服务器IP:~/待上传/ #这年头真的还用密码登么....
同步直接进Piwigo后台 → 工具 → 同步 点快速同步就行。
总结
不要碰服务器 会让你变得不幸
最后建议
- 域名和SSL早配置
- 照片记得压缩