docker部署wordpress个人博客

随笔3天前发布 黄海军
12 0 0

技术:docker-compose部署wordpres和mysql,宿主机的nginx部署SSL证书将HTTPS反向代理到wordpress。使用的是ubuntu 20.04
准备工作:
-一台云服务器,一个已经备案的域名
-免费申请到的nginx的SSL证书
-docker、docker-compose、nginx已部署,确认可以拉取镜像
一、docker-compose部署wordress和mysql
在/opt下创建一个wordpress的文件夹并创建docker-compose.yml文件,创建和启动mysql和wordpress容器。

mkdir -p /opt/wordpress&&cd /opt/wordpress&&vim docker-compose.yml
version: '3.1'
services:
  wordpress:
    image: wordpress
    restart: always  #容器因为某种原因停止时,Docker Compose始终尝试重新启动它
    ports:
      - 8080:80     #端口映射。宿主机8080端口被映射到容器80端口
    environment:    #设置了 WordPress 所需的环境变量,以连接到 MySQL 数据库
      WORDPRESS_DB_HOST: db
      WORDPRESS_DB_USER: wordpress
      WORDPRESS_DB_PASSWORD: wordpress
      WORDPRESS_DB_NAME: wordpress
    volumes:      #定义一个卷映射,将主机的 /opt/wordpress 目录映射到容器的 /var/www/html
      - /opt/wordpress:/var/www/html

  db:
    image: mysql:5.7
    restart: always
    environment:
      MYSQL_DATABASE: wordpress
      MYSQL_USER: wordpress
      MYSQL_PASSWORD: wordpress
      MYSQL_RANDOM_ROOT_PASSWORD: '1'
    volumes:
      - /opt/mysql:/var/lib/mysql

启动docke-compser.yml

docker-compose -f docker-compose.yaml up -d  
-f:调用文件
-d:开启守护进程

在浏览器访问wordpress,并将修改站点地址为域名,后面部署ssl证书重定向到这个域名
starless.site:8080
docker部署wordpress个人博客
二、配置nginx反向代理和SSL证书
将下载下来的SSL证书上传到服务器,我是上传到/opt/ssl目录下的
配置nginx文件,

vim /etc/nginx/sites-available/default
 server {
    listen 80;
    server_name starless.site www.starless.site; 

    return 301 https://www.starless.site$request_uri;  #所有到达这里请求,返回一个301永久重定向响应,将HTTP重定向到HTTPS,并带上原始请求的URI($request_uri
}
server {
    listen 443 ssl http2;    #在443端口上监听HTTPS,并使用HTTP/2协议
    server_name www.starless.site;

    ssl_certificate "/opt/ssl/starless.site_bundle.pem";   #配置SSL证书
    ssl_certificate_key "/opt/ssl/starless.site.key";      #配置SSL秘钥

    location / {
        proxy_pass http://localhost:8080;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto https;
    }

修改好后重新加载一下nginx的配置文件。

nginx -s reload

修改wordpress配置文件,
如果直接代理过去,会有很多问题,需要修改/opt/wordpress/wp-config.php。这个是docker容器挂载的卷,添加以下内容

vi /opt/wordpress/wp-config.php
define('FORCE_SSL_ADMIN', true);

if (strpos($_SERVER['HTTP_X_FORWARDED_PROTO'], 'https') !== false){
    $_SERVER['HTTPS'] = 'on';
    $_SERVER['SERVER_PORT'] = 443;
}
if (isset($_SERVER['HTTP_X_FORWARDED_HOST'])) {
    $_SERVER['HTTP_HOST'] = $_SERVER['HTTP_X_FORWARDED_HOST'];
}
define('WP_HOME','https://starless.site/');
define('WP_SITEURL','https://starless.site/');

最后重启一下docker容器

docker-compose -f wordpress.yml restart

访问web页面,ssl秘钥也生效了
starless.site
docker部署wordpress个人博客

© 版权声明

相关文章

暂无评论

您必须登录才能参与评论!
立即登录
暂无评论...