大家好!我是照月白lz,一名一线码农,闲来待业在家,今天来写点“老掉牙”的东西 — WordPress
,就当做篇学习笔记吧。
记得之前在开发群里,某天有人求助了一下WordPress相关的问题,当时回答的人都说不会,我当时潜水时还在想着:"WordPress?这么老掉牙的东西还有人在用?开发......",自行脑补(¬_¬)
或许“好风凭借力,送我上青天”的本意是积极向上的,但也能从另外一个侧面完美的诠释了时代的眼泪。情况好时,认知里好像都在争论着XX技术怎么样怎么样,到最后码农其实也和这些并没有什么两样,真讽刺。所以闲下来后一直在学习、思考,努力提升自己的认知、方法,与诸君共勉。
这篇笔记源于宁皓大佬的:《WordPress:一小时搭建商业作品展示网站》,讲的非常详细,推荐大家去学习。对他的一句话感觉触动很深,在此记录一下:“不同的实现方法的区别就在于会给你不同的感受,解决问题的思维方式也会有不同。 比如用WordPress来实现,当遇到一个需求的时候,第一感觉就是找一个插件来解决。而基于应用框架来开发,会有不同的思维方式。能快速实现就是王道,无论用什么方法实现,WordPress也好,低代码也罢,或者基于框架从头开发,都没那么重要。我们发现一个能用软件应用解决的问题,然后找方法快速实现,验证是否能解决这个问题,用户是否在乎?”
闲话少叙,正式开始吧
运行 WordPress 通常需要安装LAMP(Linux、Apache、MySQL 和 PHP)或LEMP(Linux、Nginx、MySQL 和 PHP)堆栈,要做到这些可能非常耗时,同时也要付出较多的学习成本。本篇我们通过使用Docker来简化设置和安装 WordPress 的过程。本篇的容器将包括 MySQL 数据库和 WordPress 本身,比较简单;如果想进一步拓展,可以在容器中再加入Nginx Web 能力,有动手能力的同学可以研究一下。
安装环境
首先,需要在本地开发环境上安装docker环境和dockerDesktop工具,在需要部署的云服务器上安装docker环境和Nginx。
因为,你需要先在本地环境编写代码、docker运行、初始化配置,然后将项目代码推送到云服务器, 通过docker运行,最后为容器的运行端口配置nigix。这里的nginx,我个人对Nginx Proxy Manager使用的比较熟练,所有使用了这个。大家可以根据自己的需求自行取舍替换。以下是工具和环境的官方文档:
编写Docker Compose定义服务
首先,新建一个项目文件夹,如:my-wordpress
;在项目文件夹my-wordpress
下创建文件:docker-compose.yml
接着,我们开始编辑docker-compose.yml
文件,先定义wordpress
服务,如下代码:
version: "3.3"
services:
wordpress:
image: wordpress:latest
restart: always
# 将主机的8081端口映射到容器的80端口,你可以将8081改成别的端口,但需要注意其它地方的配置
ports:
- 8081:80
# 定义环境变量,数据库用户名、密码...
environment:
WORDPRESS_DB_HOST: db
WORDPRESS_DB_USER: "wordpress"
WORDPRESS_DB_PASSWORD: "wordpress_pass"
WORDPRESS_DB_NAME: "wordpress"
# 定义数据卷,映射到当前项目目录的/app/wp-content文件夹下
# 后期方便我们拓展自定义一些wordpress配置
volumes:
- ./app/wp-content:/var/www/html/wp-content/
再定义db
数据库服务,如下代码:
db:
image: mysql:5.7
restart: always
environment:
MYSQL_DATABASE: "wordpress"
MYSQL_USER: "wordpress"
MYSQL_PASSWORD: "wordpress_pass"
MYSQL_ROOT_PASSWORD: "wordpress_root_pass"
# 定义数据卷,映射到当前项目目录的/app/db文件夹下
# 后期方便我们对数据进行迁移操作
volumes:
- ./app/db:/var/lib/mysql
然后,最重要的一步,我们需要定义wordpress
服务依赖于db服务
:
# ...
services:
wordpress:
# ...
# 注意:这里写db,是因为数据库服务名定义的是:db ↓↓↓↓
depends_on:
- db
ports:
# ...
最后,我们还需要修改环境变量值
,为db数据库设置密码和账号
:你可以将配置中的“wordpress”替换为你的用户名,将"wordpress_pass"、“wordpress_pass”分别替换为你的密码, 这些配置仅在容器内部使用。注意:wordpress和db服务的环境变量值需要一一对应的上,否则容器会报错,从而导致数据库连接失败,从而WordPress也启动不了,我在这里遇到过坑。
在linux、macos系统中,你可以使用命令openssl rand -base64 32
来生成随机字符串,摘取复制其中的片段作为密码。
至此,初始化完整的docker-compose.yml
内容如下:
version: "3"
services:
wordpress:
image: wordpress:latest
restart: always
depends_on:
- db
ports:
- 8081:80
environment:
WORDPRESS_DB_HOST: db
WORDPRESS_DB_USER: "wordpress"
WORDPRESS_DB_PASSWORD: "wordpress_pass"
WORDPRESS_DB_NAME: "wordpress"
volumes:
- ./app/wp-content:/var/www/html/wp-content/
- ./app/config/php-uploads.ini:/usr/local/etc/php/conf.d/uploads.ini
db:
image: mysql:5.7
restart: always
environment:
MYSQL_DATABASE: "wordpress"
MYSQL_USER: "wordpress"
MYSQL_PASSWORD: "wordpress_pass"
MYSQL_ROOT_PASSWORD: "wordpress_root_pass"
volumes:
- ./app/db:/var/lib/mysql
在项目文件夹下,终端使用命令docker compose up -d
来启动容器;首次会先下载image镜像,可能稍慢,镜像下载完成后才能运行容器,这些都是docker自动完成的。
通过页面完成安装
使用docker ps
命令或者Docker Desktop工具检查容器运行状态,查看容器日志没有报错后,浏览器打开http://localhost:8081/
,页面会自动引导你选择语言、创建站点名称、管理员账号密码,如下:
安装完成后,使用你设置的用户名密码登录后,即可进入仪表盘页面:
至此,WordPress项目的基础搭建工作已经完成,你可以愉快的在本地玩耍了
配置媒体最大上传限制
话说平常买东西都讲究一个“便宜、量大、管饱”,那么WordPress的默认配置:媒体文件上传大小限制2M
,如何能够满足我们的需求,试想一下我们编辑页面用到的高清图、视频文件体积一般都得超过2M吧?小水管是万万不够用的,大腚得配大裤衩(¬‿¬)
首先,停止当前容器:docker compose down
我们需要在项目 /app
目录下新建文件夹: /config
,在config文件夹下创建:php-uploads.ini
文件。
编辑php-uploads.ini
文件,写入配置并保存:
file-uploads = On
upload_max_filesize = 200M
post_max_size = 200M
max_execution_time = 600
然后,在项目根目录下的docker-compose.yml
文件中新增config数据卷配置:
# ...
services:
wordpress:
# ...
volumes:
- ./app/wp-content:/var/www/html/wp-content/
# 新增上传配置的数据卷 ↓↓↓↓
- ./app/config/php-uploads.ini:/usr/local/etc/php/conf.d/uploads.ini
# ...
最后重新启动docker容器:docker compose up -d
,此时媒体的最大上传大小限制就改为了200M
部署到云服务器
部署到云服务器,就是把本地项目代码扔到线上服务器的某个文件夹,然后使用docker跑起来?确实是这个道理,而更优雅方便的管理方式是:创建一个代码仓库,把本地代码推到仓库,然后云端服务器pull代码,然后再通过云端的docker环境把项目跑起来。
细说起这些运维相关的技术就老长老长了,互联网资源很丰富,这里偷懒(。-ω-)zzz,就不详细描述了。你的云端服务器需要满足以下条件:
- docker 环境
- git 环境
- nginx 环境
- 一个解析到当前云服务器的域名,如:
xxx.com
- 将项目代码拉取到云服务器
再唠一下,域名的ssl证书其实也可以不需要, 但是http协议网站在处于4202年的浏览器下还是有一些些限制的。而且云服务厂商都提供了免费的证书,就当学习一些新知识了。最新的腾讯云免费证书的有效期好像由12个月缩短成3个月了( ̄へ ̄)
然后,在项目文件夹下执行命令:docker compose up -d
,启动WordPress容器,检查容器状态、日志。
最后呢,就是设置nginx代理了,代理设置完成后你就可以通过域名访问WordPress站点然后设置站点信息了(≧∇≦)/
总结
本篇笔记旨在记录如何快速的搭建一个WordPress站点, 也许在后续场景用到时,通过查看本篇笔记能够快速搭建一个成品网站。可能是我的wordpress镜像版本是最新的,又或者使用的云服务器操作系统是ubuntu?我并没有遇到过像宁皓大佬视频里的设置云服务器wp-content文件夹的权限
问题,我的媒体文件直接就上传创建成功了。再次感谢大佬的视频,有很详实的搭建过程步骤和主题的用法,零基础小白也能轻松上手!
点击媒体文件上传,wp-content文件夹的权限问题报错如下:
其它资源
WordPress:一小时搭建商业作品展示网站
彻底搞懂反向代理神器Nginx Proxy Manager
喵容网-WordPress主题
本篇项目源码