【问题标题】:Docker + jwilder/nginx-proxy + jwilder/docker-gen + jrcs/letsencrypt-nginx-proxy-companion + php:7-fpm + wordpress:fpmDocker + jwilder/nginx-proxy + jwilder/docker-gen + jrcs/letsencrypt-nginx-proxy-companion + php:7-fpm + wordpress:fpm
【发布时间】:2020-05-03 16:46:14
【问题描述】:

我知道我真的很接近这一点,但我无法得到最后一部分 在职的。我几乎可以肯定它与 WordPress 有关 容器和 PHP 容器需要在同一个目录下吗?所以 PHP可以处理那个目录下的文件吗?我一直在努力 一个半星期,我崩溃了,寻求帮助。

我可以进行大部分工作和不同的组合 - 但不是这个 特殊组合。

我想要做的是为 MySQL 提供单独的容器(以及 共享数据库)使用 Nginx 的 nginx-proxy WordPress(每个站点都有 他们自己的 WordPress 容器)PHP 7

我已经使用 Apache 与 WordPress 一起工作,但事实并非如此 我想要什么。

我做了很多阅读和测试,确实发现我 最初缺少 VIRTUAL_PROTO=fastcgi。我看到的配置 填充在 nginx-proxy 容器中......它们看起来是正确的,但我认为 我的困惑与路径和虚拟环境有关。

我创建 docker network create nginx-proxy

这些是我拥有的文件和目录... /home/tj/db/docker-compose.yml /home/tj/mysite.com /home/tj/mysite.com/.env /home/tj/nginx-proxy/docker-compose.yml

/home/tj/db/docker-compose.yml

version: "3"

services:
   db:
     image: mysql:5.7
     volumes:
        - ../_shared/db:/var/lib/mysql
     restart: always
     environment:
        MYSQL_ROOT_PASSWORD: somewordpress
        MYSQL_DATABASE: wordpress
        MYSQL_USER: wordpress
        MYSQL_PASSWORD: wordpress
     container_name: db
     networks:
       - nginx-proxy

networks:
  nginx-proxy:
    external:
      name: nginx-proxy

/home/tj/mysite.com/.env

MYSQL_SERVER_CONTAINER=db
VIRTUAL_HOST=mysite.com
DBIP="$(docker inspect ${MYSQL_SERVER_CONTAINER} | grep -i 'ipaddress' | grep -oE '((1?[0-9][0-9]?|2[0-4][0-9]|25[0-5])\.){3}(1?[0-9][0-9]?|2[0-4][0-9]|25[0-5])')"
EMAIL_ADDRESS=tj@mysite.com
WORDPRESS_DB_NAME=wordpress
WORDPRESS_DB_NAME=wordpress
WORDPRESS_DB_USER=wordpress

/home/tj/mysite.com/docker-compose.yml

version: "3"

services:
   wordpress:
     image: wordpress:fpm
     expose:
        - 80
     restart: always
     environment:
        VIRTUAL_HOST: ${VIRTUAL_HOST}
        LETSENCRYPT_HOST: ${VIRTUAL_HOST}
        LETSENCRYPT_EMAIL: ${EMAIL_ADDRESS}
        WORDPRESS_DB_HOST: db:3306
        WORDPRESS_DB_USER: ${WORDPRESS_DB_USER}
        WORDPRESS_DB_PASSWORD: ${WORDPRESS_DB_USER}
        WORDPRESS_DB_NAME: ${WORDPRESS_DB_NAME}
        VIRTUAL_PROTO: fastcgi
        VIRTUAL_PORT: 3030
        VIRTUAL_ROOT: /usr/share/nginx/html
     container_name: ${VIRTUAL_HOST}
     volumes:
        - ../nginx-proxy/html:/usr/share/nginx/html:rw

networks:
  default:
    external:
      name: nginx-proxy

/home/tj/nginx-proxy/docker-compose.yml

version: '3'

services:
  nginx:
    image: nginx:1.17.7
    container_name: nginx-proxy
    ports:
      - 80:80
      - 443:443
    volumes:
      - conf:/etc/nginx/conf.d:ro
      - vhost:/etc/nginx/vhost.d
      - html:/usr/share/nginx/html
      - certs:/etc/nginx/certs
    labels:
      - com.github.jrcs.letsencrypt_nginx_proxy_companion.nginx_proxy=true
    restart: always

  dockergen:
    image: jwilder/docker-gen:0.7.3
    container_name: nginx-proxy-gen
    depends_on:
      - nginx
    command: -notify-sighup nginx-proxy -watch -wait 5s:30s /etc/docker-gen/templates/nginx.tmpl /etc/nginx/conf.d/default.conf
    volumes:
      - conf:/etc/nginx/conf.d
      - vhost:/etc/nginx/vhost.d
      - html:/usr/share/nginx/html
      - certs:/etc/nginx/certs
      - /var/run/docker.sock:/tmp/docker.sock:ro
      - ./nginx.tmpl:/etc/docker-gen/templates/nginx.tmpl:ro
    restart: always

  letsencrypt:
    image: jrcs/letsencrypt-nginx-proxy-companion
    container_name: nginx-proxy-le
    depends_on:
      - nginx
      - dockergen
    environment:
      NGINX_PROXY_CONTAINER: nginx-proxy
      NGINX_DOCKER_GEN_CONTAINER: nginx-proxy-gen
    volumes:
      - conf:/etc/nginx/conf.d
      - vhost:/etc/nginx/vhost.d
      - html:/usr/share/nginx/html
      - certs:/etc/nginx/certs
      - /var/run/docker.sock:/var/run/docker.sock:ro
    restart: always

  php-fpm:
    image: php:7-fpm
    container_name: php
    environment:
      - VIRTUAL_HOST=docker.nevistechnology.com
      - VIRTUAL_ROOT=/usr/share/nginx/html
      - VIRTUAL_PORT=9000
      - VIRTUAL_PROTO=fastcgi
    restart: always
    ports:
      - 9000
    volumes:
      - ./html:/usr/share/nginx/html

