Docker wordpress 的定期自动备份

#!/bin/bash
rm -rf /web/import/*
docker exec db sh -c 'exec mysqldump -uroot -ppassword wordpress' > /web/import/idehe.com.sql
tar -cvf /web/import/idehe.com.tar.gz /web/wp
sshpass -p password scp /web/import/idehe.com.tar.gz root@dl.web.com:/mnt/test
sshpass -p password scp /web/import/idehe.com.sql root@dl.web.com:/mnt/test
  • 删除所有现成的备份
  • 执行mysqldump导出数据库命令
  • 打包html
  • scp传输两个文件到远程备份服务器的目录,同时使用工具sshpass 传递密码给scp命令,省事。
  • 全部使用bash脚本,crontab -e 添加每12小时运行一次。
  • * 12 * * * /docker2/wp/2web/back.sh
  • 搞定。

稍微解决一下docker WordPress的文件夹权限问题

今天升级插件发现,发现docker wp 无法创建文件夹,尝试几个办法都不行:

  • 往docker-compose 添加privileged: true 没有效果
  • 往docker-compose 添加user: “33:33” 也就是代表www-data:www-data也不行。。

最后发现 wp的项目文件夹是-v 映射到容器内的,给wp-content 增加权限可以解决,但是不知道安不安全,暂时先这样吧:

chmod -R 777 wp-content
感觉还是不安全,改回来。。
chmod -R 755 wp-content

办法改为,进入wordpress 的container, 执行chown -R www-data:www-data /var/www/html

同时 wp-config 增加了一句:define(‘FS_METHOD’, ‘direct’);

Docker 化 Kodexplorer 的总结

从frantech买了storage, 价格大概是256GB 15 USD,挂载在VPS上面的。开始转移我的KOD到新的VPS上面,同时尝试用docker化运行。

思路是:

  1. 用docker 文件生成customize 的 image,其中有 两个主要的
    1. php7.1,php需要安装扩展插件,通过RUN命令搞定
    2. wyveo/nginx-php-fpm:php71 ,包括写好nginx conf配置的nginx,基本只要打开填入域名就可以了。后期可以考虑只用nginx 标准官方的。
  2. 第一次运行后,docker container cp 命令从镜像拷贝整个/etc/nginx出来,并配置default.conf 中的域名即可。
  3. 生产运行:
    1. -v 镜像kod 目录,
    2. -v 镜像我的block storage 目录/mnt/files 到nginx html里面
    3. -v log
    4. -v nginx 配置文件进去
    5. -p 80:80端口, -d daemon, -t name, 最后填上定制的image 名称
  4. 最后我的dockerfile:
FROM php:7.1-fpm
#FROM php:7.1-fpm-alpine3.4
#FROM nginx:1.17.4-alpine

# install dependencies
RUN apt-get update && apt-get install -y \
        libfreetype6-dev \
        libmcrypt-dev \
        libpng-dev \
        libjpeg-dev \
        libpng-dev 

#install php extension
RUN docker-php-ext-install iconv mcrypt 


#config gd and install
RUN docker-php-ext-configure gd --with-freetype-dir=/usr/include/ --with-jpeg-dir=/usr/include/ 
RUN docker-php-ext-install gd


FROM wyveo/nginx-php-fpm:php71

5. 生产运行的 docker run 命令

docker run \
-d \
-p 80:80 \
--name kod \
--volume "/kod_html/kod":/usr/share/nginx/html \
--volume "/mnt/files":/usr/share/nginx/html/files \
--volume "/kod_html/log":/var/log/nginx/ \
--volume "/kod_html/nginx":/etc/nginx/ \
kod

WP带SSL迁移到Docker一些总结

  1. HTTPS的端口是443, HTTP的端口是80,可以通过命令 netstat -tnl查看
  2. SSL用最基本的certbot就可以了,免费万岁,多捐赠
  3. SSL防止的就是很常见的中间人攻击,知乎用户举例,你出去旅游给亲人寄一个明星片,结果亲人收到,变成斯诺登的求助/威胁信,我在哪哪哪,我有危险,快打钱救我!被插广告也是类似原理。
  4. SSL证书保存在网站目录: – /web/ssl:/etc/letsencrypt
  5. 不需要备份,迁移之后直接renewal就行了
  6. 平时需要renewal, 主要通过两个命令, 都做成bash script就好了。
    • docker-compose run certbot renew 和
    • docker-compose run kill -s SIGHUP webserver 其中: kill -s SIGHUP 会reload 配置
  7. crontab -e 加入这个 bash script 每12小时运行一次。
  8. 主要过程:
    1. 修改docker-compose.yml的配置,增加端口, 数据卷,certbot服务。
    2. 其中:certbot的数据卷镜像用于nginx和cerbot共享,要不要挂载出来,问题都不大。所以用卷,不用目录。
    3. 其中:增加映射端口 443
    4. 第一次测试: 第一次获取证书运行命令用–staging, 之后用–force-renewal
    5. 第一次测试:docker-compose up -d 之后,需要检查 certbot的logs 是否成功获得了SSL证书:
    6. 方式一就是 docker-compose ps certbot 服务的状态要是 exit 0 正常退出,就应该是对了。
    7. 方式二,检查logs, 命令docker-compose logs certbot, 输出logs看看是否正确配置并且下载了证书,congradulations! bla 这些。
    8. nginx 多增加一个配置文件options-ssl-nginx.conf, 镜像到nginx里面。
    9. nginx conf 基本重写,用拷贝的就好了。 最后重启测试。
  9. 所有参考自 https://www.digitalocean.com/community/tutorials/how-to-install-wordpress-with-docker-compose 其中 options-ssl-nginx.conf 路径有错,注意更改。


Docker Build WordPress 的思路1

1. 首先创建mysql 的 container,通过命令行:

docker run –name wp-mysql -e MYSQL_ROOT_PASSWORD=test -d -p 3306:3306 -v /root/docker-wp/web3:/test mysql:5.7

其中 -v:

挂载主机目录 /root/docker-wp/web3 到 镜像中的/test

然后通过命令mysql 导入数据库

2. 创建wordpress 的container:

docker run -d –name wp –link wp-mysql:mysql -p 80:80 -v /root/docker-wp/web3/wp/wp:/var/www/html wordpress

名称–name wp;–link 链接wp-mysql; -p端口80;-v 挂载主文件目录 /root/docker-wp/web3/wp/wp 到镜像目录 /var/www/html

现在可以启动了,但是wp用的是新的数据库名 wordpress, 修改wp-config.php其中的db name 改成刚才导入的,我的是blogdb

3. 基本可以运行了,下一步是nginx了