docker容器安装/迁移/备份wordpress,持续更新

2024年4月3日
Share

用docker 容器封装 php 环境,mysql 数据库,npm反向代理,还有主程序wordpress

过程中遇到的一些问题

因为要安装woocommerce插件,所有需要一些php插件支持

1,必需的模组 gd 未被安装或已被禁用

安装gd所需依赖包,libpng 开发包

Debian/Ubuntu:

~# sudo apt install libpng-dev 

CentOS/Red Hat:

~# yum install libpng-devel

安装gd模块,先安装zlib 库

sudo apt-get update
sudo apt-get install zlib1g-dev
~# docker-php-ext-install gd
# 进入容器
docker exec -it [容器名称或ID] bash

# 安装必需的包和 SOAP 扩展
apt-get update
apt-get install -y libxml2-dev
docker-php-ext-install soap

# 退出容器
exit

# 重启容器使更改生效
docker restart [容器名称或ID]

后面我采用了Dockerfile 预装来实现PHP扩展的统一安装,不需要每次单独安装

# 使用官方 WordPress 镜像作为基础
FROM wordpress:latest

# 安装 Redis 扩展所需的依赖项
RUN apt-get update && apt-get install -y \
    libpng-dev \
    libjpeg-dev \
    libfreetype6-dev \
    libxml2-dev \
    libzip-dev

# 安装所需的 PHP 扩展
RUN docker-php-ext-configure gd --with-freetype --with-jpeg \
&& docker-php-ext-install gd mysqli pdo pdo_mysql soap zip

# 安装 Redis 扩展
RUN pecl install redis \
&& docker-php-ext-enable redis

再使用docker-compose 里面调用dockerfile

version: '3.8'

services:
  wordpress:
    build:
      context: .
      dockerfile: Dockerfile
    container_name: wp1
    volumes:
      - ./html:/var/www/html
      - ./php.ini:/usr/local/etc/php/php.ini
    ports:
      - '8080:80'
    environment:
      WORDPRESS_DB_HOST: db
      WORDPRESS_DB_NAME: wp
      WORDPRESS_DB_USER: sggtong
      WORDPRESS_DB_PASSWORD: 7758258sggtong
    depends_on:
      - db
    networks:
      - web

  db:
    image: mysql:5.7
    container_name: mysql
    volumes:
      - ./mysql:/var/lib/mysql
    environment:
      MYSQL_ROOT_PASSWORD: 7758258sggtong
      MYSQL_DATABASE: wp
      MYSQL_USER: sggtong
      MYSQL_PASSWORD: 7758258sggtong
    ports:
      - '3306:3306'
    networks:
      - web

  nginx-proxy-manager:
    image: 'jc21/nginx-proxy-manager:latest'
    container_name: npm
    restart: unless-stopped
    volumes:
      - ./npm-data:/data
      - ./letsencrypt:/etc/letsencrypt
    ports:
      - '80:80'
      - '81:81'
      - '443:443'
    environment:
      DB_MYSQL_HOST: "db"
      DB_MYSQL_PORT: 3306
      DB_MYSQL_USER: "sggtong"
      DB_MYSQL_PASSWORD: "7758258sggtong"
      DB_MYSQL_NAME: "wp"
    depends_on:
      - db
    networks:
      - web

  redis:
    image: "redis:latest"
    ports:
      - "6379:6379"
    volumes:
      - "./redis-data:/data"
    networks:
      - web

networks:
  web:
    driver: bridge

安装完redis 服务端后,还需要在wp 后台添加 redis插件,另外在wp-config配置文件中加入如下代码,才可以正常使用

/* Add any custom values between this line and the "stop editing" line. */
define( 'DB_COLLATE', '' );
/** Redis Object Cache */
define('WP_REDIS_CLIENT', 'pecl');
define('WP_REDIS_SCHEME', 'tcp');
define('WP_REDIS_HOST', 'redis');
define('WP_REDIS_PORT', '端口');
define('WP_REDIS_DATABASE', '数据库');
define('WP_REDIS_PASSWORD', '密码');

有时候在项目的状态里面会看到这样的限制,这是PHP官方对文件上传,下载的大小做了限制

PHP Post Max SizePHP Time LimitPHP Max Input VarsPHP Upload Max Size

需要修改php.ini 文件,找到对应的字符串,修改成你需要的 值,或者拷贝一下代码替换

post_max_size = 64M
upload_max_filesize = 64M
memory_limit = 256M
max_execution_time = 300
max_input_vars = 10000

重启php所在docker 容器,刷新页面就可以了

查看php 容器内部对应的配置项

docker exec -it php php -i | grep 'post_max_size'

查看安装的php扩展

php -m

迁移打包

cd /home && tar -czvf wp1.tar.gz wp1/

迁移或还原

cd /home && tar xvzf wp1.tar.gz

趟过的坑总结

用https 访问,服务器面板-网络安全组一定要开放443端口

nginx proxy manger 可以使用docker name 加端口 映射,可以少开发几个外部的端口,保持安全