Я знаю, что я очень близок к этому, но я не могу заставить работать последнюю часть. Я почти уверен, что это связано с тем, что контейнер WordPress и контейнер PHP должны быть в одном и том же каталоге? Итак, PHP может обрабатывать файлы в этом каталоге? Я работаю над этим уже полторы недели, и я ломаюсь, прошу помощи.
Я могу большинство из этого работает и в разных комбинациях - но не в этой конкретной комбинации.
Что я пытаюсь сделать, так это иметь отдельные контейнеры для MySQL (и совместно использовать базу данных) nginx-proxy WordPress с использованием Nginx (каждый сайт со своим собственным контейнером WordPress) PHP 7
У меня получилось работать с WordPress с помощью Apache, но это не то, чего я хочу.
Я много читал и много тестировал и обнаружил, что изначально мне не хватало VIRTUAL_PROTO=fastcgi. Я вижу конфиги, которые заполняются в контейнере nginx-proxy... они кажутся правильными, но я думаю, что моя путаница связана с путями и виртуальными средами.
Я создаю сеть докеров, создаю nginx-proxy
Это файлы и каталоги, которые у меня есть... /home/tj/db/docker-compose.yml /home/tj/mysite.com /home/tj/mysite.com/.env /home/tj/nginx-proxy /докер-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 protected]
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: последний» вместо «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.