从零开始搭建一个下载站,这几步搞定服务器和网站
选服务器和系统,别贪便宜也别盲目追新
我第一次搭下载站的时候,踩了个大坑——图便宜买了个1核1G的轻量云服务器,装好飞书下载站程序后,一旦同时有几个人下载,CPU直接飙到100%,网站打不开,下载链接也点不了。所以第一步,服务器配置要算清楚。我个人建议,如果你的下载站主要放小文件(比如几MB到几十MB的软件安装包),2核4G的云服务器就够用,带宽至少5Mbps。如果文件大或者访问量高,比如每个包100MB以上,那就得上4核8G、带宽10Mbps起步。
操作系统这块,别盲目追最新版。我试过Ubuntu 24.04,结果有些老版本的PHP扩展不支持,折腾一下午。现在稳定用的是CentOS 7或者Ubuntu 20.04,这两个系统对建站环境兼容性好,网上教程也多,遇到问题容易找到答案。选系统时记得避开那些只支持32位的版本,现在64位是主流,内存管理也更好。
买服务器的时候还有个细节——注意有没有“数据盘”。很多便宜套餐只给系统盘,空间小,你放几个大软件包就满了。我后来多买了块20G的数据盘挂载到网站目录下,专门存下载文件,系统盘只跑数据库和程序,稳得很。
装好LNMP环境,数据库和PHP版本要配对
有了服务器,接下来就是搭建LNMP(Linux + Nginx + MySQL + PHP)。别手动一个个装,太容易漏依赖。我推荐用OneInstack或者LNMP.org的自动安装包,直接一条命令跑完。第一次我用源码编译PHP,搞了三个小时还报错,换成脚本后半小时搞定。
特别提醒注意PHP版本。飞书下载站这类程序,对PHP要求不高,7.2到8.1都行,但别用8.2以上的,我试过8.3,部分插件直接500错误。MySQL选5.7或者8.0都可以,8.0性能好点,但记得安装时选“默认字符集utf8mb4”,不然中文文件名会乱码。Nginx版本用最新的稳定版就行,它不影响程序兼容性。
安装过程中有个容易忽略的——设置swap分区。如果你的服务器内存只有2G,跑PHP-FPM加MySQL很容易满,系统会卡。我习惯在安装前分2G的swap,命令就一行,dd if=/dev/zero of=/swapfile bs=1M count=2048,然后激活。这招帮我扛住过一次同时50人下载的测试。
配置网站,绑定域名和优化下载速度
装好环境,就该创建网站了。先给域名解析到服务器IP,然后在Nginx里新建一个虚拟主机配置文件。我犯过一个低级错误:直接写了个server块监听了80端口,但没写server_name,结果所有域名都指向这个站,别人打开我的站显示404。正确的做法是server_name后填你的具体域名,比如 down.yourdomain.com。
然后要重点优化nginx.conf里面关于下载的部分。比如添加这几行:sendfile on; tcp_nopush on; 以及设置超时时间keepalive_timeout 65。这些参数默认值很保守,不改的话,大文件下载容易中途断。我还加了个限速,limit_rate 500k,这样单个连接最多500KB/s,防止某个大文件下载把带宽占死,其他人就访问不了。
另一个关键点是开启gzip。虽然下载文件本身不会压缩(不然损坏),但网页、列表页、说明文字这些一定要压缩。在nginx配置里加上gzip on; gzip_types text/plain text/css application/json; 能让页面加载快很多。我第一次设置时忘了加,朋友说打开我的站要等3秒,加上后变0.8秒。
安装飞书下载站,解压和文件夹权限是雷区
网站环境搭好,就可以上传飞书下载站的程序包了。我从官方下载的zip包,直接解压到网站根目录。但这里有个坑——解压后一定要检查文件夹权限。飞书下载站需要几个目录可写,包括“upload”“cache”“config”,如果不改权限,后台添加下载时会提示“无法创建目录”。
我一般把网站目录所有者改成www用户,然后给755权限。命令就两行:chown -R www:www /data/wwwroot/你的域名; chmod -R 755 /data/wwwroot/你的域名。注意如果是CentOS,www用户可能本来不存在,得先useradd www创建。
然后是安装向导。访问你的域名,进入web安装界面,填数据库信息。这里要注意数据库名和用户别用默认的“root”,风险太大。我习惯新建一个数据库用户,只给这个库的所有权限,比如“downuser”,密码搞复杂点,比如大小写加特殊符号。向导还会让你填管理员账号,这个别用admin,换个冷门点的比如webmaster,防扫描。
安装过程中让我选“下载方式”,我选了“直接链接”而不是“临时链接”。临时链接会生成带时间戳的地址,看着安全但实际容易失效,用户复制给别人就下载不了了。直接链接简单粗暴,适合小站。
添加下载内容和管理后台,分类和描述别偷懒
装好后台,登录进去第一件事就是建分类。飞书下载站默认有个“常用软件”分类,但我发现它不支持中文路径,如果分类名是中文,生成的目录名是乱码。解决办法是手动在后台把分类的“别名”设置成拼音或英文,比如“bangong”对应“办公软件”。我一开始没注意,结果目录名变成“%E5%8A%9E%E5%85%AC”,看着难受。
添加下载时,有个“下载版本”字段。这里我吃过亏:直接传一个文件名带中文的包,结果用户下载时文件名乱码。后来我都是把包名改成全英文或数字,比如“NotepadPlusPlus_8.6.5.exe”,然后后台再填中文显示名,这样下载的文件名就是正常的。上传文件后别忘了选“审核通过”,否则前端看不到。
还有就是描述要写详细。我刚开始懒,只写“这是一个压缩包”,结果用户反馈不知道是干嘛的。后来每次加文件都写版本号、更新日期、适用系统、软件简介,再截个安装界面的图传到“封面”位置。客户看着清楚,搜索SEO也好,关键词密度上去了,百度收录快得很。
常见问题:403错误、下载慢和数据库连接失败
建站过程中总会遇到几个烦人问题。第一个是403 Forbidden。这通常是因为首页文件不存在或者权限不对。我第一次遇到时检查了nginx配置,发现index后面没写index.php,加上就正常了。如果还报403,看看网站目录下有没有index.html或index.php,没有就补一个最简单的,里面写“<?php phpinfo();?>”,测试用。
第二个问题是下载特别慢。排除带宽问题后,检查nginx里有没有设置限速。我之前为了省带宽,设了limit_rate 100k,结果传个100MB的包要17分钟,用户直接关页面。改成500k或1M就平衡了。还有就是看有没有开PHP的session锁定,如果有并发下载请求,session会被锁住,导致排队。解决办法是改php.ini,把session.auto_start设为0,然后重启php-fpm。
第三个是数据库连接失败。在安装向导或后台操作时,突然报“could not connect to MySQL”。我碰到两次,一次是密码填错了,一次是MySQL没启。检查时输入systemctl status mysqld,发现挂掉了,重启就行。如果重启后还报错,看看是不是内存不够,我2G内存的机器跑MySQL+PHP有时候会崩,加了swap后稳定多了。
维护和备份,数据丢了就白干了
站建完不是终点,日常维护要跟上。我每周五凌晨3点用crontab跑个脚本,备份整个网站目录和数据库。脚本很简单,压缩网站根目录成tar.gz,然后mysqldump导出数据库sql文件,都存到另一个挂载的数据盘上。备份文件命名带日期,比如backup_20250315.sql,这样好找。
另一个细节是定期检查磁盘空间。我经历过下载站突然不能上传文件,查半天发现/data分区满了。这时候可以用du -sh *命令看看哪个目录大,清理日志或者旧备份。我习惯保留最近5份备份,更早的自动删除,crontab加一行find /backup -mtime +30 -delete就行。
还有就是SSL证书。很多浏览器现在默认标记HTTP下载站为不安全,会拦截下载按钮。我申请了Let's Encrypt的免费证书,用acme.sh自动续期,配置到nginx里后,地址栏变绿锁,用户信任度高很多。第一次配置时我忘了把HTTP请求301跳转到HTTPS,结果用户访问http还是不安全,加条server块重写规则就解决。
最后说个小技巧:关掉不必要的服务。比如邮件服务sendmail、打印服务cups、时间同步chronyd之外的服务,用systemctl disable掉。我一开始没管,一个2G的服务器运行了十多个服务,光进程就占掉500M内存。关掉后内存剩1.5G给下载站用,流畅多了。