Ubuntu搭建docker部署wordpress博客

前期准备:

1、服务器一台,最低配置1核1G(推荐1核2G);

2、已经解析的域名一个;

3、系统要求:

需要以下Ubuntu64位版本之一:
Ubuntu Lunar 23.04
Ubuntu Kinetic 22.10
Ubuntu Jammy 22.04(LTS)
Ubuntu Focal 20.04(LTS)
Docker Engine for Ubuntu兼容x86_64(或amd64),armhf,arm64, S390X和PPC64LE(PPC64EL)体系结构。

4、需要安装Docker Engine、Docker-compose、Nginx Proxy Manager;

官方文档
如果您的服务器是租赁国内的,必须要走ICP备案,且搭建的网站也必须在公安局进行备案通过后才能对外开放

开始安装:

分别运行下面两条命令检查服务器(本文以Ubuntu为例)是否满足官方要求:

# 查看系统内核
arch
# 查看系统信息
lsb_release -a

docker安装方式:使用apt命令远程下载docker Engine镜像安装

一、更新索引并设置存储库

#更新索引库
sudo apt-get update

#允许apt通过HTTPS的的方式安装存储库
sudo apt-get install ca-certificates curl gnupg

二、添加密钥

#用超级用户权限,创建一个权限为755的/etc/apt/keyrings目录
sudo install -m 0755 -d /etc/apt/keyrings

#从Docker下载它的GPG公钥,并存放到系统的密钥托管目录 /etc/apt/keyrings/ 下
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg

#使用超级用户权限,给/etc/apt/keyrings/docker.gpg这个文件添加所有用户的读权限
sudo chmod a+r /etc/apt/keyrings/docker.gpg

三、使用以下命令设置存储库

#使用root权限,在/etc/apt/sources.list.d/docker.list文件中写入一个Docker的APT源定义。以便系统的源列表中添加了Docker的软件仓库。
echo \
  "deb [arch="$(dpkg --print-architecture)" signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu \
  "$(. /etc/os-release && echo "$VERSION_CODENAME")" stable" | \
  sudo tee /etc/apt/sources.list.d/docker.list > /dev/null

四、安装Docker

#再次更新索引包
sudo apt-get update
#安装Docker Engine、containerd和Docker Compose插件的最新版本
sudo apt-get install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
#安装Docker Compose组件
sudo apt install docker-compose
#设置docker开机自启
systemctl enable docker

最后分别用docker -vdocker-compose -v检查引擎和组件的版本是否能显示出来,如果有相应的版本号,说明已经安装成功。

下面开始用docker搭建两个容器,分别用做NPM(Nginx Proxy Manager)和wordpress的运行环境

五、安装 NPM(Nginx Proxy Manager)

#切换到root用户
sudo -i

#在root目录下递归的创建一些文件夹,如果父目录不存在则先创建出来
mkdir -p /root/data/docker_workspace/npm

#进入到npm目录下
cd /root/data/docker_workspace/npm

#创建一个docker-compose.yml配置文件
touch docker-compose.yml

#编辑该文件
vim docker-compose.yml

将下面代码复制到docker-compose.yml中保存即可

version: '3.7'
services:
  app:
    image: 'jc21/nginx-proxy-manager:latest'
    restart: unless-stopped
    ports:
      - '80:80'  # 冒号左边可以改成自己服务器未被占用的端口
      - '81:81'  # 冒号左边可以改成自己服务器未被占用的端口
      - '443:443' # 冒号左边可以改成自己服务器未被占用的端口
    volumes:
      - ./data:/data # 冒号左边可以改路径,现在是表示把数据存放在在当前文件夹下的 data 文件夹中
      - ./letsencrypt:/etc/letsencrypt  # 冒号左边可以改路径,现在是表示把数据存放在在当前文件夹下的 letsencrypt 文件夹中

查看端口是否被占用(以上面 81 为例):

#查看 81 端口是否被占用
lsof -i:81  

如果命令执行后什么也没出现,表示端口未被占用,否则请更改为别的端口号(但不能自定义为80和443这两个端口);

如果出现-bash: lsof: command not found字样,说明你服务器上lsof工具没有安装,请用apt install lsof命令安装

确保当前在/root/data/docker_work space/npm目录下,否则请运行:

#进入到/root/data/docker_workspace/npm目录
cd /root/data/docker_workspace/npm  

#启动该目录中的NPM项目服务,并在后台运行
docker-compose up -d 

打开浏览器,地址栏里以http://服务器ip:81的方式访问,默认用户名和密码如下:

#用户名
admin@example.com
#密码
changeme

六、安装wordpress

#在root目录下递归的创建一些文件夹,如果父目录不存在则先创建出来
mkdir -p /root/data/docker_workspace/wordpress

#进入到wordpress目录下
cd /root/data/docker_workspace/wordpress

#创建一个docker-compose.yml配置文件
touch docker-compose.yml

#编辑该文件
vim docker-compose.yml

将下面的代码复制到docker-compose.yml中保存即可,该配置文件是在wordpress目录中安装博客程序本体和所依赖的mysql数据库

version: '3.7'

services:

  wordpress:
    image: wordpress
    restart: always
    ports:
      - 8080:80   #8080可以更改为自己想要的端口号
    environment:
      WORDPRESS_DB_HOST: db
      WORDPRESS_DB_USER: wordpress
      WORDPRESS_DB_PASSWORD: wordpress
      WORDPRESS_DB_NAME: wordpress_pd
    volumes:
      - /root/data/docker_workspace/wordpress/data:/var/www/html

  db:
    image: mysql:5.7
    restart: always
    environment:
      MYSQL_DATABASE: wordpress
      MYSQL_USER: wordpress
      MYSQL_PASSWORD: wordpress_pd
      MYSQL_RANDOM_ROOT_PASSWORD: '1'
    volumes:
      - /root/data/docker_workspace/wordpress/db:/var/lib/mysql

#volumes:
#  wordpress:
#  db:

七、启动运行wordpress

#启动该目录中的wordpress项目服务,并在后台运行
docker-compose up -d 

打开浏览器以上面为例,地址栏中http://服务器ip:8080访问,会弹出安装界面,选中博客的语言界面安装好后,会提示设置诸如 站点名称、用户名、密码、邮箱 等信息。

最后进入NPM管理界面,将解析好的域名和服务器ip地址进行绑定,申请证书成功后就能用自定义的域名访问了。