用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 Size,PHP Time Limit,PHP Max Input Vars,PHP 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 加端口 映射,可以少开发几个外部的端口,保持安全
文章评论