小米爷爷 發表於 2021-10-2 17:01:00

docker 安装 wordpress,通过nginx反向代理,绑定域名,配置https

<blockquote>
<p>关注公众号:<code>大数据技术派</code>,回复: <code>资料</code>,领取<code>1024G</code>资料。</p>
</blockquote>
<p>假设<code>docker</code>已经安装好了,如果没有安装,可以照着 5分钟安装docker教程<br>
安装一下。</p>
<h2 id="一-下载镜像">一. 下载镜像</h2>
<p>默认下载最新版本,如果想指定对应版本,可以用冒号后加版本,像这样<code>mysql:5.7</code>:</p>
<pre><code class="language-bash">docker pull mysql:5.7
docker pull wordpress
docker pull nginx
</code></pre>
<h2 id="二-启动container实例">二. 启动container实例</h2>
<p>已经下载好了image,接下来启动container,需要分别启动mysql,wordpress,nginx。</p>
<h4 id="1-启动mysql">1. 启动mysql</h4>
<p>因为wordpress是需要安装数据库的,这里安装mysql并且启动:</p>
<pre><code class="language-bash">docker container run -d \
--name wordpressdb \
-p 3306:3306 \
--env MYSQL_ROOT_PASSWORD=123456 \
--env MYSQL_DATABASE=wordpress \
mysql:5.7
</code></pre>
<p>各个参数含义:<br>
<code>-d</code>: 指定容器以守护进程方式在后台运行;<br>
<code>--name</code>: 指定容器名称,此处我指定的是wordpressdb;<br>
<code>-env</code> 环境参数,MYSQL_ROOT_PASSWORD设置root用户的密码<br>
<code>-p</code>: 指定主机与容器内部的端口号映射关系,<br>
[宿主机端口号]:[容器内部端口],此处我使用了主机3306端口,映射容器3306端口;<br>
<code>mysql:5.7</code> 是nginx的镜像IMAGE ID前4位</p>
<p>这些参数中涉及了一些名词,如果看不懂,建议去看看<code>docker</code>的基本概念。简单来说就是,docker技术通过<code>image</code>这种<code>模板</code>,生成<code>contaienr</code>实例,下次还可以再生成一个<code>contaienr</code>实例,image像是一个模板,可以多次使用。<code>contaienr</code>实例可以看作小型的虚拟机,多个虚拟机在局域网里面,需要将端口映射到宿主机上面,我们都知道直接访问局域网的内网ip是不能访问的,通过宿主机的公网ip:映射的端口即可访问了。</p>
<h4 id="2-启动wordpress">2. 启动wordpress</h4>
<p>docker安装wordpress,相比docker安装mysql,这里相比多了两个参数,后面会解释。如果安装成功,通过<code>docker ps</code>可以看到<code>wordpress</code>的进程,浏览器输入ip:8080,应该是可以在网页安装wordpress了。</p>
<pre><code class="language-bash">docker run -d \
--name wordpress \
--link wordpressdb:mysql \
--volume "$PWD/wordpress":/var/www/html \
-p 8080:80 \
wordpress
</code></pre>
<p><code>--link</code>:关联mysql容器,如果是使用非docker安装的mysql,比如自己手动安装的mysql,可以通过参数<code>--env</code>指定数据库连接:</p>
<pre><code class="language-bash">-e WORDPRESS_DB_HOST=192.168.80.129:3306 \
-e WORDPRESS_DB_USESR=root \
-e WORDPRESS_DB_PASSWORD=123456
</code></pre>
<p><code>--volume</code>:将容器的<code>/var/www/html</code>映射到当前目录下,这样直接操作当前目录,即可操作容器目录,否则还得进去容器操作,我们都知道容器是一个阉割版的小型虚拟机,像<code>vim</code>这种常用命令默认是没有的;</p>
<p><strong>注意</strong>:wordpress容器默认开的是80端口,这里将容器的<code>80</code>端口映射到宿主机的<code>8080</code>端口,为什么不也映射到80端口呢,因为后面要安装<code>nginx</code>,nginx一般要监听80端口,云服务商一般配置域名:ikeguang.com绑定云主机的80端口,所以最后nginx只能由nginx占用宿主机的80端口,避免不必要的麻烦。</p>
<h4 id="3-启动nginx">3. 启动nginx</h4>
<p>如果上面wordpress安装好了,网站可以通过ip地址正常访问,发布文章了,可以考虑绑定域名了,加个nginx进行反向代理。</p>
<h4 id="1-配置http访问">1). 配置http访问:</h4>
<p><strong>nginx配置</strong></p>
<p>http访问的时候,默认一个server监听80端口即可;如果配置https,需要加个server,监听443端口,这里先把http访问配置好再说,贴出了我的配置:</p>
<pre><code class="language-bash">include /etc/nginx/conf.d/*.conf;
server{
   listen 80;
   server_name ikeguang.com www.ikeguang.com;
   
   location / {
      proxy_set_header Host $host;
          proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
      proxy_pass http://宿主机ip:8080;
   }
}
</code></pre>
<p>这里<code>http://宿主机ip:8080</code>,因为前面我们的wordpress映射宿主机的端口是8080,这里nginx代理宿主机8080端口,也就是说你访问80端口(nginx),相当于代理访问了8080端口(wordpress),并且云服务商配置的域名也是绑定80端口,这样访问域名,就访问了8080端口的wordpress了,就能访问网站了。</p>
<p><strong>说明</strong>:因我wordpress启动端口不是80,需要添加配置:</p>
<pre><code class="language-bash">proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
</code></pre>
<p><strong>启动nginx容器</strong><br>
既然nginx.conf配置好了,接下来启动nginx容器:</p>
<pre><code class="language-bash">docker run -d -p 80:80 --name nginx -v /usr/share/nginx/html:/usr/share/nginx/html -v /etc/nginx:/etc/nginx -v /var/log/nginx:/var/log/nginx nginx
</code></pre>
<p><strong>这里需要注意:</strong></p>
<ul>
<li>这里将容器的目录<code>/etc/nginx</code>映射,需要先通过<code>docker cp</code>命令复制一份完整nginx的目录到宿主机,然后修改文件,再执行上面<code>docker run</code>命令。文件夹映射的时候,文件夹里面的所有文件应该是一样的,文件内容可以不一样。</li>
</ul>
<p>经过上面的配置,应该是可以通过浏览器输入域名:ikeguang.com访问网站了。</p>
<h4 id="2-配置https访问">2). 配置https访问:</h4>
<p>经过前面的配置,通过域名应该可以访问网站了,接下来配置https:<br>
nginx.conf配置:</p>
<pre><code class="language-bash">include /etc/nginx/conf.d/*.conf;
server {
    #监听443端口
    listen 443 ssl;
    #对应的域名
    server_name ikeguang.com www.ikeguang.com;
    ssl_certificate ssl/1_ikeguang.com_bundle.crt;
    ssl_certificate_key ssl/2_ikeguang.com.key;
    ssl_session_timeout 5m;
    ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
    ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4;
    ssl_prefer_server_ciphers on;
    location / {
          proxy_set_header Host $host;
          proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
      proxy_pass http://宿主机ip:8080;
   }
}
server{
   listen 80;
   server_name ikeguang.com www.ikeguang.com;
   #把http的域名请求转成https
   rewrite ^(.*)$ https://$host$1; #将所有HTTP请求通过rewrite指令重定向到HTTPS。

   location / {
      proxy_set_header Host $host;
          proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
      proxy_pass http://宿主机ip:8080;
   }
}
</code></pre>
<p>把前面启动http的nginx容器删除,配置好ssl证书,再次启动,需要启动80端口和443端口。</p>
<pre><code class="language-bash">docker run -d -p 80:80 -p 443:443 --name nginx -v /usr/share/nginx/html:/usr/share/nginx/html -v /etc/nginx:/etc/nginx -v /var/log/nginx:/var/log/nginx nginx
</code></pre>
<ul>
<li><code>-p 443:443</code>,如果配置ssl,才需要这个参数,开始去掉,这里先把域名绑定成功,http可以访问了,再进行第二步配置https访问,ssl证书可以在云服务商那里申请免费的,然后按照帮助文档安装即可,没啥坑。</li>
</ul><br><br>
来源:https://www.cnblogs.com/data-magnifier/p/15362218.html
頁: [1]
查看完整版本: docker 安装 wordpress,通过nginx反向代理,绑定域名,配置https