背景前段时间看到LNMP居然被军哥给卖了，一方面让人感到惋惜，毕竟用了这么多年了，而且军哥也是坚持了这么多年了，就这么放弃了。另外一方面也感受到，这种lnmp架构对比现在的docker-compose确实有很多不方便的地方，比如搬家的时候我要备份、迁移....，但是在docker-compose连同文件夹带走一条命令就重新起来了。正好近期在折腾NAS，从ESxi全部迁移到PVE，利用PVE的CT模板重新搭建了Debain，把所有的wp全部搬迁到这里。以下通过docker-compose部署wordpress\mysql\phpmyadmin，并通过Nginx反向代理项目nginx-proxy-manager反代部署。部署因为需要同时部署wordpress\mysql\phpmyadmin，强烈建议通过compose部署。安装docker和docker-compose的过程略过。docker新版本自带了docker compose命令，可以替换docker-compose，所以我就不装docker-compoe了。准备docker-compose.ymlversion: '3.1' services: wordpress: image: wordpress restart: always container_name: wp ports: - 8080:80 environment: #修改以下db配置 WORDPRESS_DB_HOST: db WORDPRESS_DB_USER: wordpress WORDPRESS_DB_PASSWORD: wordpress WORDPRESS_DB_NAME: wordpress volumes: - ./wp:/var/www/html links: - db db: image: mysql:5.7 restart: always tainer_name: wp_db environment: #修改以下db配置 MYSQL_DATABASE: wordpress MYSQL_USER: wordpress MYSQL_PASSWORD: wordpress MYSQL_ROOT_PASSWORD: wordpress_root volumes: - ./db/conf.d:/etc/mysql/conf.d - ./db/data:/var/lib/mysql dbweb: image: phpmyadmin restart: always ports: - 8098:80 links: - db之后运行docker compose up -d 跑起来服务。下面解读一下这个配置：Wordpress：默认端口8080，这样每个站我用一个独立的端口，之后用NMP反代。volumes挂载同目录下的wp文件夹，映射wordpress的根目录。Mysql：没有开放端口到宿主机，MYSQL_ROOT_PASSWORD是默认root密码MYSQL_DATABASE/MYSQL_USER/MYSQL_PASSWORD是wp使用的账户密码Phpmyadmin：端口8098其他配置增加PHP扩展有些wp需要开启php扩展，但是在docker里面就非常麻烦，这里推荐前期一个配置模块install-php-extensions项目地址：https://github.com/mlocati/docker-php-extension-installer具体可以看我之前的介绍利用install-php-extensions构建自己的php-docker镜像那么，下面我们来重新构建镜像。准备dockerfile指定dockerfile-wp作为构建的文件，这个是为了重新构建镜像，存放在docker-compose.yml同层级目录。FROM wordpress LABEL maintainer="https://imgki.com" #Add own Extentions ADD https://github.com/mlocati/docker-php-extension-installer/releases/latest/download/install-php-extensions /usr/local/bin/ RUN chmod +x /usr/local/bin/install-php-extensions && sync RUN install-php-extensions mysqli pdo_mysql gd exif imagick zip fileinfo iconv IMAP #upload.ini max_upload COPY ./conf/uploads.ini /usr/local/etc/php/conf.d修改docker-compose.yml在docker-compose.yml中关于wordpress部分修改成这样，重新构建的镜像会被命名为wordpress-rebldwordpress: build: context: . dockerfile: dockerfile-wp image: wordpress-rebld restart: always ports: - 8083:80 environment: WORDPRESS_DB_HOST: db WORDPRESS_DB_USER: wordpress WORDPRESS_DB_PASSWORD: wordpress WORDPRESS_DB_NAME: wordpress volumes: - ./wp:/var/www/html调整上传限制官方镜像原来设置的上传限制为2M，这个对于很多人来说附件都太小了，因此需要调整php.ini中的配置。以下在构建镜像的时候一块进行调整。准备uploads.ini这个配置文件描述了上传文件大小的限制，存放在docker-compose.yml同层级目录。file_uploads = On memory_limit = 64M upload_max_filesize = 64M post_max_size = 64M max_execution_time = 600准备dockerfile文件因为需要重新构建镜像，因此需要准备一个dockerfile文件，我命名为dockerfile-wp，存放在docker-compose.yml同层级目录。FROM wordpress LABEL maintainer="https://imgki.com" #upload.ini max_upload COPY ./uploads.ini /usr/local/etc/php/conf.d修改docker-composel.yml在docker-compose.yml中关于wordpress部分修改成这样wordpress: build: context: . dockerfile: dockerfile-wp image: wordpress-rebld restart: always ports: - 8083:80 environment: WORDPRESS_DB_HOST: db WORDPRESS_DB_USER: wordpress WORDPRESS_DB_PASSWORD: wordpress WORDPRESS_DB_NAME: wordpress volumes: - ./wp:/var/www/htmlNginx反代平时在自己的服务器上跑了很多服务，而且是用习惯了docker跑，对外开放的端口都是自设，为了统一管理域名+SSL，之前都是用宝塔或者lnmp比较方便，如果愿意折腾用Nginx-docker，就是稍微麻烦点。项目地址：https://github.com/jc21/nginx-proxy-manager官网：https://nginxproxymanager.com/具体看我前期的教程：非常方便的Nginx反向代理项目nginx-proxy-manager
今天做了一个vlog，尺寸有点大，想传到wordpress上去，刚开始提示大小问题，在php.ini中修改了post_max_size和upload_max_filesize两个参数后，依然提示此响应不是合法的JSON响应问题。解决办法：修改nginx.conf（完美方案）sudo vim /etc/nginx/nginx.conf 在http段里面添加: client_max_body_size 100m; //举例设置上传最大值为100m 然后重启nginx其他办法：直接上传到uploads文件夹，这样的问题是wp媒体管理页面看不到，不完美古腾堡编辑器的问题，需要换回经典编辑器。我刚下了决心用古腾堡，又让我换回去？算了吧。
全站加密的问题一直以来，都想解决壮壮站点的全站加密，注意是全站加密，而不是用wp自带的单独加密。可是这么一个小小的问题，在我不会写代码的情况下，自然也变得麻烦起来。后来找到了通过nginx的加密方式，在进站的时候要输入用户名和密码，这一定程度上解决了这个问题。但是存在两个遗憾：1）要输入用户名和密码，界面太丑。2）七牛无法回源读取文件。step 1修改WordPress主题，添加加密功能用文本编辑器打开你的主题目录下的header.php，在第一行添加以下代码：<?php if (!isset($_SESSION)) { session_start(); } if( isset($_SESSION['authenticated']) ) { if($_SESSION['authenticated'] == 'yes') { $authenticated = 'yes'; } else { $authenticated = 'no'; } } else { $authenticated = 'no'; } if($authenticated != 'yes') { // 将 www.ludou.org 改成你的网站首页地址 header("Location: https://www.ludou.org/login.php"); exit(); } ?> step2接着下载 login.php ，下载后用文本编辑器打开 login.php ，根据提示更改网站URL和密码，最后用UTF8编码保存并上传到你的网站根目录下。好了，现在你的博客就已经被加密了，初次访问必须输入密码。login-php （点击下载）此外，还有其他两种方法也可以解决，根据需要选择。具体看这里：https://www.ludou.org/password-protecting-your-wordpress-blog.html补充一个小问题：上述存在一个小不足，就是登陆后不会返回原始URL，而是会定位到主页。我加了一下两句代码：1.在主题编辑器中加入以下一行：$_SESSION["c_uri"]=$_SERVER["REQUEST_URI"]; 2.在login.php中修改一下：$url = "https://imgki.com".$_SESSION["c_uri"]; 上面的其实很简单，就是在登录的时候通过记录REQUEST_URI的值到session中，在输入正确密码的返回地址时在加上这个$_SESSION["c_uri"]2017.9.8补充一下：后来陆续还遇到了几个问题，也修正了几个地方。1.期间出现了一个错误，让人很抓狂，其实就是一个细心的问题，导致在input的数据不能提交到到$_POST变量，出现了一个死循环。写代码这个东西真是能锻炼人的耐心和细心。2.对登录界面进行了在美化，原来等登录界面实在太丑啦，成果看下图。后期的工作：据说这个还有可能出现XSS攻击？不知道需不需要在捯饬一下。