云起软件 发报错截图
首页 知识库 上线
上线 2026-10-23

买来的源码怎么部署到宝塔服务器

买来的源码部署到宝塔,核心是四步:装对 PHP 或 Node 版本、建库导入 SQL、改配置文件里的数据库和域名、配伪静态;多数失败卡在版本和伪静态。

买了源码,解压一看几百个文件,不知道从哪下手——这是最常见的场景。

下面按实际操作顺序走一遍。假设你已经有一台装好宝塔的服务器(2 核 4G 起步),域名已经解析到这台机器。

一、先搞清楚这包是什么

解压后看根目录,三种情况:

有 index.php、application/ 或 app/、think 文件 → PHP 项目(ThinkPHP / Laravel 居多) 有 package.json、server/、app.js → Node 项目 有 web/ + server/ 两个目录 → 前后端分离,要分别部署

同时确认三件事,少一件后面都会卡:

  1. 有没有 .sql 文件。没有 SQL,等于没有数据结构,装上也用不了。
  2. 是不是加密源码。看到 ionCube、SourceGuardian、sg_load、zend_loader 就是加密的,需要额外装解密扩展,或者找卖家要授权文件。
  3. 有没有安装说明。正规源码包里会有 安装说明.txt 或 README.md,先读它——里面写的 PHP 版本和目录权限要求,比你自己试快得多。

二、装环境

宝塔首页 → 软件商店,装这几样:

组件版本建议说明
Nginx1.22 或 1.24别用 OpenResty,除非源码要求
MySQL5.7老源码优先 5.7,8.0 会有排序规则和语法差异
PHP7.4老商城类源码的标准版本
PM2 管理器最新Node 项目才需要
phpMyAdmin最新导库、查数据用

PHP 装完进”设置 → 安装扩展”,把 fileinfo、opcache、redis(如果源码用到)勾上。这几个缺了会在运行时才报错,很难查。

三、建站并上传

1. 添加站点

宝塔 → 网站 → 添加站点:填域名、根目录(默认 /www/wwwroot/你的域名)、PHP 版本选对、数据库选 MySQL 并勾选”创建同名数据库”。

2. 上传源码

两种方式,按包大小选:

  • 小于 100MB:文件管理器直接上传,再解压
  • 大于 100MB:先传到本地,用 scp 或宝塔的”远程下载”拉
# 本地执行,把包传上去
scp -r ./source.zip root@你的IP:/www/wwwroot/你的域名/

传完在文件管理器里解压,注意检查是不是套了一层目录。解压后如果根目录里只有一个文件夹,要把里面的内容移上来,否则访问会 404。

3. 目录权限

cd /www/wwwroot/你的域名
chown -R www:www .
find . -type d -exec chmod 755 {} \;
find . -type f -exec chmod 644 {} \;

runtime/、storage/、uploads/ 这几个目录要给 777(或 755 且属主 www),否则写入失败,表现为”提交成功但数据没保存”。

四、导数据库

1. 建库

如果建站时没勾创建数据库,手动建一个。字符集选 utf8mb4,别选 utf8——utf8 在 MySQL 里只有 3 字节,存 emoji 和部分生僻字会截断。

2. 导入 SQL

phpMyAdmin 里选库 → 导入 → 选 .sql 文件。大文件(几十 MB 以上)用命令行更快:

mysql -u 用户名 -p 库名 < /path/to/database.sql

3. 如果 SQL 报错

报错原因处理
1064 You have an error in your SQL syntaxMySQL 版本不匹配5.7 的库导进 8.0,或反过来
1273 Unknown collation: utf8mb4_0900_ai_ci8.0 的排序规则,5.7 不认文本替换成 utf8mb4_general_ci 再导
1115 Unknown character set用了不支持的字符集检查是不是 utf8mb4 拼错
1044 Access denied用户没权限用 root 导,或给用户授权该库

五、改配置(关键一步)

源码里一定有一个配置文件写着数据库和域名,找不到就用搜索:

grep -rn "localhost" --include="*.php" --include="*.env" . | head -20
grep -rn "数据库密码占位\|DB_PASSWORD\|DB_HOST" . | head -20

常见位置:

  • ThinkPHP:.env 或 config/database.php
  • Laravel:.env
  • 老商城:data/config.php、includes/config.php、config/config.php
  • Node:.env 或 config/default.json

要改的通常是这五项:

数据库地址 = 127.0.0.1
数据库端口 = 3306
数据库名   = 你在宝塔建的库名
数据库用户 = 库名(宝塔默认同名)
数据库密码 = 建库时生成的密码

