尧图网站设计 尧图网站设计YAOTU DESIGN
ARTICLE DETAIL

资讯详情

深耕网站设计与一线实操的经验洞察。

从零部署WordPress博客:LEMP环境配置、域名绑定与HTTPS安全实践

从零部署WordPress博客:LEMP环境配置、域名绑定与HTTPS安全实践 1. 从零到一为什么选择WordPress以及你需要准备什么如果你正在考虑搭建一个属于自己的博客网站并且希望它能被全世界的人访问那么你大概率已经听说过WordPress这个名字。作为一个拥有超过十年建站经验的老手我可以负责任地告诉你对于绝大多数个人博主、内容创作者甚至小型企业来说WordPress依然是那个“最优解”。它不像某些平台那样给你一个漂亮的壳子却把你的内容锁在别人的花园里。WordPress的核心魅力在于它给你的是完全的控制权——从网站的外观、功能到数据一切都在你自己的服务器上。但“搭建”和“发布到公网”是两件完全不同的事。前者是技术实现后者是网络工程。很多人卡在了第二步看着自己本地运行完美的网站却不知道如何让远方的朋友也能打开。这背后涉及到服务器、域名、网络协议等一系列概念。别担心这篇文章的目的就是手把手带你走完从本地安装到公网可访问的完整链路我会把每一步的“为什么”和“怎么做”都讲清楚并分享那些官方文档里不会写的实操细节和踩坑经验。在开始之前你需要明确几样东西一台服务器这是你网站的“家”。它需要24小时运行并拥有一个公网IP地址。对于新手我强烈推荐从云服务商如国内的阿里云、腾讯云或国外的AWS Lightsail、DigitalOcean购买一台最基础的虚拟主机VPS。选择1核CPU、1GB内存、25GB SSD硬盘的配置起步就足够了月成本通常在几十元人民币。为什么选VPS而不是虚拟主机因为VPS给了你完整的操作系统控制权后续无论是安装软件还是排查问题都灵活得多。一个域名这是你网站的“门牌号”比如yourname.com。你可以在阿里云、腾讯云或Godaddy等域名注册商购买。域名本身不贵但它是专业性的体现也便于记忆和传播。基本的命令行操作知识你需要通过SSH工具如PuTTY、Xshell或Mac/Linux自带的终端连接到你的服务器。别被命令行吓到我们只需要用到最基础的几条命令。准备好了吗我们这就开始把想法变成互联网上一个实实在在的站点。2. 服务器环境搭建LAMP vs LEMP以及为什么我推荐后者拿到服务器后第一件事就是搭建网站的运行环境。WordPress是用PHP写的需要运行在Web服务器如Apache或Nginx上并使用MySQL/MariaDB数据库。经典的组合是LAMPLinux, Apache, MySQL, PHP或LEMPLinux, Nginx, MySQL, PHP。我个人的选择并且也推荐你使用LEMP栈。为什么是Nginx而不是Apache这不仅仅是技术选型更是性能和维护便利性的考量。Apache采用多进程/多线程模型处理连接每个连接在一个线程里当访问量巨大时创建和切换线程的开销会成为瓶颈。而Nginx采用事件驱动的异步架构用很少的进程就能处理海量并发连接内存占用更低在高并发场景下表现优异。对于个人博客来说这意味着在同等服务器配置下Nginx能更稳定、更快速地响应访问。此外Nginx的配置文件更加清晰简洁对于后续设置伪静态规则后面会讲到也更为方便。假设你购买的是一台全新的Ubuntu 22.04 LTS系统的服务器。以下是通过命令行完成环境搭建的详细步骤和原理。2.1 系统更新与基础安全加固首先用SSH客户端连接到你的服务器。连接成功后你不是直接就能为所欲为的最好先做两件事更新系统包列表并升级现有软件以及创建一个用于日常操作的普通用户。# 1. 更新软件包列表 sudo apt update # 2. 升级所有可升级的软件包 sudo apt upgrade -ysudo代表以管理员权限执行命令。apt是Ubuntu的包管理工具update是刷新远程仓库的软件列表upgrade才是实际下载并安装更新。-y参数表示对所有提示自动回答“是”。接着创建一个新用户并赋予其sudo权限避免长期使用危险的root账户。# 添加一个新用户例如叫 blogadmin sudo adduser blogadmin # 按照提示设置密码和相关信息可以一路回车跳过 # 将新用户添加到 sudo 组使其拥有管理员权限 sudo usermod -aG sudo blogadmin现在你可以退出当前连接然后用blogadmin用户重新登录。后续操作都使用这个用户。2.2 安装Nginx、MySQL与PHP现在开始安装核心组件。我们将使用apt一次性安装它们。# 安装 Nginx, MySQL Server, PHP 以及 WordPress 所需的一些PHP扩展 sudo apt install nginx mysql-server php-fpm php-mysql php-curl php-gd php-mbstring php-xml php-xmlrpc php-zip php-json php-intl -y逐项解释一下nginx: 我们的Web服务器。mysql-server: 数据库服务器。php-fpm: PHP的FastCGI进程管理器。Nginx本身不能解析PHP它需要通过php-fpm这个“翻译官”来处理PHP请求。php-mysql: 让PHP能连接MySQL数据库的驱动。php-curl,php-gd等这些都是WordPress核心或常用插件/主题所依赖的扩展库。例如php-gd用于图片处理php-mbstring用于多字节字符串处理对中文支持很重要php-zip用于在线安装主题/插件时的解压。安装完成后需要启动服务并设置开机自启# 启动服务 sudo systemctl start nginx sudo systemctl start mysql sudo systemctl start php8.1-fpm # 注意Ubuntu 22.04默认PHP版本是8.1请根据实际安装版本调整 # 设置开机自启 sudo systemctl enable nginx sudo systemctl enable mysql sudo systemctl enable php8.1-fpm你可以通过sudo systemctl status nginx来检查服务是否正常运行。看到绿色的active (running)就说明成功了。2.3 配置MySQL数据库安全刚安装的MySQL默认root用户没有密码这非常危险。运行MySQL的安全安装脚本sudo mysql_secure_installation脚本会引导你完成以下步骤询问是否设置“验证密码插件”。对于个人博客可以选择No然后自己设置一个强密码。为MySQL的root用户设置密码。移除匿名用户。禁止root用户远程登录这是一项重要的安全措施日常操作我们使用其他数据库用户。移除测试数据库。重新加载权限表。完成后我们需要为WordPress创建一个专用的数据库和用户。# 登录MySQL使用刚设置的root密码 sudo mysql -u root -p # 进入MySQL命令行后执行以下SQL语句 CREATE DATABASE wordpress DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; # 创建一个名为wordpress的数据库并使用utf8mb4字符集这是为了完美支持Emoji和所有Unicode字符。 CREATE USER wpuserlocalhost IDENTIFIED BY YourStrongPassword123!; # 创建一个用户名为wpuser且只能从本机(localhost)连接的用户并设置一个强密码。 GRANT ALL PRIVILEGES ON wordpress.* TO wpuserlocalhost; # 授予wpuser用户对wordpress数据库的所有操作权限。 FLUSH PRIVILEGES; # 刷新权限使更改立即生效。 EXIT; # 退出MySQL命令行。请务必将YourStrongPassword123!替换为你自己生成的、包含大小写字母、数字和特殊符号的复杂密码并妥善保管。3. 部署WordPress核心文件与Nginx服务器块配置环境准备好了现在可以把WordPress“放”到服务器上了。我们将手动下载并配置这比用包管理器安装更能让你理解文件结构。3.1 下载与解压WordPress首先进入Nginx默认的网站根目录。在Ubuntu上通常是/var/www/html。但为了管理清晰我们为博客单独创建一个目录。# 为你的博客网站创建一个目录比如以域名命名 sudo mkdir -p /var/www/yourdomain.com # 进入该目录 cd /var/www/yourdomain.com注意这里的yourdomain.com是一个示例你应该替换为你自己的域名或者一个你喜欢的项目名。这只是一个目录名不影响最终访问。然后从WordPress官网下载最新的中文版本压缩包。# 下载WordPress中文版压缩包 sudo wget https://cn.wordpress.org/latest-zh_CN.tar.gz # 解压 sudo tar -xzvf latest-zh_CN.tar.gz # 解压后会产生一个 wordpress 文件夹我们需要将其中的所有文件移动到当前目录 sudo mv wordpress/* . sudo mv wordpress/.* . 2/dev/null || true # 移动隐藏文件错误忽略 sudo rmdir wordpress # 删除空文件夹 # 清理压缩包 sudo rm latest-zh_CN.tar.gz现在/var/www/yourdomain.com目录下应该布满了WordPress的文件包括wp-admin,wp-content,wp-includes等文件夹。3.2 配置文件权限与所有权这是非常关键且容易出错的一步。Web服务器Nginx进程通常以一个叫www-data的系统用户身份运行。它需要能够读取WordPress的文件并且向wp-content目录写入文件例如你上传图片、插件自动更新时。# 将目录的所有权赋予 www-data 用户和组 sudo chown -R www-data:www-data /var/www/yourdomain.com # 设置目录和文件的权限 # 设置目录为755 (所有者可读可写可执行组和其他用户可读可执行) sudo find /var/www/yourdomain.com -type d -exec chmod 755 {} \; # 设置文件为644 (所有者可读可写组和其他用户只读) sudo find /var/www/yourdomain.com -type f -exec chmod 644 {} \;为什么是755和644755对于目录意味着任何人都可以进入 (x) 并列出文件 (r)但只有所有者能创建/删除文件 (w)。644对于文件意味着所有者可以修改其他人只能读取。这是一个兼顾安全与功能的基础配置。3.3 配置Nginx服务器块虚拟主机Nginx通过“服务器块”来管理多个网站。我们需要为你的博客创建一个配置文件。# 创建配置文件通常以域名命名 sudo nano /etc/nginx/sites-available/yourdomain.com在打开的编辑器中粘贴以下配置内容。请仔细阅读注释并根据你的实际情况修改。server { # 监听80端口HTTP listen 80; # 监听IPv6的80端口如果服务器支持IPv6 listen [::]:80; # 你的域名如果没有域名这里可以先写服务器公网IP但强烈建议使用域名 server_name yourdomain.com www.yourdomain.com; # 网站根目录指向我们刚才放置WordPress文件的地方 root /var/www/yourdomain.com; # 设置目录索引文件Nginx会按顺序寻找这些文件 index index.php index.html index.htm; # 主位置块处理所有请求 location / { # 如果请求的文件不存在则尝试将请求作为目录处理如果还不存在则交给index.php处理 # 这是实现WordPress“漂亮链接”伪静态的关键 try_files $uri $uri/ /index.php$is_args$args; } # 处理PHP请求的规则 location ~ \.php$ { # 引入一些默认的FastCGI参数 include snippets/fastcgi-php.conf; # 指定php-fpm进程监听的套接字文件位置 # 注意这里的 php8.1-fpm.sock 需要根据你实际的PHP版本调整 fastcgi_pass unix:/var/run/php/php8.1-fpm.sock; # 或者如果php-fpm监听的是TCP端口默认9000则用下面这行 # fastcgi_pass 127.0.0.1:9000; } # 禁止访问 .htaccess 文件因为这是Apache的配置文件Nginx用不到 location ~ /\.ht { deny all; } # 静态文件缓存设置提升性能 location ~* \.(js|css|png|jpg|jpeg|gif|ico|svg)$ { expires max; log_not_found off; } }关键点解析server_name: 这里决定了Nginx用这个配置块来响应哪些域名的请求。你可以写多个用空格隔开。root: 必须绝对路径指向WordPress文件所在目录。try_files ... /index.php$is_args$args: 这是Nginx实现WordPress伪静态的“灵魂”。当用户访问yourdomain.com/about时Nginx会先检查是否存在/about这个文件或目录如果都不存在就把请求包括参数内部转发给/index.php处理。WordPress的index.php会解析这个路径从而显示正确的页面。fastcgi_pass: 这里告诉Nginx将PHP文件交给谁处理。我们使用Unix套接字文件的方式通常比TCP端口方式性能稍好也更安全。你需要确认php8.1-fpm.sock这个文件确实存在于/var/run/php/目录下。可以通过ls /var/run/php/查看。保存并退出编辑器在nano中按CtrlX然后按Y再按Enter。接下来需要启用这个站点配置。在Nginx中sites-available存放所有可用的配置sites-enabled存放当前已启用的配置通常是符号链接。# 创建符号链接启用站点 sudo ln -s /etc/nginx/sites-available/yourdomain.com /etc/nginx/sites-enabled/ # 测试Nginx配置语法是否正确。这是极其重要的一步可以避免因配置错误导致服务无法启动。 sudo nginx -t如果看到syntax is ok和test is successful的输出说明配置无误。最后重新加载Nginx配置使更改生效。sudo systemctl reload nginx4. 完成WordPress安装与基础安全设置现在通过浏览器访问你的服务器公网IP地址如果还没绑定域名或者你配置的域名应该就能看到WordPress著名的“五分钟安装”界面了。但在此之前我们还需要完成一个前置步骤。4.1 创建WordPress配置文件WordPress需要一个wp-config.php文件来连接数据库。我们可以基于样例文件来创建。# 进入网站根目录 cd /var/www/yourdomain.com # 复制样例配置文件 sudo cp wp-config-sample.php wp-config.php # 编辑配置文件 sudo nano wp-config.php在编辑器中找到以下部分并进行修改// ** MySQL 设置 - 具体信息来自您的主机提供商 ** // /** WordPress数据库的名称 */ define( DB_NAME, wordpress ); // 我们之前创建的数据库名 /** MySQL数据库用户名 */ define( DB_USER, wpuser ); // 我们之前创建的数据库用户名 /** MySQL数据库密码 */ define( DB_PASSWORD, YourStrongPassword123! ); // 之前设置的强密码 /** MySQL主机 */ define( DB_HOST, localhost ); // 数据库在本机所以是localhost此外为了增强安全性你需要为WordPress生成一组唯一的“身份认证密钥”。这些密钥用于加密用户Cookie等信息。千万不要使用默认的或网上随便找的密钥。访问这个官方链接https://api.wordpress.org/secret-key/1.1/salt/它会随机生成一组密钥。复制页面上的全部内容。在wp-config.php中找到类似下面这样的段落define( AUTH_KEY, put your unique phrase here ); define( SECURE_AUTH_KEY, put your unique phrase here ); define( LOGGED_IN_KEY, put your unique phrase here ); define( NONCE_KEY, put your unique phrase here ); define( AUTH_SALT, put your unique phrase here ); define( SECURE_AUTH_SALT, put your unique phrase here ); define( LOGGED_IN_SALT, put your unique phrase here ); define( NONCE_SALT, put your unique phrase here );用你刚才复制的、由官方生成的那一大串随机字符完整地替换掉这8行。保存并退出。4.2 通过Web界面完成安装现在在浏览器中输入你的服务器IP或域名。你应该会看到语言选择界面。选择“简体中文”点击“继续”。接下来你会看到需要填写站点信息站点标题你的博客名字。用户名不要使用admin。这是黑客尝试暴力破解时第一个试的用户名。起一个独特的名字。密码系统会生成一个强密码建议使用。务必保存好。您的电子邮件填写有效的邮箱用于接收通知和密码重置。对搜索引擎的可见性如果你不希望网站刚建好就被搜索引擎收录可以勾选。建站初期可以勾选等内容完善后再取消。点击“安装WordPress”。如果一切顺利你会看到安装成功的提示。点击“登录”用你刚才设置的用户名和密码登录后台通常是yourdomain.com/wp-admin。4.3 必须做的几项基础安全与优化设置进入后台后先别急着写文章完成这几项设置能让你的网站更安全、更稳定。1. 固定链接设置伪静态这是让文章链接看起来更美观如/post-name/而不是?p123的关键也利于SEO。在后台左侧菜单进入设置 固定链接。选择一个你喜欢的结构比如“文章名”。我通常选择“自定义结构”/%postname%.html这样看起来像静态页面。点击“保存更改”。这里有一个大坑保存后你可能会遇到“页面未找到”的错误。这是因为我们虽然之前在Nginx配置了try_files规则但有时需要根据你选择的固定链接结构微调。最常见的解决方案是在Nginx配置的location /块中确保try_files规则是try_files $uri $uri/ /index.php$is_args$args;。如果还有问题可能是服务器未加载rewrite模块但Ubuntu默认安装的Nginx是包含的。如果确认配置无误重启Nginx服务sudo systemctl restart nginx。2. 更新永久链接.htaccess的替代方案WordPress通常会尝试在网站根目录下写一个.htaccess文件来管理重写规则但这是给Apache用的。在Nginx下这个文件无效我们也不希望Nginx去读它所以前面配置里deny all了。因此WordPress后台可能会提示“无法更新.htaccess文件”。忽略这个警告即可。所有重写规则都由我们之前在Nginx配置文件中写的try_files指令处理。3. 限制登录尝试与更改登录地址默认的wp-admin和wp-login.php是黑客攻击的重灾区。我强烈建议安装一款安全插件例如Wordfence Security或iThemes Security。安装后启用“限制登录尝试”功能比如连续5次密码错误就锁定IP一小时。有些插件还提供“重命名登录页面”的功能将wp-admin改成只有你自己知道的路径这能阻挡绝大部分自动化攻击脚本。4. 务必禁用文件编辑功能WordPress后台允许编辑主题和插件的PHP文件这在被黑客入侵时会成为巨大的安全隐患。在wp-config.php文件的末尾/* 好了请不要再继续编辑。请保存本文件。 */这行注释的上方添加一行define( DISALLOW_FILE_EDIT, true );这行代码会禁用后台的主题/插件编辑器但不会影响通过FTP或服务器命令行更新文件。5. 绑定域名与开启HTTPS让网站正式上线到目前为止你的网站可能还只能通过IP地址访问。要让用户通过域名访问并且让连接更安全浏览器显示小锁图标你需要完成以下两步。5.1 域名解析DNS配置在你购买域名的服务商后台如阿里云控制台找到域名解析管理。添加一条A记录。主机记录通常填表示主域名如yourdomain.com或者填www表示带www的域名如www.yourdomain.com。记录值填写你服务器的公网IP地址。TTL生存时间默认即可通常600秒或3600秒。如果你希望同时支持带www和不带www的访问通常需要添加两条A记录主机记录分别为和www记录值都指向同一个IP。DNS生效需要时间从几分钟到几小时不等全球同步可能需要更久。你可以使用ping yourdomain.com命令来检查解析是否已生效返回的IP地址是否是你的服务器IP。5.2 使用Let‘s Encrypt获取免费SSL证书HTTPSHTTP是明文传输不安全。HTTPS通过SSL/TLS证书对通信进行加密。过去证书很贵现在有了Let‘s Encrypt可以免费获取自动续期的证书。我们将使用Certbot这个工具它是获取和安装Let‘s Encrypt证书的官方推荐方式。首先安装Certbot及其Nginx插件sudo apt install certbot python3-certbot-nginx -y然后运行Certbot它会自动读取我们之前配置的Nginxserver_name并为我们完成所有配置sudo certbot --nginx运行后Certbot会询问你的邮箱用于接收证书到期提醒和紧急通知。询问你是否同意服务条款当然选同意。列出它检测到的域名来自Nginx配置让你选择为哪些域名申请证书。通常全选。询问是否将HTTP流量重定向到HTTPS。强烈建议选择“2: Redirect”这样所有访问http://的请求都会被自动跳转到https://。Certbot会自动修改你的Nginx配置文件添加SSL相关配置并设置好自动重定向。完成后它会测试证书是否安装成功并告诉你证书的存储路径和到期时间90天后会自动续期。现在用https://yourdomain.com访问你的网站浏览器地址栏应该会显示一把锁表示连接是安全的。一个重要的后续检查Certbot修改了你的Nginx配置文件通常在/etc/nginx/sites-available/yourdomain.com里添加了一个server { listen 443 ssl; ... }块。你可以用sudo nginx -t测试配置然后用sudo systemctl reload nginx重新加载。同时确保服务器的防火墙如果开启了如UFW放行了443端口HTTPSsudo ufw allow 443/tcp6. 日常维护、备份与性能调优入门网站上线不是终点而是起点。保持网站健康运行需要一些日常维护。6.1 系统与WordPress更新系统更新定期比如每月登录服务器执行sudo apt update sudo apt upgrade -y来更新系统和软件包修复安全漏洞。WordPress核心、主题和插件更新这是安全的重中之重。大部分网站被黑都是因为使用了过时且有漏洞的插件或主题。务必在WordPress后台的“仪表盘”-“更新”页面及时安装所有可用更新。在更新前务必做好备份。6.2 数据库优化与评论管理WordPress使用久了数据库尤其是文章修订版、垃圾评论等会积累很多冗余数据影响性能。插件方案安装WP-Optimize或Advanced Database Cleaner这类插件可以定期自动清理修订版、草稿、垃圾评论、过期临时数据等。手动方案谨慎可以通过phpMyAdmin或命令行登录MySQL执行一些清理SQL语句但非专业人士不建议操作。对于评论如果开放了评论功能务必使用Akismet Anti-Spam插件WordPress官方出品有免费额度来过滤垃圾评论否则你的数据库很快会被塞满。6.3 备份你的终极保险没有备份所有工作都如履薄冰。备份需要遵循“3-2-1”原则至少3份副本用2种不同介质存储其中1份在异地。完整服务器镜像备份大多数云服务商如阿里云、腾讯云都提供“快照”功能。每周或重大变更前为你的服务器磁盘创建一个快照。这是最彻底的恢复方式。网站文件与数据库备份使用插件如UpdraftPlus或BackWPup。可以设置定时任务将网站根目录下的wp-content主题、插件、上传的文件和数据库导出文件自动备份到云存储如Dropbox、Google Drive、腾讯云COS等。我个人的策略是数据库每天备份文件每周备份保留最近4周的副本。6.4 基础性能调优思路一个慢的网站会赶走读者。除了选择靠谱的主机还可以做以下几点缓存插件这是提升WordPress速度性价比最高的手段。插件如WP Super Cache或W3 Total Cache可以为动态页面生成静态HTML文件极大减少数据库查询和PHP执行。对于个人博客WP Super Cache配置更简单。图片优化上传前用电脑上的工具如TinyPNG网站或插件如Smush压缩图片。巨大的图片是加载缓慢的元凶。使用CDN将静态文件图片、CSS、JS分发到全球各地的CDN节点用户可以从最近的节点获取显著提升加载速度。很多云服务商提供CDN服务也有一些免费/低价的CDN可选。主题与插件精简只安装必需的主题和插件。每个插件都可能增加数据库查询、引入额外的CSS/JS文件拖慢网站。定期检查并停用、删除不用的插件。走到这里你已经拥有了一个完全由自己掌控、可通过域名安全访问的WordPress博客。从选择服务器、配置环境、部署程序、绑定域名到开启HTTPS和安全加固这套流程覆盖了一个生产级网站从零到上线的主要环节。过程中遇到的每一个报错和问题都是你理解这套系统如何运作的机会。记住运维的核心不是记住所有命令而是知道当问题出现时应该去哪里查看日志/var/log/nginx/error.log和/var/log/php8.1-fpm.log是你的好朋友以及如何系统地排查。保持好奇心定期维护你的数字小家就会稳固而长久地运行下去。
返回列表