Ubuntu上安装WordPress

Ubuntu上安装WordPress

在数字化时代,构建专业级网站已成为个人品牌塑造与企业发展的刚需。WordPress 作为全球最流行的 CMS(内容管理系统),以其强大的扩展性和易用性,支撑着超过 40% 的互联网网站。而 Ubuntu 作为最受欢迎的 Linux 发行版之一,凭借开源生态、稳定性和社区支持,为 Web 服务提供了理想的运行环境。
本文将为您详细演示如何在 Ubuntu 24.04 LTS 系统上高效部署 WordPress。我们将从环境准备开始,逐步完成 Nginx/Apache 服务器配置、WordPress部署,并通过 SSL 证书实现加密。无论您是开发者、博主还是企业 IT 人员,通过本文的分步指南,均可在 15 分钟内完成从系统安装到网站上线的全流程操作。

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
sudo apt-get install docker-compose-plugin

验证是否成功

docker compose version

1.3、配置 docker镜像源文件

 vi /etc/docker/daemon.json

在daemon.json文件中写入以下内容

{
"registry-mirrors": [
    "https://docker.m.daocloud.io/",
    "https://huecker.io/",
    "https://dockerhub.timeweb.cloud",
    "https://noohub.ru/",
    "https://dockerproxy.com",
    "https://docker.mirrors.ustc.edu.cn",
    "https://docker.nju.edu.cn",
    "https://xx4bwyg2.mirror.aliyuncs.com",
    "http://f1361db2.m.daocloud.io",
    "https://registry.docker-cn.com",
    "http://hub-mirror.c.163.com"
  ]
}

然后重启docker

systemctl daemon-reload 
systemctl restart docker

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.8"

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

3、一键启动wordpress项目

执行下面命令以后台模式启动服务

docker-compose up -d

列举常用的docker-compose命令

docker-compose start # 启动已停止的服务容器
docker-compose restart # 重启服务容器
docker-compose stop # 停止容器运行
docker-compose down # 停掉容器然后删除掉

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

查看正在运行的容器

docker ps

查看镜像

docker images

5、登录管理员界面

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

https://yourserverip/wp-admin

6、安装SSL/TLS证书

6.1、为什么要安装证书

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

6.2、下载证书

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

图片[1]-Ubuntu上安装WordPress-阿尔法欧欧

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.pemSSLCertificateKeyFile /etc/ssl/private/ssl-cert-snakeoil.key

上述两行配置就是证书的存放位置,我们只需要把第三方可信CA签发的证书相应的文件上传至对应位置即可。

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

-----BEGIN CERTIFICATE-----
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
-----END CERTIFICATE-----

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

-----BEGIN PRIVATE KEY-----
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
-----END PRIVATE KEY-----

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

docker cp 服务器文件路径/ssl-cert-snakeoil.pem 容器名:/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>

如果上述方法不成功,则在文件.htaccess中增加下面内容,添加在#END WordPress 之后并保存即可

RewriteEngine On
RewriteCond %{SERVER_PORT} !^443$
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]

6.3.5、修改完成后重启容器

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

docker-compose restart

6.3.6、配置wordpress访问地址

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

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

图片[2]-Ubuntu上安装WordPress-阿尔法欧欧

7、脚本

上述的一些操作可以写成脚本方便执行,为什么没有直接给出脚本,因为需要你手动操作一边理解原理,以后出现什么故障也能轻松解决,另外如果你的SSL证书是腾讯云平台申请的免费证书,SSL证书有效期只有90天,那90天后证书过期需要重新配置证书,这是一个很麻烦的操作,要经常配置证书,所以需要脚本一键配置SSL证书,这也是脚本存在的意义

在wordpress目录下新建两个文件:change_htaccess.shssl.sh

change_htaccess.sh主要功能是http请求强制跳转到https设置上传文件大小限制开启防盗链,文件内容如下

#!/bin/bash


# 要添加的配置内容
search_word='# END WordPress'
add_text='# http请求强制跳转到https
RewriteEngine On
RewriteCond %{SERVER_PORT} !^443$
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]

# 上传文件大小限制
php_value upload_max_filesize 200M
php_value post_max_size 200M
php_value max_execution_time 300
php_value max_input_time 300

# 开启防盗链
RewriteEngine on
RewriteCond %{HTTP_REFERER} ^$
RewriteCond %{HTTP_REFERER} !^http(s)?://(www\\.)?alphaoo.com [NC]
RewriteCond %{HTTP_REFERER} !^http(s)?://(www\\.)?google.com [NC]
RewriteCond %{HTTP_REFERER} !^http(s)?://(www\\.)?bing.com [NC]
RewriteCond %{HTTP_REFERER} !^http(s)?://(www\\.)?baidu.com [NC]
RewriteRule \\.(jpg|jpeg|png|gif|bmp|webp|svg|pdf|mp3|mp4|lrc|flv|avi|css|js|html|json|zip|tar|gz)$ - [F]'

