如何定位

时间:2016-05-19 07:48:34

标签: php wordpress nginx docker docker-compose

我正在玩我的小型服务器,尝试将其上运行的服务停靠。为简化起见,假设我必须掌握一些主要内容:Wordpress和其他服务。

Docker Hub上有很多适用于Wordpress的图像,但它们似乎都启动了Web服务器(Apache2) PHP-FPM。我不知道它是如何与docker哲学兼容,说明“每个容器有一个进程”。 我错了吗?

所以我使用docker-compose来启动三个容器:web_db(MariaDB),web_server(nginx)和web_fpm(PHP-FPM)。 web_server./www列为包含数据的卷./www/wordpress。因此,在将Wordpress文件放入http://my-ip/wordpress之后,我可以通过./www/other-service访问它并安装它来安装经典的Wordpress文件。 这是正确的方法吗?

现在我的Wordpress已启动并运行,我想添加其他服务。但是,我真的不知道什么是最佳做法。我应该简单地创建{ tags : { $all : [ { $elemMatch : { id: 1 } }, { $elemMatch : { id: 2 } }, { $elemMatch : { id: 3 } } ], $not : { $elemMatch : { id: { $in : [4,5] } } } } } ,那么使用相同的容器?在我看来,只有一个容器用于进程更好(例如,为什么有两个容器执行PHP-FPM?),但也许我应该避免这种情况来隔离我的服务。更确切地说,我认为用第二个数据库创建第二个容器可能是好的(即必要的)。 可以/应该为nginx设置一个容器,一个用于PGHP-FPM,两个容器用于两个数据库?或者我应该为其他服务重新创建一个完整的堆栈,在前面使用第三个nginx来执行代理并管理HTTPS和证书吗?

2 个答案:

答案 0 :(得分:1)

  

可以/应该为Nginx设置一个容器,一个用于PHP-FPM,两个容器用于两个数据库?或者我应该为其他服务重新创建一个完整的堆栈,在前面使用第三个nginx来执行代理并管理HTTPS和证书吗?

您好,

我为我的wordpress网络(OVH Cloud上的10多个wordpress)所做的是为每个Wordpress创建一个堆栈:

  • 一个带有Apache / PHP的Wordpress容器和我的wp-content文件夹的挂载卷
  • 1个装有/ var / lib / mysql
  • 卷的Mysql容器
  • 1个Nginx代理容器
  • 1让我们加密容器

这个配置是我在一台主机上有一个wordpress的时候。如果我需要在同一个主机上启动多个Wordpress,我会启动一个带有Nginx代理的堆栈+让我们加密,然后每个wordpress一个Wordpress / Mysql堆栈。

我从未直接暴露Wordpress容器端口,我的所有域/ vhost都由Nginx代理容器配置,并自动配置为使用来自Let的加密的SSL。

以下是我的 Rancher堆栈的一个示例,用于一台主机上的 Wordpress

    db:
      environment:
        MYSQL_PASS: MYSQL_PASS
      labels:
        io.rancher.container.pull_image: always
        io.rancher.scheduler.affinity:host_label: server=TARGET
      tty: true
      image: tutum/mysql:5.5
      volumes:
      - /home/docker/wordpress/mysql/lib:/var/lib/mysql:rw
      stdin_open: true
    letsencrypt:
      labels:
        io.rancher.container.pull_image: always
        io.rancher.scheduler.affinity:host_label: server=TARGET
      tty: true
      image: jrcs/letsencrypt-nginx-proxy-companion:latest
      volumes:
      - /home/docker/nginx-proxy/ssl:/etc/nginx/certs:rw
      - /var/run/docker.sock:/var/run/docker.sock:ro
      volumes_from:
      - proxy
      stdin_open: true
    proxy:
      ports:
      - 443:443/tcp
      - 80:80/tcp
      labels:
        io.rancher.sidekicks: letsencrypt
        io.rancher.container.pull_image: always
        io.rancher.scheduler.affinity:host_label: server=TARGET
      tty: true
      image: jwilder/nginx-proxy:latest
      volumes:
      - /etc/nginx/vhost.d
      - /usr/share/nginx/html
      - /var/run/docker.sock:/tmp/docker.sock:ro
      - /home/docker/nginx-proxy/ssl:/etc/nginx/certs:ro
      - /home/docker/nginx-proxy/vhost.d:/etc/nginx/vhost.d:rw
      stdin_open: true
    wordpress:
      environment:
        DB_NAME: DB_NAME
        DB_PASS: DB_PASS
        DB_USER: DB_USER
        LETSENCRYPT_EMAIL: LETSENCRYPT_EMAIL
        LETSENCRYPT_HOST: LETSENCRYPT_HOST
        VIRTUAL_HOST: www.nicolashug.com, nicolashug.com
        VIRTUAL_PORT: '80'
        WP_ADMIN_EMAIL: WP_ADMIN_EMAIL
        WP_ADMIN_PASSWORD: WP_ADMIN_PASSWORD
        WP_ADMIN_USER: WP_ADMIN_USER
        WP_PROTO: https
        WP_URL: www.nicolashug.com
      log_driver: ''
      labels:
        io.rancher.container.pull_image: always
        io.rancher.scheduler.affinity:host_label: server=TARGET
      tty: true
      log_opt: {}
      image: krustyhack/wordpress:latest
      links:
      - 'db:'
      volumes:
      - /home/docker/wordpress/wordpress/wp-content:/app/wp-content:rw
      stdin_open: true

当我的Wordpress容器第一次使用wp-cli自动安装Wordpress时,首先使用我的管理员登录名,密码,电子邮件等配置它,然后安装我的插件和我的模板。这使我可以启动很多Wordpress而无需通过URL安装它们。

当我在一台主机上需要多个Wordpress时,我使用相同的堆栈,但没有Nginx代理,让我们加密一部分放在一个单独的Rancher堆栈中。

即使我喜欢在这种情况下将所有应用程序/服务与Docker分开,我发现将Apache / PHP / Wordpress放在一个容器中也是最简单的。

我需要做的下一件事是将Mysql与堆栈分开,将所有数据库放在一台服务器上,但这不是讨论:p

对于你的问题,我会做的是每个Wordpress的一个堆栈,包含容器Apache / PHP,容器Mysql和另一个带有Nginx代理的堆栈,让我们对服务器上的所有Wordpress进行加密。

我希望我的英语不是太糟糕。 :)

答案 1 :(得分:0)

嗯,我同意你关于每个容器的一个过程,但是,我不再确定它。例如,本文已在Docker网站上发布:https://docs.docker.com/compose/wordpress/

要回答您的第二个问题,是的,您是对的,您只需要物理主机/容器的IP导航到您的WordPress安装。上面的链接也显示了如何做到这一点。

很好地取决于你想要实现的目标,因为没有好方法或坏方法,所有这些都与个人偏好和你正在运行的硬件有关。如果您有大量可用的磁盘空间和RAM,则每个WordPress安装都可以有一个DB,否则,您可以拥有一个包含所有WordPress DB的web_db。

更多信息:

https://www.sitepoint.com/how-to-use-the-official-docker-wordpress-image/
https://www.digitalocean.com/community/tutorials/how-to-install-wordpress-and-phpmyadmin-with-docker-compose-on-ubuntu-14-04