ㅤㅤ在使用Docker部署WordPress时,会出现几个需要解决的问题,在此记录一下,以免太久以后需要重新部署却忘了办法。
一、新建Mysql数据库,记住数据库信息,在第二步要用
二、新建一个docker-compose.yaml文件
下方5046
可以自行修改为宿主机启动服务的端口号,volumes
也可以修改冒号前的路径为挂载到的本机路径
version: "3.9"
services:
wordpress:
image: wordpress:latest
volumes:
- /home/nginxWebUI/alist/WWW/blog:/var/www/html
ports:
- "5046:80"
restart: always
environment:
WORDPRESS_DB_HOST: 数据库地址和端口号
WORDPRESS_DB_USER: 数据库用户名
WORDPRESS_DB_NAME: 数据库名
WORDPRESS_DB_PASSWORD: 数据库密码
三、一行命令启动WordPress
docker-compose up -d
问题出现:
1.导入数据时,最大上传大小限制2MB。
解决办法:直接改之前启动时挂载的到的宿主机目录下的 .hcatass
文件,添加以下内容即可,大小根据需要自己更改:
php_value upload_max_filesize 128M
php_value post_max_size 128M
php_value memory_limit 256M
php_value max_execution_time 300
php_value max_input_time 300
2.首次启动并且在设置中修改了域名后,无法访问站点
解决办法:在外部连接数据库,新建sql文件,旧字符串填入WordPress的http地址,新字符串填入反代后的地址,直接在拖拽到数据库上运行批量替换
SET @DatabaseName = '数据库名';
SET @OldText = '要被替换掉的旧字符串';
SET @NewText = '替换后的新字符串';
DROP PROCEDURE IF EXISTS ReplaceTextInDatabase;
DELIMITER $$
CREATE PROCEDURE ReplaceTextInDatabase()
BEGIN
DECLARE done INT DEFAULT FALSE;
DECLARE tableName VARCHAR(255);
DECLARE fieldName VARCHAR(255);
DECLARE cur CURSOR FOR SELECT TABLE_NAME, COLUMN_NAME FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_SCHEMA = @DatabaseName
AND DATA_TYPE IN ('varchar', 'text', 'mediumtext', 'longtext');
DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = TRUE;
DECLARE EXIT HANDLER FOR SQLEXCEPTION
BEGIN
GET DIAGNOSTICS CONDITION 1
@sqlstate = RETURNED_SQLSTATE, @errno = MYSQL_ERRNO, @text = MESSAGE_TEXT;
SET @full_error = CONCAT("ERROR ", @errno, " (", @sqlstate, "): ", @text);
SELECT @full_error;
END;
OPEN cur;
read_loop: LOOP
FETCH cur INTO tableName, fieldName;
IF done THEN
LEAVE read_loop;
END IF;
SET @SQL = CONCAT('UPDATE ', @DatabaseName, '.', tableName, ' SET ', fieldName, ' = REPLACE(', fieldName, ', ''', @OldText, ''', ''', @NewText, ''') WHERE ', fieldName, ' LIKE ''%', @OldText, '%''');
PREPARE stmt FROM @SQL;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;
END LOOP;
CLOSE cur;
END$$
DELIMITER ;
CALL ReplaceTextInDatabase();
DROP PROCEDURE IF EXISTS ReplaceTextInDatabase;