docker创建WordPress并强制使用https

1、创建数据文件夹 mkdir /data ,所有文件都在此配置。

2、安装docker,参见: https://www.cnblogs.com/yanglei-xyz/p/install_docker.html

3、配置mysql:

mkdir /data/mysql
cd /data/mysql
docker run -p 3306:3306 --name mysql -v $PWD/conf:/etc/mysql/conf.d -v $PWD/logs:/logs -v $PWD/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=yourpassword -m 512m --memory-swap -1 --oom-kill-disable -d mysql:5.7

说明:

  • -p 3306:3306 端口映射
  • –name mysql 自定义容器名
  • -e MYSQL_ROOT_PASSWORD=yourpassword 配置mysql默认密码
  • -m 512m –memory-swap -1 配置允许最大内存及交换空间-1表示无限
  • –oom-kill-disable 防止系统内存不足时自动杀进程

设置mysql允许外网访问

docker exec -it mysql bash #进入容器内部
mysql -u root -p #进入mysql,密码为刚设置的密码
grant all privileges on *.*  to 'root'@'%' ; #允许远程登录
flush privileges; #刷新权限
exit #退出mysql
exit #退出容器
#重启mysql容器
docker restart mysql

4、配置WordPress:

mkdir /data/wordpress
cd /data/wordpress
docker run --name wordpress -p 8002:80 -e WORDPRESS_DB_HOST=172.17.0.1:3306 -v /data/wordpress/www/html/:/var/www/html/ -e WORDPRESS_DB_USER=root -e WORDPRESS_DB_PASSWORD=yourpassword -m 512m --memory-swap -1 --oom-kill-disable -d wordpress

说明:

  • -p 8002:80将主机8002端口映射到容器80端口
  • -e WORDPRESS_DB_HOST=172.17.0.1:3306 使用外部mysql
  • -e WORDPRESS_DB_USER=root -e WORDPRESS_DB_PASSWORD=yourpassword 外部mysql用户名密码
  • -v /data/wordpress/www/html/:/var/www/html/ 映射WordPress的程序文件夹
  •    -m 512m –memory-swap -1 配置允许最大内存及交换空间-1表示无限
  •    –oom-kill-disable 防止系统内存不足时自动杀进程

5、配置nginx:

docker run -p 80:80 -p 443:443 --name nginx -v /data/nginx/www:/www -v /data/nginx/conf.d:/etc/nginx/conf.d -v /data/nginx/cert:/etc/nginx/cert -v /data/nginx/logs:/wwwlogs -m 64m --memory-swap -1 --oom-kill-disable -d nginx

说明:

  • -v /data/nginx/conf.d:/etc/nginx/conf.d 映射配置文件
  • -v /data/nginx/cert:/etc/nginx/cert 映射证书文件

证书可以选择使用阿里云的证书,免费一年,到期再申请一次就行了。

下载nginx证书,并上传到/data/nginx/cert目录

配置反向代理:

cd /data/nginx/conf.d
vi home.conf
复制代码
server {
    listen 80;
    server_name  www.yoursite.com;

    return 301 https://www.yoursite.com$request_uri; #自动跳转http到https
}
server {
    listen 443;
    server_name  www.yoursite.com;

    ssl on;
    ssl_certificate /etc/nginx/cert/3666270_yanglei.xyz.pem;
    ssl_certificate_key /etc/nginx/cert/3666270_yanglei.xyz.key;
    ssl_session_timeout 5m;
    ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
    ssl_ciphers ALL:!ADH:!EXPORT56:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+EXP;
    ssl_prefer_server_ciphers on;

    location / {
        proxy_set_header        Host $host;
        proxy_set_header        X-Real-IP $remote_addr;  #获取真实ip
        proxy_connect_timeout   90;
        proxy_send_timeout      90;
        proxy_read_timeout      90;
        proxy_buffer_size       4k;
        proxy_buffers           4 32k;
        proxy_busy_buffers_size 64k;
        proxy_temp_file_write_size 64k;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_pass  http://172.17.0.1:8002;
        client_max_body_size 10240m;
   }

}

保存重启nginx: docker restart nginx 

6、修改WordPress:

配置完之后发现无法加载js及css,解决办法如下:

进入WordPress程序目录 cd /data/wordpress/www/html ,修改配置 vi wp-config.php 

在第一段注释后面增加以下代码:

$_SERVER['HTTPS'] = 'on';
define('FORCE_SSL_LOGIN', true);
define('FORCE_SSL_ADMIN', true);

修改完如图:

 之后访问WordPress并安装就可以了,而且已经全站https了,不需要再做其他额外配置。如果在修改前安装好了WordPress,不知道再这样改行不行。

发表评论

电子邮件地址不会被公开。 必填项已用*标注