docker容器部署wordpress,使用原有nginx代理并开启https


搭建wordpress的时候遇到了一些小问题,记录一下从头到尾的搭建过程

搭建环境
  • 服务器
    阿*云 esc t6 赶上优惠八百多买了五年的,做博客够用了
  • 环境版本
    操作系统: centos7.6
    docker: 18.09.7
    docker-compose: 1.24.1
申请免费证书

阿*云可以免费申请20个
升级方法可以使用caddy自动申请证书

第一步 规划目录
  • /data/wordpress 放置wordpress的 docker-compose.yml 配置文件
  • /data/nginx 单独启动nginx相关配置
第二部 docker-compose配置
  • 这里的wordpress 和mysql 都使用了latest镜像,可以根据自己需要修改
  • mysql8 开始默认认证方式改变
  • 可以用–default-authentication-plugin=mysql_native_password或者启动后重新设置密码,这里懒得弄了
    配置文件如下

version: '3.1'
services:
  wordpress:
    image: wordpress
    restart: always
    depends_on:
      - db
    ports:
      - 18080:80
    environment:
      WORDPRESS_DB_HOST: db
      WORDPRESS_DB_USER: mywordpressuser
      WORDPRESS_DB_PASSWORD: mywordpresspwd
      WORDPRESS_DB_NAME: wordpress_db
    volumes:
      - wordpress:/var/www/html
  db:
    image: mysql
    restart: always
    command: --default-authentication-plugin=mysql_native_password
    environment:
      MYSQL_DATABASE: wordpress_db
      MYSQL_USER: mywordpressuser
      MYSQL_PASSWORD: mywordpresspwd
      MYSQL_RANDOM_ROOT_PASSWORD: '1'
    volumes:
      - db:/var/lib/mysql
volumes:
  wordpress:
  db:

cd /data/wordpress
# 启动wordpress
docker-compose up -d

这里很多人会遇到问题,即使wordpress的depends_on 设置成了db 在第一次启动时,一样会出现无法链接数据库的各种问题,解决方式如下
先启动db, 稍后数据库启动完毕后再启动wordpress即可


docker-compose up db 
docker-compose up -d

第三步 nginx配置

创建nginx容器启动脚本 /data/nginx/start.sh


cd /data/nginx
touch start.sh
chmod +x start.sh
vim start.sh # 复制下面内容到start.sh
./start.sh # 启动nginx

start.sh 文件内容如下


#!/usr/bin/env bash
docker stop nginx
docker rm nginx
docker run --name nginx \
  --restart=always \
  -p 80:80 \
  -p 443:443 \
  -v $(pwd)/nginx/nginx.conf:/etc/nginx/nginx.conf \
  -v $(pwd)/nginx/conf.d:/etc/nginx/conf.d \
  -v $(pwd)/logs:/var/log/nginx \
  -v $(pwd)/html:/data \
  -v $(pwd)/cert:/cert \
  -d nginx
第四步 配置nginx

增加配置文件/data/nginx/nginx/conf.d/wordpress.conf
其中https通过nginx来实现,所以wordpress保留现有配置即可
首先通过配置http访问,来初始化配置,nginx配置如下


server {
  listen 80;
  server_name  blog.yujindong.com;

  #charset koi8-r;
  access_log  /var/log/nginx/wordpress.access.log  main;
  set $node_port 18080;
  location / {
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header Host $http_host;
    proxy_set_header X-NginX-Proxy true;
    proxy_set_header Upgrade $http_upgrade;
    proxy_set_header Connection "upgrade";
    proxy_pass http://本机ip:$node_port$request_uri;
    proxy_redirect off;
  }
}

重启nginx,直接在/data/nginx目录下执行./start.sh即可
访问 http://blog.yujindong.com会打开初始配置页面
至此,http协议的配置就已经完成了

语言选择
基本信息

第五步开启https访问

首先使用http协议登录博客后台,在插件中选择Really Simple SSL安装并启用
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-nTLAGqrt-1573192077888)(https://blog.yujindong.com/wp-content/uploads/2019/11/search.png)]

将80端口301重定向到https, 配置如下
然后重启nginx


upstream wordpress {
    server 192.168.x.x:18080; // 本机ip
}
server {
  listen 80;
  server_name  blog.yujindong.com;
  rewrite ^/(.*)$   https://blog.yujindong.com/$1 permanent;
}
server {
  listen 443 ssl;
  server_name  blog.yujindong.com;

  ssl_certificate      /cert/xxx.pem;
  ssl_certificate_key  /cert/xxx.key;
  ssl_session_cache    shared:SSL:1m;
  ssl_session_timeout  5m;
  ssl_ciphers  HIGH:!aNULL:!MD5;
  ssl_prefer_server_ciphers  on;

  #charset koi8-r;
  access_log  /var/log/nginx/wordpress.access.log  main;
  location / {
    proxy_pass http://wordpress;
    proxy_set_header Host $host;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
  }
}
结束

很多细节未做说明如nginx的基础配置等,不属于本文重点

  • 0
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
好的,以下是使用 Docker 部署 Nginx使用 Nginx 部署项目的步骤: 1. 首先,需要安装 Docker,可以参考官网的安装教程进行安装。 2. 创建一个用于存放 Nginx 配置文件和项目文件的目录,比如 /home/nginx。 3. 在该目录下创建一个名为 nginx.conf 的 Nginx 配置文件,可以参考以下示例进行编写: ``` worker_processes 1; events { worker_connections 1024; } http { server { listen 80; server_name localhost; location / { root /usr/share/nginx/html; index index.html; } location /api/ { proxy_pass http://backend:8000/; } } } ``` 上述配置文件中,Nginx 监听本地 80 端口,将访问根目录的请求转发到 /usr/share/nginx/html 目录下的 index.html 文件,将以 /api/ 开头的请求转发到名为 backend 的 Docker 容器中的 8000 端口。 4. 在该目录下创建一个名为 Dockerfile 的文件,用于构建自定义的 Nginx 镜像,可以参考以下示例进行编写: ``` FROM nginx COPY nginx.conf /etc/nginx/nginx.conf COPY dist/ /usr/share/nginx/html/ ``` 上述 Dockerfile 文件中,使用 nginx 作为基础镜像,将本地的 nginx.conf 文件复制到容器中的 /etc/nginx/nginx.conf 目录下,将本地的项目文件复制到容器中的 /usr/share/nginx/html/ 目录下。 5. 使用以下命令构建并运行 Nginx 容器: ``` docker build -t my-nginx . docker run --name my-nginx -p 80:80 --link backend my-nginx ``` 上述命令中,首先使用 docker build 命令构建名为 my-nginx 的自定义 Nginx 镜像,然后使用 docker run 命令启动该镜像对应的容器,将本地的 80 端口映射到容器的 80 端口,并连接名为 backend 的后端容器。 6. 至此,使用 Docker 部署 Nginx使用 Nginx 部署项目的过程已完成。可以通过浏览器访问 http://localhost 来查看部署的项目。如果该项目中有需要通过 /api/ 访问的后端服务,可以在后端容器中启动该服务,并将其命名为 backend,以便 Nginx 容器能够连接到该服务。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值