Ubuntu上安装WordPress

前提:

你拥有一台公网IP的服务器,你的需求是利用这台服务器部署网站。本文章主要讲Wordpress网站的部署过程、网站的相关优化及疑难杂症,如果你是第一次接触这方面的内容,可以先看前五节内容,把网站搭建起来。不要过早的优化,过早的优化是致命的,你的优化不仅可能导致你无法很好地实现需求,而且你对优化的预期的猜测有可能还是错的,导致实际上你除了把事情变复杂以外什么都没得到。


1、安装docker、docker-compose

1.1、安装 docker

sudo apt-get update
apt-get install ca-certificates curl gnupg lsb-release
curl -fsSL http://mirrors.aliyun.com/docker-ce/linux/ubuntu/gpg | sudo apt-key add - #安装证书
sudo add-apt-repository "deb [arch=amd64] http://mirrors.aliyun.com/docker-ce/linux/ubuntu $(lsb_release -cs) stable" #写入软件源信息
sudo apt-get install docker-ce docker-ce-cli containerd.io #安装
systemctl start docker #启动docker

1.2、安装 docker-compose

sudo apt-get install docker-compose-plugin

验证是否成功

docker compose version

2、创建WordPress项目目录及配置文件

mkdir wordpress #在你指定的地方创建WordPress项目目录
cd wordpress
mkdir db_data
mkdir wordpress_data
touch docker-compose.yml
vim docker-compose.yml 

docker-compose.yml文件中写入一下内容

version: "3.3"
    
services:
  db:
    image: mysql:latest
    volumes:
      - ./db_data:/var/lib/mysql
    restart: always
    environment:
      MYSQL_ROOT_PASSWORD: wordpress
      MYSQL_DATABASE: wordpress
      MYSQL_USER: wordpress
      MYSQL_PASSWORD: wordpress
    
  wordpress:
    depends_on:
      - db
    image: wordpress:latest
    volumes:
      - ./wordpress_data:/var/www/html
    ports:
      - "80:80"
      - "443:443"
    restart: always
    environment:
      WORDPRESS_DB_HOST: db
      WORDPRESS_DB_USER: wordpress
      WORDPRESS_DB_PASSWORD: wordpress
      WORDPRESS_DB_NAME: wordpress
volumes:
  db_data: {}
  wordpress_data: {}

3、一键启动wordpress项目

启动

docker-compose up -d

停止

docker-compose down

重启

docker-compose restart

4、查看正在运行的容器及镜像

查看正在运行的容器

docker ps

查看镜像

docker images

5、登录管理员界面

网页登录管理员页面设置管理员账号密码并安装WordPress

https://yourserverip/wp-admin

至此WordPress安装完成


6、安装SSL/TLS证书

6.1、为什么要安装证书

安全套接字层 (SSL) 是一种加密安全协议。它最初由 Netscape 于 1995 年开发,旨在确保 Internet 通信中的隐私、身份验证和数据完整性。SSL 是如今使用的现代 TLS 加密的前身。实施 SSL/TLS 的网站的 URL 中带有“HTTPS”,而不是“HTTP”。
简而言之,你没安装这个证书只能用“http”访问你的网站,不能用“https”访问,而且网站前面会出现“不安全”字眼,所以我建议安装。

6.2、下载证书

在你的服务器厂商管理页面上申请并下载证书,以腾讯服务器为例,访问SSL证书管理页面,下载Apache证书

6.3、安装证书

安装步骤也可以查看腾讯文档

6.3.1、加载Apache SSL模块

查看wordpress的docker容器ID,进入该容器

sudo docker exec -it 937faae55666 /bin/bash

在wordpress容器中输入a2enmod ssl

a2enmod ssl

第一次会加载,并且提示重启Apache,我们直接重启容器即可,也可以直接重启Apache

/etc/init.d/apache2 reload

6.3.2、绑定SSL证书

Apache 加载 SSL 模块后,会在 /etc/apache2/sites-available 下生成 default-ssl.conf 文件

vim /etc/apache2/sites-available/default-ssl.conf

该文件中有以下内容

SSLCertificateFile /etc/ssl/certs/ssl-cert-snakeoil.pem
SSLCertificateKeyFile /etc/ssl/private/ssl-cert-snakeoil.key
SSLCertificateChainFile /etc/ssl/certs/server-ca.crt #这个证书也建议部署,否则可能出现站点不安全的显示