改完顺手把 APP_DEBUG 打开(PHP 项目一般是 true),方便看报错。上线前记得关掉,开着会把数据库信息暴露在错误页上。

域名相关的配置也别忘了:后台地址、上传资源域名、支付回调地址,通常在同一个文件或后台设置页里。

六、配伪静态

这一步不做,首页能开但所有内页 404。

宝塔 → 网站 → 设置 → 伪静态,按框架选:

  • ThinkPHP:选 thinkphp
  • Laravel:选 laravel5
  • WordPress:选 wordpress
  • 没有匹配的:贴源码说明里的规则

保存后立刻刷新页面测试。

七、Node 项目额外三步

Node 项目的部署路径不一样:

1. 装依赖并构建

cd /www/wwwroot/你的域名
npm install --production
npm run build   # 有前端构建的话

2. 用 PM2 启动

宝塔 → 软件商店 → PM2 管理器 → 添加项目:

  • 启动文件:app.js 或 server.js
  • 运行目录:项目根目录
  • 端口:源码里写的端口(常见 3000 / 8080)

启动后看日志,报错会直接显示。Cannot find module 是依赖没装全,EADDRINUSE 是端口被占。

3. 配反向代理

站点设置 → 反向代理 → 添加:目标 URL 填 http://127.0.0.1:3000,发送域名填你的域名。

没配反代,Nginx 会去找静态文件,返回 404。

八、八个常见报错

现象真实原因处理
502 Bad GatewayPHP-FPM 没启动,或 Node 进程挂了重启对应服务;看 PHP 版本是否和站点设置一致
403 Forbidden目录权限不对,或防跨站 open_basedir 限制改属主 www;站点设置里关掉”防跨站攻击”
404 / No input file specified伪静态没配,或根目录指错了一层配伪静态;检查站点根目录
页面全白、没有报错PHP 错误被关掉了配置里开 display_errors,或看 /www/server/php/版本/var/log/php-fpm.log
数据库连接失败密码错、端口错、或用了 socket 连接先用 phpMyAdmin 验证账号密码,再核对配置
中文全变问号库或表不是 utf8mb4,或连接没指定字符集改库字符集;连接串加 charset=utf8mb4
上传图片失败上传大小限制改 client_max_body_size(Nginx)、upload_max_filesize 和 post_max_size(PHP)
.user.ini 删不掉文件被加了不可变属性chattr -i .user.ini 后再删

九、上线前必做的安全处理

源码装完能用,不等于能对外。这几件事不做,快则一周就会被扫到:

  1. 删掉 install/ 目录。留着等于把重装入口公开。
  2. 改后台路径。/admin 改成随机串,能挡掉大部分自动扫描。
  3. 改数据库密码,别用源码里的默认值。
  4. 关掉 phpMyAdmin 的公网访问,要用时再开。
  5. 宝塔面板改端口 + 开 BasicAuth + 限制授权 IP。
  6. 删掉源码自带的演示数据和测试账号。
  7. 配 HTTPS,Let’s Encrypt 免费,设自动续期。

卡在哪一步

部署这件事,90% 的时间花在”看报错猜原因”上。把报错原文(不是截图里的标题,是完整那段)和你的 PHP / MySQL 版本发过来,能直接告诉你是哪一环。

单次部署 199,含环境、依赖、数据库、反向代理和 HTTPS;要连备案一起做 1,200,3–7 天。


相关:源码部署上线 · 案例:商城系统卡在 502,改 3 处环境变量 · 完整报价单

常见追问

宝塔装完 PHP 选哪个版本?

看源码要求。老商城类源码多数是 PHP 7.2–7.4,装 8.x 会报一堆兼容错误;新一点的框架(Laravel 9+、ThinkPHP 8)要 8.0 以上。不确定就先装 7.4 试,报错再调。

源码上传后打开是 404 或提示 No input file specified 怎么办?

伪静态没配。宝塔站点设置里选对应框架的伪静态规则(ThinkPHP、Laravel、WordPress 都有预设),选完保存,再刷新页面。

数据库导入报错 1064 或 1273 是什么原因?

1064 是 SQL 语法错,通常是 MySQL 版本不匹配(5.7 的语句拿到 8.0 跑);1273 是排序规则不存在,把 utf8mb4_0900_ai_ci 换成 utf8mb4_general_ci 即可。

.user.ini 删不掉、提示权限不足?

这个文件被加了不可变属性。执行 chattr -i .user.ini 解除后再删。改完记得恢复,否则防跨站保护失效。

懒得自己折腾?

把报错截图发我,免费看。能修就说多少钱、几天;修不了直接说重做更便宜。

发截图
打电话 加微信,发驳回意见