volumes:
  conf:
  vhost:
  html:
  certs:

networks:
  default:
    external:
      name: nginx-proxy

现在,如果我使用“wordpress:latest”,我能够开始工作 而不是“wordpress:fpm”,但我不想使用 Nginx 和 Apache ...Apache 使用大量内存,并且我拥有所有旧配置 和 Nginx 中的注释,所以我想让它工作。

我也想弄清楚一些 Dockerfile 的东西——比如 运行命令,但让我看看你们是否都可以帮助我 第一的。

另一件事 - 这更像是一个通用的 Linux 问题,但在 多年来我一直无法弄清楚,我只是默认 使用root,我知道这是不好的做法。所以,我有我的用户“tj” 我创建的像:

sudo useradd tj sudo usermod -aG sudo tj sudo usermod -aG docker tj sudo usermod -aG www-data tj sudo g+w /home/tj -R *

对于 Docker,我从 /home/tj 目录开始工作。当我 尝试去编辑文件或上传,我得到一个权限问题。但如果我 将目录和文件从www-data:www-data 更改为tj:www-data or tj:tj,它适用于我在 SFTP 或终端中,但随后有网络 问题,例如当我尝试上传时 - www-data 有权限问题 WordPress sid。

【问题讨论】:

  • 改进格式

标签: wordpress docker nginx docker-compose jwilder-nginx-proxy


【解决方案1】:

所以,我知道我在这里聚会迟到了,但我可能有一些答案,所以这里什么都没有:

我最终得到了它的运行以及更多,所有这些都在一个群体中,但我不得不对代理进行相当多的调整: https://github.com/PiTiLeZarD/nginx-proxy

我不得不考虑的是 fpm 图像只运行 php!任何资产或文件都必须绑定为 nginx-proxy 中的卷并进行配置,以便 nginx 获取文件而不是 fpm。在我调整过的 nginx-proxy 中,我在模板中添加了一些关于此的内容:

{{ if (exists (printf "/etc/nginx/static_files/%s" $host)) }}
root {{ printf "/etc/nginx/static_files/%s" $host }};
{{ end }}

vhost.d/default:我添加了一个部分:

location / {
    location ~ \.php$ {
        try_files /dev/null @upstream;
    }
    try_files /assets/$uri $uri @upstream;
}

我调整了所有内容以具有 LOCATION_PATH=@upstream 环境变量(我有很多服务,所以有些仍然使用默认的“/”)

vhost.d/default_location,我在那里添加了 fastcgi 配置:

    index index.php;
    fastcgi_split_path_info ^(.+\.php)(/.+)$;
    fastcgi_index index.php;
    fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;

有很多东西需要配置和跟踪,但请稍等,让它工作是可能的。

关于根/用户问题,我将 php-fpm 图像运行为 www-data:www-data(即 1000:1000)我还确保 1000:1000 链接到主机上的管理员用户,这这样我就不会一直遇到问题。

fpm 的 www.conf 有一个用户/组部分,您可以在其中指定 www-data/www-data,我为用户构建了我的图像:

# add a NOPASSWD to sudo for www-data
RUN printf 'www-data ALL=(ALL:ALL) NOPASSWD: ALL' | tee /etc/sudoers.d/www-data

# bind www-data user and group from 33:33 to 1000:1000
RUN rmdir /var/www/html \
    && userdel -f www-data \
    && if getent group www-data ; then groupdel www-data; fi \
    && groupadd -g 1000 www-data \
    && useradd -l -u 1000 -g www-data -G sudo www-data \
    && install -d -m 0755 -o www-data -g www-data /home/www-data \
    && find / -group 33 -user 33 2>/dev/null || echo "/var/www" | xargs chown -R 1000:1000

此步骤将负责将所有内容从 root:root 切换到 www-data:www-data。我还在我的 docker 镜像中安装了 sudo,我以前没有,但如果没有它,我遇到的问题很难解决。

不确定这是否有帮助,它有点脱节但话又说回来,运行它需要很多移动部件才能完美地组合在一起;)

【讨论】:

    猜你喜欢
    • 2020-12-31
    • 2017-03-19
    • 1970-01-01
    • 2015-09-25
    • 1970-01-01
    • 1970-01-01
    • 2018-04-29
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多