wordpress漏洞相对较多,我的服务器帮朋友挂了网站。之前是直接挂在host上,现在迁移到了docker里。记录一下迁移wordpress到docker里需要注意的问题。
wordpress docker image
wordpress官方的docker image有很多不同的版本。比如fpm版本就是只有php和wordpress,而默认的则带着apache webserver。 其次,所有的image都没有数据库。
https://gist.github.com/FindHao/03e807fe46ebcbdb4349046e8f0317d8
上面的docker-compose文件,先定义了一个db的container,使用了mysql5.7,并且从环境变量里读取数据库的密码。然后定义了一个wordpress的container。注意image的名字只有wordpress。设置环境变量,尤其是WORDPRESS_DB_HOST
。一开始在这里绕了很多弯路。host的mysql是无法直接连接的,因为默认mysql只能是localhost访问,但是docker的container和host是不同的网络的。(不要开放mysql端口给0.0.0.0)
再一个,映射wp-content时,一定要只映射这个目录,因为它的wordpress是定制的。或者说它的wp-config.php是定制的。主要还是数据库的链接问题。
webserver
自己添加webserver会出现一些稀奇古怪的问题,尽管reference里digitalocean使用了这个方法,但是我测试的时候,发现一直出现权限的问题,因为nginx的container和wordpress的container使用了不同的用户(www-data和nginx)。所以最好直接使用wordpress image里自带的apach就好。
修改原来的host上的nginx conf:
upstream wordpress {
server localhost:9101;
}
server
{
listen 80;
listen [::]:80;
server_name XXX;
index index.html index.htm index.php default.html default.htm default.php;
root /a/root/path;
location / {
proxy_read_timeout 90;
proxy_connect_timeout 90;
proxy_redirect off;
proxy_pass http://wordpress;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $host;
}
location ~ /\.ht {
deny all;
}
}
文件夹权限
wp-content一定要chown -R www-data.www-data ./*
,要不然没法在wordpress后台更新文件。
数据库导入导出和备份
外部host数据库导出:
mysqldump -uroot -p mywebsite.com > mywebsite_com.sql
导入到docker里:
docker exec -i db mysql -u root -pyourpassword mywebsite.com < mywebsite_com.sql
从docker里导出数据库
docker exec -i db mysqldump -u root -ppyourpassword --all-databases > mywebsite_com_docker.sql
Reference
https://www.digitalocean.com/community/tutorials/how-to-install-wordpress-with-docker-compose https://blog.csdn.net/u012577474/article/details/106224625 https://forums.docker.com/t/nginx-on-host-system-as-proxy-for-wordpress-container/137058
Comments