file="./wordpress_data/.htaccess"

# 检查文件是否存在
if [ ! -f "$file" ]; then
    echo "错误:文件 $file 不存在。"
    exit 1
fi

# 检查文件是否可写
if [ ! -w "$file" ]; then
    echo "错误:文件 $file 不可写。"
    exit 1
fi

# 处理多行内容,添加缩进和转义换行符
escaped_add_text=$(echo "$add_text" | sed 's/$/\\/;$s/\\$//')


# 删除字段后面的内容
if ! sudo sed -i "/$search_word/{q}" "$file"; then
    echo "错误:删除字段后面内容的操作失败。"
    exit 1
fi

# 在指定字段后添加内容
if ! sudo sed -i "/$search_word/a\\$escaped_add_text" "$file"; then
    echo "错误:添加内容的操作失败。"
    exit 1
fi

# 检查修改是否成功
echo "检查修改后的文件内容..."
if ! sudo grep -A 20 "$search_word" "$file"; then
    echo "错误:检查修改内容时未找到匹配结果。"
    exit 1
fi

echo "修改成功。"

ssl.sh主要功能是配置SSL证书,文件中file_keyfile_pem是你证书在本地的路径,证书可以放在你的oss对象存储或者本地或者有直链的网盘中,然后脚本中下载链接替换成你证书的直链,每次配置证书,只需要在SSL申请商申请证书->下载证书>将证书上传到网盘(oss、本地)->服务器中执行该脚本即可,脚本文件内容如下

#!/bin/bash
wordpressDocker=$(docker ps|grep "wordpress:latest")
wordpressDockerName="${wordpressDocker##* }"

#============下载并安装SSL证书【开始】===================
file_key="yourpath/ssl-cert-snakeoil.key"
file_pem="yourpath/ssl-cert-snakeoil.pem"
if [ ! -f $file_key ] || [ ! -f $file_pem ]; then
  wget -O ./ssl-cert-snakeoil.key superying.com/SL%E8%AF%81%E4%B9%A6/alphaoo.com.key?sign=-pDVvcagjhkgkxhYkdfpCCxlqMghjksQhjk=:0
  wget -O ./ssl-cert-snakeoil.pem superying.com/SL%E8%AF%81%E4%B9%A6/alphaoo.com.crt?sign=-gXfkjfdQ0HvrPykWqupdr8GFDhjkgk=:0
fi
docker cp ./ssl-cert-snakeoil.pem ${wordpressDockerName}:/etc/ssl/certs
docker cp ./ssl-cert-snakeoil.key ${wordpressDockerName}:/etc/ssl/private

rm ./ssl-cert-snakeoil.key ./ssl-cert-snakeoil.pem

#WordPress容器执行SSL初始配置
wordpressDockerID=$(docker ps|grep "wordpress:latest"| cut -d ' ' -f 1)
sudo docker exec ${wordpressDockerID} /bin/bash -c 'a2enmod ssl && /etc/init.d/apache2 reload && ln -s /etc/apache2/sites-available/default-ssl.conf /etc/apache2/sites-enabled/default-ssl.conf'
#============下载并安装SSL证书【结束】===================

8、疑难杂症

8.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";

8.2、WordPress上传媒体限制

8.2.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

8.2.2、上传文件类型限制

媒体库中上传文件类型默认是有限制的,./wordpress/wordpress_data/wp-config.php文件中添加下面代码即可取消文件类型限制

define('ALLOW_UNFILTERED_UPLOADS', true);
图片[3]-Ubuntu上安装WordPress-阿尔法欧欧

8.3、WordPress配置多域名访问

如果你有多个域名都想同时访问同一个网站,则可以进行以下操作,在wp站点根目录找到 wp-config.php 文件打开,在define( 'WP_DEBUG', !!getenv_docker('WORDPRESS_DEBUG', '') );下面另起一行,添加以下代码

/*============修改wordpress的绝对路径为相对路径,实现多域名访问【开始】=========*/
//启用多域名支持 true 开启 false 关闭
if (true) {
// 判断是否https站点访问
$http_prefix = (!empty($_SERVER['HTTPS']) && strtolower($_SERVER['HTTPS']) !== 'off') ? 'https://' : 'http://';
//多域名支持
define('WP_SITEURL', $http_prefix . $_SERVER['HTTP_HOST']);
define('WP_HOME', $http_prefix . $_SERVER['HTTP_HOST']);
//媒体路径使用相对路径 如果使用第三方云储存 将下面这段附件路径地址注释即可
define('WP_CONTENT_URL', '/wp-content');
}
/*============修改wordpress的绝对路径为相对路径,实现多域名访问【结束】=========*/
© 版权声明
THE END
喜欢就支持一下吧
点赞1赞赏 分享
评论 抢沙发

请登录后发表评论

    暂无评论内容