ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

宝塔面板搭建网站全流程:从LNMP环境部署到SSL安全上线

宝塔面板搭建网站全流程:从LNMP环境部署到SSL安全上线 从一台刚到手、连图形界面都没有的裸 Linux 服务器到浏览器里能正常访问自己的网站这中间隔着一道让无数新手当场放弃的坎命令行。我第一次部署 LNMP 环境的时候光是编译安装 Nginx 和 PHP 就折腾了整整两天各种依赖冲突、配置文件报错、进程起不来最后差点把系统重装。后来接触了宝塔面板才发现这些重复劳动完全可以被图形界面取代。这篇文章就围绕宝塔面板搭建网站这条主线把从服务器准备、面板安装、环境配置到第一个网站上线的完整过程拆开讲清楚包括我在实际部署中踩过的坑和排查思路。如果你刚买了一台服务器或者手里有服务器但一直没跑起来网站可以照着这篇文章走一遍。1. 为什么我建议新手直接用宝塔面板而不是死磕命令行1.1 命令行部署环境的真实成本很多教程一上来就让你 SSH 登录服务器然后复制粘贴一大段命令比如yum install -y nginx、systemctl start nginx。表面看就两行但后面紧接着就是 php-fpm 的编译参数、MySQL 的初始化、nginx 配置文件里 server 块的写法。任何一个环节报错新手都不知道去哪里看日志更不知道怎么修。我自己早期吃过这个亏。那时候为了装一个 WordPress从下载源码包开始一步步 make 编译。openssl 版本不对要重新编译php 扩展缺失要找对应的 devel 包nginx 和 php-fpm 通信方式从 socket 改成 tcp 又要调一堆参数。最后确实装好了但整个过程极其痛苦而且换了另一台服务器依旧要从头再来。这不是学会Linux的正确路径更像是在浪费生命。1.2 宝塔面板到底解决了什么问题宝塔面板本质上是一个服务器管理面板把 Linux 服务器上常见的运维操作做成了网页界面。你不需要记住vim /etc/nginx/nginx.conf在哪里不需要背mysql -uroot -p怎么用直接在浏览器里点鼠标就能完成一键安装 LNMP / LAMP 环境PHP 多版本自由切换可视化添加、删除、管理网站自动生成 nginx 配置图形化管理 MySQL 数据库、FTP 账号、文件目录内置文件管理器在线编辑代码不用再开 SFTP计划任务、日志切割、备份恢复、防火墙、SSL 证书申请换句话说它把 Linux 运维里最常用、最重复的那些操作全部做成了按钮。你不需要理解每一行配置的含义就能先把网站跑起来等跑通了再去研究底层原理学习曲线平缓得多。1.3 适合用宝塔的人群以及不适合的场景我自己判断的标准很简单如果你是一个人或者小团队需要快速把网站部署上线宝塔面板是效率最高的选择。个人博客、企业官网、小程序后端、API 服务甚至一些日活量不太大的生产项目用它完全没问题。但如果你所在的公司有专职运维团队服务器数量上百台需要统一的配置管理、自动化发布、全链路监控那宝塔面板这类可视化工具并不适合——这种情况下直接上 Ansible、Kubernetes 这类基础设施方案更合理。还有一点要注意宝塔面板是安装在服务器上的管理入口它给了你极大的便利同时也意味着一旦面板本身有漏洞攻击者可能获得较高的控制权限。所以个人项目可以用但一定要做好安全加固后面我会专门讲。2. 从一台裸服务器到面板跑起来安装流程与避坑2.1 服务器配置怎么选先解决拿什么跑的问题。如果你只是搭一个个人网站1 核 1G 内存的入门云服务器就够用了。装上宝塔面板、Nginx、MySQL、PHP 之后内存占用大概在 600MB 左右跑一个日均几千访问量的 WordPress 是没问题的。如果你的网站要做图片处理、视频转码、或者跑 Java 应用那建议 2 核 4G 起步。我更推荐 2 核 2G 作为起步配置留给系统一定的余量MySQL 和 PHP 跑起来不会捉襟见肘。带宽方面个人网站 1M 到 3M 足够但要留意云服务商的按流量计费和固定带宽两种模式前者适合访问量不稳定的小站。2.2 系统镜像选择的细节宝塔面板支持 CentOS、Ubuntu、Debian 等主流 Linux 发行版。官方更推荐 CentOS 系但 CentOS 7 已经停止维护CentOS Stream 的定位又偏向滚动更新。我现在的习惯是新服务器直接用 Ubuntu 22.04 LTS 或 Debian 12LTS 版本维护周期长软件源更新及时宝塔面板对这两个系统的兼容性也做得很好。系统盘大小也要注意。默认的 40G 系统盘通常够用但如果你打算在服务器上存放大量文件、数据库备份建议直接选 60G 或 80G。另外装完系统之后云服务商的镜像市场里如果有宝塔面板预装镜像也可以直接用省去手动安装的一步不过我还是建议自己装一遍能清楚整个过程。2.3 安装全过程一条命令搞定服务器买好、系统装好之后你会拿到一个公网 IP 和 root 密码。用 SSH 工具比如 Xshell、Termius 或者直接在网页端自带的终端登录服务器然后执行宝塔官网提供的安装命令。命令一般是wget -O install.sh https://download.bt.cn/install/install_6.0.sh bash install.sh ed8484bec执行之后就是等待通常 1 到 3 分钟。安装完成后终端会输出类似这样的信息面板账户登录信息 【云服务器】请在安全组放行 8888 端口 外网面板地址: http://你的IP:28888/xxxxxx 内网面板地址: http://内网IP:28888/xxxxxx 用户名: xxxxxx 密码: xxxxxx这一步最关键的是立刻把这串信息保存下来。面板地址后面那串随机字符是安全入口路径用户名和密码都是随机生成的。一旦关掉终端窗口再想找回就要费一番功夫。忘记面板地址可以用bt命令找回但随机入口路径和初始密码丢失后找回起来很麻烦后面我专门讲。2.4 面板打不开先从这两处排查第一次装完宝塔面板最常见的问题是浏览器里访问面板地址但是打不开。如果是这种情况不要急着重装系统按顺序检查云服务商控制台的安全组规则是否放行了面板端口。大多数云厂商默认只开放 22、80、443 端口面板用的随机端口常见 8888 或者其他高位端口默认都是关闭的。去安全组里添加入站规则允许对应端口访问等一两分钟再刷新。本地网络是否能访问该端口。有些公司网络出口会限制非标准端口换手机流量试试。区分这两个问题有一个快速方法在本地终端执行telnet 你的IP 28888如果Connected说明网络通站点本身有问题如果卡住或者拒绝连接大概率是安全组没放行。3. 搭建 LNMP 环境前先搞懂这套组合拳是怎么协同工作的3.1 一次页面请求里每个角色在干什么进入宝塔面板首页第一件事是安装环境。面板会推荐你装 LNMPLinux Nginx MySQL PHP或者 LAMP把 Nginx 换成 Apache。新手很容易在这一步直接就点安装但我建议你先花几分钟理解这个组合的含义后面出问题才能知道去哪里查。用一个餐厅的类比来解释用户浏览器发出请求就像客人走进餐厅点餐。Nginx 是前台服务员负责接待请求、把请求分发给后厨、再把做好的菜端出来。PHP 是厨师网站的 PHP 代码是菜谱它根据请求执行代码逻辑生成 HTML 页面。MySQL 是仓库/记账本用户数据、文章内容、订单信息都存在这里PHP 需要数据的时候去这里取。这三个角色缺一不可。Nginx 本身不认识 PHP 代码它看到以.php结尾的请求会交给 PHP-FPM 进程去处理这个转交的配置就在 nginx 的 server 块里。你之后如果遇到浏览器访问 .php 文件变成下载或者一片空白多半是 Nginx 没有正确配置 PHP 解析。3.2 为什么我推荐 LNMP 而不是 LAMP宝塔面板默认推荐 LNMP我也一直用的是这个组合。原因很实际Nginx 采用事件驱动模型处理高并发连接时占用的内存比 Apache 小得多同样 2G 内存的服务器Nginx 能扛住更多请求。Nginx 配置语法相对简洁宝塔面板对常见框架的伪静态规则都做了预设切换方便。Apache 的.htaccess目录配置文件虽然方便但每次请求都要检查目录下的配置文件性能开销更大。LAMP 中 Apache 也有它的优势比如模块化扩展多、兼容老项目的.htaccess重写规则。如果你跑的是某些老旧的 PHP 程序而且代码里大量依赖.htaccess做路由那用 LAMP 更省心。但大多数现代项目、开源 CMS 在 LNMP 环境下都没有问题按 LNMP 走就行。3.3 极速安装和编译安装到底选哪个宝塔安装环境时提供两种方式极速安装和编译安装。极速安装本质是下载预编译好的二进制包几分钟就能完成编译安装是在服务器本地读取源码并编译耗时一两个小时但可以针对当前 CPU 指令集做优化性能上会有一些提升。给新手的建议很直接先点极速安装。等网站跑起来、你真正理解了运行机制之后如果还想追求性能再重装编译版也不迟。编译安装不是必要步骤很多生产环境用极速安装同样跑得好好的。PHP 版本的选择上有讲究。宝塔默认会装一个比较新的 PHP 版本比如 PHP 8.1 或 8.2但有些老项目比如某些第三方 CMS在 PHP 8 下会有兼容性问题报一些函数弃用的警告甚至直接白屏。我发现兼容性最好的做法是面板里同时装两个版本比如 PHP 7.4 和 PHP 8.1然后让不同站点使用不同版本的 PHP。在宝塔的站点设置里可以单独为每个站点指定 PHP 版本这个功能非常实用老项目、新项目可以在同一台服务器上共存。3.4 MySQL 初始化和密码问题安装 MySQL 之后宝塔会自动生成一个随机 root 密码存储在面板的数据库菜单里。你在命令行里用mysql -uroot -p登录时需要这个密码如果你在面板的数据库管理功能里操作一般用不到。一个很重要的经验不要把宝塔自动生成的 root 密码复制到你的网站配置文件里。网站连接数据库要用单独的数据库用户。正确流程是在数据库菜单里先创建一个数据库系统会提示你设置这个库对应的连接用户名和密码然后把这个账号密码填到网站的配置文件中。这样可以避免 root 密码泄露导致整个数据库被控制。4. 创建第一个网站域名解析、站点添加与数据库打通4.1 域名准备和备案问题的简化处理搭建网站的最终目标是让别人通过域名访问。首先你需要一个域名可以在任意域名注册商处购买。这里要提一句国内服务器和域名的关系使用国内云服务器绑定域名对外提供 Web 服务需要先完成 ICP 备案这是服务商的基本要求如果暂时不想处理可以先用http://IP地址的形式访问网站测试功能或者把网站部署在不需要备案的服务器区域。备案流程不复杂按服务商指引提交资料等待审核即可一般不影响本地开发调试。4.2 域名解析到服务器 IP在域名服务商的后台添加一条 A 记录主机记录填裸域名、wwwwww 子域名或者你想用的其他子域名记录值填你的服务器公网 IP。TTL 用默认的 600 秒就行通常 10 分钟到半小时内生效有的服务商解析生效慢那就耐心等。如果你想在本机快速验证而解析还没生效可以临时改本地 hosts 文件把域名手动指向服务器 IP。比如在 Windows 的C:\Windows\System32\drivers\etc\hosts里加一行203.0.113.10 yourdomain.com注意这只是测试手段正式访问还是要靠正常解析。4.3 面板里添加站点的完整流程环境装好、域名解析生效之后就可以创建第一个网站了。打开宝塔面板左侧菜单找到网站点击添加站点会弹出一个表单域名填你的域名比如yourdomain.com如果需要让www.yourdomain.com也能访问用空格或换行分隔填进去。如果只是想用 IP 测试也可以直接填 IP。根目录面板会自动生成/www/wwwroot/yourdomain.com这个路径。一般不用改保持以域名为目录名方便以后维护管理。FTP如果不熟悉 FTP暂时不创建也可以。改用面板自带的文件管理器或通过 SSH 上传文件。数据库选择 MySQL然后填写数据库名和用户名系统会随机生成一个密码。这里的账号密码就是给你的网站程序连接数据库用的填完要保存好。提交之后面板会完成以下事情创建网站根目录、生成 nginx 配置文件、创建对应的 MySQL 数据库和用户、在防火墙中放行 80 端口如果你勾选了相关选项。你可以在网站列表里看到新站点状态默认是运行中。4.4 根目录的文件结构和权限网站的根目录/www/wwwroot/yourdomain.com下默认会生成一个index.html文件。访问你的域名如果看到宝塔的默认页面就说明 Nginx、DNS 解析和站点配置这三个环节都通了网站已经开始工作了。此时你的任务就是把网站程序文件上传到这个根目录。可以用宝塔文件管理器直接上传压缩包再解压也可以在根目录右键终端。上传的 PHP 文件需要保证文件所有者是www用户宝塔默认设置下站点运行用户就是这个权限设置为755目录或644文件通常是最稳妥的。如果你用 root 账号上传了文件访问时可能出现权限报错此时在文件管理里选中文件点击权限改成 755 和 www 用户即可。4.5 数据库导入的两种方式很多网站程序如 WordPress、Typecho在安装时会引导你填写数据库信息然后自动创建数据表不需要手动导入 SQL。但如果你有一个现成的数据库备份文件.sql需要导入到新库里面板里有两个入口数据库菜单找到目标库点击导入上传 SQL 文件。通过 phpMyAdmin 登录选择目标数据库点击导入。我个人的习惯是推荐用面板的备份功能而非手动导入。因为手动导 SQL 时经常遇到文件过大、编码不对、SQL 语句里包含特殊字符等问题面板自带的上传导入对这些情况做了优化稳定性好很多。4.6 第一个 PHP 页面验证为了确保 PHP 解析正常可以在根目录新建一个test.php?php phpinfo();浏览器访问http://yourdomain.com/test.php正常情况下会显示 PHP 版本、配置参数等信息。看到这个页面意味着 Nginx 已经把请求正确转发给了 PHP-FPMPHP 进程工作正常MySQL 连接通过前面创建的数据库也能正常使用。测试完记得删掉这个文件phpinfo()输出会暴露不少服务器配置信息不适合留在线上。5. 让网站从能打开到正经能用SSL、伪静态与安全底线5.1 申请免费 SSL 证书开启 HTTPS现在新上线的网站必须配 HTTPS这是基本要求。宝塔面板对这个流程做了极大的简化在站点设置里找到SSL选择 Lets Encrypt 证书勾选你的域名点击申请。整个过程通常在一分钟内完成证书会自动续期你不需要手动处理任何证书文件。申请完之后记得在 SSL 设置里打开强制 HTTPS并开启HTTP 自动跳转到 HTTPS。这样用户访问http://开头的链接会自动跳转到https://版本不会出现页面加载一半、资源被浏览器拦截的情况。站点设置里还有一个 HTTPS 证书 的切换选项默认会自动识别。如果你后面换服务器、迁移网站只要把原来的证书私钥和证书文件复制过来即可或者直接重新申请一张免费的也行。5.2 伪静态规则框架路由的灵魂如果你的网站是 WordPress、ThinkPHP、Laravel 这类框架搭建的直接访问文章的固定链接或者带路由的 URL 时经常会 404。原因很简单Nginx 默认情况下不知道应该把某个 URL 交给哪个 PHP 文件处理需要配置伪静态规则。宝塔面板内置了大量常见程序的伪静态模板。操作路径站点设置 - 伪静态在下拉框里选择对应的程序即可。比如 WordPress 就选 WordPressThinkPHP 就选 ThinkPHPLaravel 有专门的模板。这里有个很容易踩的坑选错了模板或者框架版本不对路由照样不生效。我的建议是先在面板里选择官方模板测试不行再用代码调试。5.3 安全加固不追求绝对安全但要有底线宝塔面板本身提供了一些安全相关功能我的建议是别全开也别全关按需配置开启面板 SSL面板管理页面也支持 HTTPS 访问建议在面板设置里开启避免明文传输用户名密码。修改默认面板端口和安全入口安装完成后默认的端口和路径已经在终端里显示了建议在面板设置中修改成你自己记得住、但别人猜不到的路径。系统防火墙宝塔的安全菜单里有系统防火墙插件可以启用基本的防扫描策略比如限制登录失败次数、封禁频繁访问的 IP。SSH 安全在安全 - SSH 管理里可以修改 SSH 端口、禁止 root 直接登录、设置密钥登录。这一类操作要格外小心尤其是禁止 root 登录之前务必先确认你有普通用户的账号和足够权限否则容易把自己锁在外面。PHP 危险函数禁用站点设置 - PHP 配置里可以禁用exec、system、passthru这类危险函数。对个人博客、企业官网来说禁用这些函数通常不会影响正常功能但能有效降低 WebShell 利用的风险。我给一个底线建议至少做到面板地址随机化 修改面板默认端口 修改 SSH 端口 启用宝塔系统防火墙这四步就能挡住绝大多数自动化扫描攻击。至于更高级的 Fail2ban、WAF 规则等你有精力了再研究不急于一时。5.4 自动备份出问题时的后悔药网站上线后最重要的不是性能优化而是备份。宝塔面板的计划任务功能可以定时执行备份把网站文件和数据库打包保存。我的配置习惯是每天凌晨 3 点备份一次数据库保留最近 7 份每周备份一次网站文件保留最近 4 份备份路径放在系统盘以外比如挂载的独立数据盘有条件的话再设置一个备份到云存储任务把备份同步到腾讯云 COS、阿里云 OSS 等对象存储这样的好处是万一某天你的网站被改得面目全非或者一句代码写错导致整个站点崩了直接回滚备份就能在十几分钟内恢复正常不需要从头排查。6. 我在实际部署中踩过的三个坑以及完整排查链路6.1 面板和网站全部打不开安全组的暗坑有一次我给客户部署服务器宝塔面板安装完成、环境也装好了结果浏览器访问面板地址转圈转了几分钟还是打不开。我先是怀疑面板服务挂了SSH 登录看bt状态结果显示正在运行。又在服务器上执行ss -lntp检查端口监听端口也有。最后才想到去云服务商控制台看安全组——里面对外放行的端口只有 22、80、443。面板用的高位端口被安全组挡得严严实实数据包根本进不来。这个坑在云服务器环境里特别常见。每次装完面板后都应该做两件事检查安全组里是否放行了面板端口和 80、443 端口在所有安装脚本执行完毕、面板能打开之后再开始配置网站避免到了最后一步才发现端口不通判断方向其实很简单如果 SSH 能连上、面板服务状态正常但浏览器打不开先查安全组如果ss -lntp看不到进程监听端口再查面板本身。6.2 伪静态配置了依然 404规则模板版本问题还有一次部署一个 ThinkPHP 6 项目实际访问首页没问题但访问https://你的域名/index.php/admin/login这类路由地址时一直 404。我在宝塔的伪静态里选了默认的 ThinkPHP 模板依然不生效然后把 nginx 配置文件打开反复确认 server 块里try_files和location配置都正确但问题依旧。查了很久才发现我选的伪静态规则虽然名字叫 ThinkPHP但写法更像 ThinkPHP 3 时代的规则对 TP6 的路由方式并不完全适配。TP6 要求 URL 重写时把非真实文件的请求统一交给index.php处理核心配置大概是location / { if (!-e $request_filename) { rewrite ^(.*)$ /index.php?s$1 last; } }后来我直接把这块规则替换进去刷新页面就好了。从那以后遇到框架类项目我的做法是先去框架官网查迁移到 Nginx 环境下的官方推荐配置再和宝塔自带的模板对比。宝塔模板是通用方案官方配置才是针对性的。6.3 MySQL 备份脚本失败密码里的特殊字符惹的祸这个问题比较隐蔽。我在计划任务里设置了一个数据库备份任务刚开始几次执行没问题后来某一天开始备份任务一直报错日志显示是连不上数据库。查了一圈最后发现是数据库密码中含有和$这类特殊字符。宝塔调用备份命令时会把这些特殊字符作为 shell 参数拼接导致密码解析被截断或者转义错误。解决方法是手动修改 MySQL 用户密码只保留字母和数字特殊字符尽量避免。在宝塔面板的数据库菜单里可以直接修改用户密码同时更新网站配置里的数据库连接信息五分钟搞定。这个坑的教训是数据库密码的复杂度不在于单纯堆叠符号而在于长度和随机性。我用随机生成的 16 位小写字母加数字同样很难被爆破而且不会再出类似转义问题。如果你的生产环境数据库密码已经包含特殊字符并且一直在正常工作那不用马上改但一旦出现备份脚本执行异常优先检查这里。6.4 忘记面板地址和密码的处理方法最后补充一个很多人后续一定会遇到的情况忙完部署、关了 SSH 窗口过两天再想登录面板找不着地址和密码了。解决办法可以直接在 SSH 终端执行bt会出现一个管理菜单输入数字可以修改面板端口、用户名、密码、安全入口路径等。比如输入 14 可以查看面板默认信息。注意执行这一步需要你有 root 权限或sudo权限只要 SSH 还能登进去就能找回面板控制权。不过说实话这种忘记密码的问题最好在源头上避免。我现在的习惯是每台服务器的面板信息都记录在一处密码管理工具里而且安装完成后立刻修改默认密码和端口记录下来。虽然在博文里说这个有点基础但根据经验百分之三四十的新手都卡在找回密码这一步上。我在实际部署中的体会是宝塔面板这类工具最大的价值是把新手从被系统折磨的状态中解放出来让你能专注在网站本身的功能逻辑上。它不是银弹不能替你写出漂亮的页面和健壮的逻辑但至少能把部署上线这个过程从可能耗时数天缩短到半小时以内。踩过几次坑之后我现在无论给个人项目还是小企业部署站点默认方案都是宝塔面板加 LNMP配合定期的快照和备份策略稳定性一直很好。最后再分享一个小技巧每次调整网站配置之前先在面板里拍一张云服务器快照有问题直接回滚比反复修改配置排查要省心得多。
返回列表