前言
兜兜转转还是使用了chevereto个人图床,因为觉得图片放在自己手上最安全。考虑到第二年服务器费用暴涨,专门研究了一下一台服务器配置2台web网站的方法来省钱;同时,这也是我从apache转战nginx的引子,因为使用apache没配明白双网站(原因卡在端口上,是腾讯云服务器的对应端口没开);而转战nginx的原因是资料比较多,查阅资料后被卡的问题成功解决,所以本教程是基于nginx配置的第二个web网站。
转战nginx也艰难的搞了一天,归根结底是网上的资料都落后了,很多问题都没解决方法。我查阅资料历尽千辛万苦解决了如下四个问题:安装包、配置端口、浏览器http访问失败、markdown不识别http的url。解决这四个问题后,后面一路坦途轻松配置完成。
运行环境
ubuntu-22.04
nginx-1.18.0
php 8.1
安装软件
这里一半的时间都浪费在找包上。找的所有包都失效不能用,最后在论坛找到了兼容php8.1-fpm版本的安装包,放到gitee上了,需要的自取。
将下载的zip包解压到/var/www/html下并赋予权限
mkdir chevereto
mv cheveretoChinaV4.zip chevereto
unzip cheveretoChinaV4.zip //解压
cd ../
sudo mv chevereto /var/www/html/ //挪到nginx读取目录下
赋予权限
sudo chown -R www-data:www-data /var/www/html/chevereto
sudo chmod -R 755 /var/www/html/chevereto
配置数据库
创建chevereto的mysql数据库及用户,若需要创建root用户,可以参考这篇博文配置数据库的章节。
CREATE DATABASE chevereto;
CREATE USER 'cheveretouser'@'localhost' IDENTIFIED BY 'password';
GRANT ALL PRIVILEGES ON chevereto.* TO 'cheveretouser'@'localhost';
FLUSH PRIVILEGES;
#退出mysql数据库终端
EXIT;
配置网络
基于nginx搭建2个web网站有多种实现方法。比如使用双域名加80/443端口在nginx配置中解析转发,实现访问双网站的方式。这种方式要俩域名肯定不适合我,直接淘汰。我使用的是域名+额外端口号的方式访问第二个web网站。因为是个人图床不给其他人用,加端口后一般人也找不到我的第二个网站,我感觉我这个方法更安全。
1.配置nginx-开启端口
以8080端口为例,开启自己想要的端口。在nginx中添加自己的8080端口配置,具体配置参数有疑问的可以看我这篇博文配置网络的章节。
server {
listen 8080 ssl;
server_name www.域名.com 域名.com;
index index.php index.html index.htm default.php default.htm default.html;
root /var/www/html/chevereto;
ssl_certificate /etc/ssl/xxx.pem;
ssl_certificate_key /etc/ssl/xxxx.key;
ssl_protocols TLSv1.1 TLSv1.2 TLSv1.3;
ssl_ciphers 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;
ssl_prefer_server_ciphers on;
ssl_session_cache shared:SSL:10m;
ssl_session_timeout 10m;
client_max_body_size 128M; # 设置请求体大小限制为100MB
gzip on;# 启用 gzip 压缩
gzip_comp_level 5; # 压缩级别(1-9,级别越高,压缩率越高,但消耗 CPU 资源越多
gzip_types text/plain text/css application/json application/javascript text/xml application/xml application/xml+rss text/javascript;# 禁止压缩响应中包含 Vary 头的响应
gzip_min_length 256;# 配置不压缩的文件大小(小于该值的文件不进行压缩)
gzip_proxied any;# 禁止压缩响应中包含 Vary 头的响应
gzip_disable "MSIE [1-6]\.";# 禁用压缩的用户代理(在此列出的用户代理不会被压
gzip_buffers 16 8k;# 启用压缩的缓冲区大小
gzip_http_version 1.1;# 启用压缩的压缩级别
gzip_static on;# 启用压缩的缓存时间
location / { //配置静态IP。没有登陆不进去后台
try_files $uri $uri/ /index.php?$query_string;
}
location ~* \.(png|jpg|gif)$ {
valid_referers yanwenkai.com www.yanwenkai.com;
if ($invalid_referer) {
return 403;
}
}
location ~ \.php$ {
include snippets/fastcgi-php.conf;
fastcgi_pass unix:/run/php/php8.1-fpm.sock;
}
location ~ /\.ht {
deny all;
}
}
2.开启服务器的端口
sudo ufw allow 8080 //开启8080端口
sudo ufw status //查看端口的状态
sudo netstat -tuln //查看网络情况
输出如下:
To Action From
-- ------ ----
8080 ALLOW Anywhere
80/tcp ALLOW Anywhere
443/tcp ALLOW Anywhere
8080/tcp ALLOW Anywhere
8080 (v6) ALLOW Anywhere (v6)
80/tcp (v6) ALLOW Anywhere (v6)
443/tcp (v6) ALLOW Anywhere (v6)
8080/tcp (v6) ALLOW Anywhere (v6)
3.开启腾讯云的端口
此时上面的输出表明服务器端口已开启。试了一下但外网还是不通,访问不通的原因是端口需要进一步设置。使用家庭网络需要配置路由器进行端口转发,使用腾讯云服务器需要用户开启8080端口。我没路由器所以相关教程自己查吧,下面是腾讯云服务器的配置方法。
在防火墙页面点击添加规则。
依照下图填入8080端口点击确定即可开启端口。
使用这个测试端口是否能联通外网
sudo traceroute -n -T -p 8080 自己的IP
出现这个表明联通成功
traceroute to 82.156.142.153 (自己的IP), 30 hops max, 60 byte packets
1 xx.xx.xxx.xxx 4.862 ms 4.465 ms 4.621 ms
2 自己的IP 1.998 ms 2.019 ms 2.011 ms
网络畅通后,在浏览器输入https://域名:8080/index.php进入登陆页面。
注意:网上的教程都落后了,每个教程都说使用installer.php进入安装界面,但我找了n个版本都不行,有个官方正式版本installer.php安装脚本是能用,但40刀劝退了。后面发现原来是不知道从哪个版本开始直接使用index.php进入登陆页面了(我这个是免费版),浪费了我半天时间。
另外这个对php版本依赖很严重,我这个版本得chevereto只对应8.1*得php,高于或低于这个版本可能安装都会出现未知问题。可能会"Something went wrong"得报错!
配置chevereto
使用刚刚在数据库中创建的用户登陆进入后台,只需要把上传限制改大,禁止用户注册即可。
1.进入登陆界面
2.配置chevereto上传图片大小限制
3.配置用户注册
因为图库设为开放,所以把用户注册设为禁止,防止外人进入图床删除图片。
配置picgo
1.下载插件
2.获取chevereto的api
3.配置chevereto的插件
将api填充到key中,将url设置为“https://自己的域名:自己的端口/api/1/upload”。这里只改域名,目录就是upload。
4.将chevereto的网站模式设置为社区模式。否则picgo图片传不上去。
5.整体配置完成后图库如下
问题总结
1.服务器端口配置完外网不能访问
配置端口后,ip+端口的模式访问不了外网,查了半天原因,根据蛛丝马迹,想到家庭网络配置时是配置路由器转发实现外网访问的。由此联想到云服务器也要专门把对应的端口打开才行。果然一开就通了。
2.安装chevereto不成功
按照网上的教程使用installer.php安装chevereto一直失败,换了好多包都不成功,差点以为chevereto不支持php8以上版本了,后来试了一下正版的installer.php能用才放下心继续找;翻遍论坛终于找到一个好心人发的高版本的免费版,支持php高版本的问题解决了。但installer.php还是访问失败,就试了一下包里的其他php网页,误打误撞进入了登陆界面才解决安装失败的问题。
3.wordpress不识别http的url
一开始偷懒没配ssl证书,结果有道云和typora都能用的url,wordpress的markdown就是不能解析,咋查都没问题。查半天最后自己想明白了,估计是wordpress的markdow插件不能解析http协议下的url,只能解析https的图片url。配置nginx对应端口的server,添加ssl证书更新url后,瞬间能解析了。
感觉chevereto和picgo的配合还有些小问题,首先不能分类,其次即使chevereto修改了上传大小限制,但超过2M的图片只能通过chevereto后台上传,picgo不能上传。这些我没细究,因为图片整理工作我都在本地做了,只是借用picgo+chevereto做url。
4.chevereto后台看不到通过picgo传输的图片
最近发现后台看不到picgo传输的图片;因为图片是通过接口传输而不是后台传输的,所以图片信息没存到数据库中,导致后台看不到图片信息。