上述三行配置就是证书的存放位置,我们只需要把第三方可信CA签发的证书相应的文件上传至对应位置即可。注意了,如果SSLCertificateChainFile证书没有安装,现代的浏览器都有证书自动下载的功能,但很多浏览器在安装后是使用系统内置的证书库,如果你缺失的那张CA证书,在系统的内置证书库中不存在的话,用户第一次访问网站时会显示如下情况

即使你的证书确实是可信的,但依旧会显示成不可信,只有等到浏览器自动把缺失的那张CA证书从网上下载下来之后,访问该网站才会显示成可信状态。可以查看更详细的文档

ssl-cert-snakeoil.pemserver-ca.crt:为证书,文件内容是这样

—–BEGIN CERTIFICATE—–
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
—–END CERTIFICATE—–

ssl-cert-snakeoil.key:为密钥,文件内容是这样

—–BEGIN PRIVATE KEY—–
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
—–END PRIVATE KEY—–

先把ssl-cert-snakeoil.pemserver-ca.crt和 ssl-cert-snakeoil.key 上传到服务器。然后直接用docker cp将文件复制进wordpress容器中

docker cp 服务器文件路径/ssl-cert-snakeoil.pem 容器名:/etc/ssl/certs
docker cp 服务器文件路径/server-ca.crt 容器名:/etc/ssl/certs/
docker cp 服务器文件路径/ssl-cert-snakeoil.key 容器名:/etc/ssl/private

6.3.3、链接配置文件

从 apache 的配置文件 apache2.conf 可以看到,apache 只会读取 /etc/apache2/sites-enabled 目录的配置文件,所以需要把 /etc/apache2/sites-available 下的 default-ssl.conf 文件链接到 /etc/apache2/sites-enabled 目录下。

ln -s /etc/apache2/sites-available/default-ssl.conf \
/etc/apache2/sites-enabled/default-ssl.conf

6.3.4、配置http请求强制跳转到https

编辑 /etc/apache2/sites-available/000-default.conf,在 <VirtualHost *:80> </VirtualHost> 标签中增加下面的配置

<Directory "/var/www/html"> 
    RewriteEngine   on
    RewriteBase /
    # FORCE HTTPS
    RewriteCond %{HTTPS} !=on
    RewriteRule ^/?(.*) https://%{SERVER_NAME}/$1 [R,L]
</Directory>

6.3.5、修改完成后重启容器

exit退出容器,然后进入docker-compose.yml配置文件所在的目录,管理员身份执行以下命令

docker-compose restart

6.3.6、配置wordpress访问地址

一定要保证 https 和 http 两种方式都能正常访问网站,才能改这个配置,否则可能导致网站无法访问。(如果这种情况已经发生,解决方案见【7.1】

进入wordpress后台中,【设置】-【常规】中配置WordPress 地址(URL)站点地址(URL)两个地址的 http协议 修改为 https协议 并保存。


7、网站优化及疑难杂症

7.1、WordPress地址(URL)错误

登陆mysql

sudo docker exec -it d6401cc9265d /bin/bash #我用的docker容器运行的mysql,所以要先进入容器
mysql -u wordpress -p #输入密码登录

选中wordpress的数据库

USE wordpress;

查看wp_options表单

select * from wp_options limit 2;

更改option_values

#将下列your_wordpress_url修改为你的网站
UPDATE wp_options SET option_value="your_wordpress_url" WHERE option_name="siteurl";
UPDATE wp_options SET option_value="your_wordpress_url" WHERE option_name="home";

7.2、WordPress上传媒体限制

7.2.1、上传文件大小限制

方法1:修改WordPress根目录下的.htaccess文件,加入以下代码:
不推荐这种方法,每次修改配置重启服务就失效了,又得重新加入

php_value upload_max_filesize 200M
php_value post_max_size 200M
php_value max_execution_time 300
php_value max_input_time 300

方法2:通过插件进行设置

安装 Big File Uploads 插件,安装后设置下面有个大文件上传的选项

修改自己想要的大小即可

7.2.2、上传文件类型限制

安装 WP Extra File Types 插件,安装后在设置里有扩展文件类型的选项。
另外,WordPress 升级 4.4 之后,推出了 srcset 这个图片多屏自适应功能,默认会生成至少四个版本的缩略图,而这个插件禁用了WordPress裁剪功能(你无法修改这一设定),WordPress将不再自动生成缩略图文件,这从某种角度上来讲帮你节省了大量内存空间

选择这个选项,将第二个勾上

CTRL+F搜索你想增加的文件类型,将其勾上

如果这里面没有你想要的文件类型,那么鼠标滑到最底部,增加文件类型

最后保存更改

7.2.3、媒体库缺少文件管理

媒体库没有分类管理的功能,文件较多时,媒体库堆积了各种各样的文件,非常难管理。

可以安装插件 Filester – File Manager Pro 解决这个问题,它提供额外的文件管理而不直接使用媒体库,这个插件还有个好处:直接媒体库上传资源会被Wordpress或者其他的插件优化,资源要么被裁剪要么生成了一堆缩略图,而在这个插件的管理界面上传的资源是原生的,如果你希望你的资源是原生的(比如你是个摄影师对图像画质要求很高),那么这个插件很适合你。

这里我还推荐一个插件FileBird Lite,这个插件直接管理Wordpress的媒体库,它不改变目录结构,只是对媒体库里面的资源进行了分类,你可以很方便的管理你媒体库里面的资源,我建议这个插件和上面的插件一起使用,主要使用这个插件和媒体库上传及管理资源,特殊需求使用上面插件的文件管理系统。

7.3、网站在线评论留言不能接收邮件提醒信息

wordpress接收评论邮件提醒是需要主机空间支持php的mail()函数的,但是国内很多主机都是不支持这个mail()函数的,那么就不能接收邮件,下面是解决方案:

后台设置,如果主机空间支持mail()函数,只需要设置这里就可以了

如果主机空间不支持mail()函数,那么就需要安装Configure SMTP插件

安装成功后左侧多一个选项,可以进去设置

登录QQ邮箱在【设置】-【账号】下面开启POP3/SMTP服务,操作很简单,我已经开启了就不演示怎么打开了,同样的你也可以在这里查看POP3/SMTP授权码

然后我们在这个界面点击“发送电子邮件”进行测试,如果你能收到邮件,那就设置成功了,试试在文章下面评论看看能不能收到邮件吧 (*^▽^*)

7.4、网站页面加载缓慢

这是一个优化问题,我提出几种方案供大家研究。如果想全方面检测网站(包括性能、无障碍、SEO等),可以使用PageSpeed Insights工具(国内可能无法访问这个工具)。

7.4.1、生成静态缓存页面

当页面开始渲染的时候,php 和 mysql 程序会被执行。因此,服务器需要 RAM 和 CPU。
如果很多人来访问网站,那么服务器会用掉大量的 RAM 和 CPU 资源,网站就会变慢。正因为如此,你需要建立一个缓存程序,避免服务器反复渲染页面。缓存程序会生成一个静态的 HTML 文件,并保存到服务器。当用户访问网站时就可以直接拿到 HTML 文件。
可以安装WP Fastest Cache来生成缓存文件(启用后可以感受到PC端页面加载速度明显提高),这个插件使用起来非常简单,做如下配置即可

除了这个插件外,还推荐一个功能很强大的插件WP Super Cache,和上面的插件任选其一,该插件可以从您的动态WordPress博客中生成静态html文件。 生成html文件后,您的WEB服务器将直接使用html文件来提供服务,而无需处理相对较臃肿和昂贵的WordPress PHP脚本。

以上就是这个插件的配置信息,根据自己的情况修改,然后你可以在这验证缓存是否应用成功

你也可以在你的网站页面右键查看页面源代码,滑到最底部,有以下内容表示缓存应用成功

这里可以看已缓存的页面

注意了,如果安装了检测性能的插件Jetpack,每次修改css之后要点一下这个按钮,否则css修改没有更新静态页面,修改不会生效

7.4.2、使用更小的资源

我建议不要使用动态背景,不要使用原生的png、jpg等格式图片,使用压缩后的图片或相对更小的webp格式图片。打开浏览器InPrivate模式访问你的网站体验一下别人访问你的网站时是什么样子。

推荐Smush插件,这个插件不仅能压缩媒体库里的文件,还能压缩自己选择的目录下所有图片文件,但是它生成webp格式及处理5M以上资源需要会员

还推荐一个更加强大的插件EWWW Image Optimizer,这个插件除了压缩原始图像外还生成一个webp格式图像,并且还有很灵活的设置,我演示基本使用方法,其他的你慢慢研究

做如下设置后保存

保存成功后,页面右下角的红色PNG图片会变成成绿色WebP图片,说明设置成功。

然后到下面这个界面,就可以开始扫描并压缩转换媒体库里的资源,如果你的图像已经优化过了,你可以选中右边的WebP only选项。(注意了:你原始的资源不会被保留,如果需要原始数据记得备份

7.4.3、使用CDN加速

我这个网站服务器在国外,使用国内CDN节点加速需要备案后的域名,而国外服务器无法备案,所以我没有使用CDN。如果你想使用CDN,我建议使用又拍云,加入又拍云联盟(底部添加又拍云LOGO及链接)即可享受免费CDN加速,后面我使用国内服务器了再弄。

7.5、Wordpress安装插件导致致命错误

这种情况你将会失去wordpress管理员页面的部分功能或全部功能,导致你无法访问面板上【插件】选项卸载出问题的插件,不要慌,ssh远程连接服务器,在“Wordpress根目录/wp-content/plugins”路径下找到出问题插件的文件夹,直接删除它即可。

7.6、禁止Wordpress生成缩略图

WordPress默认会生成至少3个缩略图,如果你安装了优化插件,对每个缩略图也会优化生成对应的优化图像,这既浪费了存储空间也浪费CPU资源,除非你真的很需要这些缩略图,否则禁用它

将下面这些值全设为0

由于WordPress预置这些参数并直接在安装时就写入数据库,只进行上面的操作,WordPress仍会创建一个固定宽度为768的文件。开启WordPress上帝模式(全局选项设置),通过https://你的域名/wp-admin/options.php访问即可进入了WordPress的全部设置页面。在此页面找到medium_large_size_w选项,将其设置为 0 然后保存

谢谢你长得这么好看还能支持我~(〃'▽'〃)

评论

  1. Windows Edge 112.0.1722.39
    1 年前
    2023-4-16 0:48:52

    docker搬迁是真滴方便

    • 博主
      Echo
      Windows Edge 112.0.1722.46
      1 年前
      2023-4-16 0:53:14

      哈哈哈🍉 是的捏,我主要是怕部署的服务多了污染系统环境,各服务之间相互干扰,所以把它们封装起来

      • Echo
        robin
        Android Chrome 104.0.5112.97
        1 年前
        2023-4-16 0:59:48

        搜嘎,哈哈,这样确实可以。

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
w(゚Д゚)w
(ノへ ̄、)
(๑•̀ㅂ•́)و✧
o(* ̄3 ̄)o
(* ̄3 ̄)╭
(づ ̄3 ̄)づ╭❤~
(*  ̄3)(ε ̄ *)
( ̄ε(# ̄)☆╰╮o( ̄皿 ̄///)
Σ(°△°|||)︴
凸(艹皿艹 )
(u‿ฺu✿ฺ)
o(*≧▽≦)ツ┏━┓
╰(*°▽°*)╯
o( ̄ヘ ̄o#)
~~( ﹁ ﹁ ) ~~~
(ーー゛)
(ー`′ー)
o(一︿一+)o
(o_ _)ノ
(ノへ ̄、)
(ˉ▽ ̄~) 切~~
(@_@;)
( =•ω•= )m
(✿◡‿◡)
┭┮﹏┭┮
ヾ( ̄▽ ̄)Bye~Bye~
Ψ( ̄∀ ̄)Ψ
✧(≖ ◡ ≖✿)
━( ̄ー ̄*|||━━
ヽ(*。>Д<)o゜
(;′⌒`)
X﹏X
(′▽`ʃ♡ƪ)
♪(^∇^*)
φ(≧ω≦*)♪
o(* ̄︶ ̄*)o
o(^▽^)o
(*^-^*)
n(*≧▽≦*)n
Ψ( ̄∀ ̄)Ψ
o(〃'▽'〃)o
(〃'▽'〃)
╰(*°▽°*)╯
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
颜文字
Emoji
小恐龙
花!
表情包
上一篇
下一篇