LINUX.ORG.RU

Ссылка на хостовую папку из nginx'а

 , ,


1

1

Здравствуйте. Одолеваю связку nginx+php_fpm (richarvey/nginx-php-fpm). Из коробки все подымается нормально, пых-скрипты откликаются.

Однако не сильно удобно с каждым файликом бегать в контейнер. Хочу соорудить линк с контейнерной папки /usr/share/nginx/html на хостовую /var/www/html. Стартую:

sudo docker run --name docker-nginx -p 80:80 -d -v /var/www/html:/usr/share/nginx/html nginx

При заходе на пхп-скрипт получаю загрузку оного вместо выполнения.

Подскажите, пожалуйста, чего ему надобно? Благодарю.



Последнее исправление: WennY (всего исправлений: 1)

При заходе на пхп-скрипт получаю загрузку оного вместо выполнения.

Ну, да, там же запускается только nginx, в нём php нет. Нужно или отдельный контейнер и вручную настраивать привязки, или использовать один из готовых контейнеров. Я использую richarvey/nginx-php-fpm

KRoN73 ★★★★★
()
Ответ на: комментарий от KRoN73

Рекомендую не вручную запускать, а использовать docker-compose. Типовое LAMP-решение у меня выглядит обычно таким образом:

.env

MYSQL_ROOT_PW=XXXXXXXXXX
COMPOSE_PROJECT_NAME=myforum
VIRTUAL_HOST=myforum.ru


docker-compose.yml
version: '3'
services:

 www:
  container_name: ${COMPOSE_PROJECT_NAME}
  image: richarvey/nginx-php-fpm:latest
  restart: always
  environment:
    VIRTUAL_HOST: ${VIRTUAL_HOST}
    MYSQL_ROOT_PW: ${MYSQL_ROOT_PW}
    ERRORS: 1
    REAL_IP_HEADER: 1
    REMOVE_FILES: 0
    PGID: 1973
    PUID: 1973
    TZ: "Europe/Moscow"
  volumes:
    - ./etc-nginx/default.conf:/etc/nginx/sites-available/default.conf:ro
    - ./vanilla-git:/var/www/html
    - ./local/themes/bootstrap:/var/www/html/themes/bootstrap
    - /var/log/docker-logs/${VIRTUAL_HOST}/nginx:/var/log/nginx

 db:
  container_name: ${COMPOSE_PROJECT_NAME}_db
  image: mariadb
  restart: always
  environment:
    MYSQL_ROOT_PASSWORD: ${MYSQL_ROOT_PW}
    TZ: "Europe/Moscow"
  volumes:
    - ./etc-mysql-conf.d/:/etc/mysql/mariadb.conf.d
    - ./var-lib-mysql:/var/lib/mysql
    - /var/log/docker-logs/${VIRTUAL_HOST}/mysql:/var/log/mysql

networks:
    default:
        external:
            name: nginx-proxy

KRoN73 ★★★★★
()
Ответ на: комментарий от KRoN73

Ну и сам nginx-proxy:

version: '3'
services:
  nginx_proxy:
    image: jwilder/nginx-proxy
    container_name: nginx_proxy
    restart: always
    volumes:
      - /var/run/docker.sock:/tmp/docker.sock:ro
      - ./ip-forward.inc:/etc/nginx/conf.d/http_realip.conf:ro
    environment:
      DEFAULT_HOST: my-default-host.ru
    ports:
      - "80:80"
    networks:
      - nginx-proxy

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


ip-forward.inc
set_real_ip_from    172.16.0.0/12;
real_ip_header      X-Real-IP;

KRoN73 ★★★★★
()
Ответ на: комментарий от KRoN73

Спасибо за ответ! А как-то можно автоматизировать запуск сервисов при деплое контейнера? Я долго недоумевал, с какого бадуна после ребута конта вдруг серв перестает откликаться из-вне... потом нащупал.

WennY
() автор топика
Ответ на: комментарий от WennY

А как-то можно автоматизировать запуск сервисов при деплое контейнера?

В тот же docker-compose можно вписать свой стартовый код. Например, вот так у меня ZeroNet стартует, при каждом старте включая мультиюзер-прокси:

version: '3'
services:

  proxy:
    container_name: proxy.zites.cf
    image: nofish/zeronet
    restart: always
    environment:
      ENABLE_TOR: "true"
    volumes:
      - ./data:/root/data
      - ./log:/root/log
      - ./zeronet.conf:/root/zeronet.conf
    ports:
      - "26552:26552"
      - "127.0.0.1:43110:43110"
    command: "sh -c ' ( [ -e /root/plugins/disabled-Multiuser ] && rm -rf /root/plugins/Multiuser && mv /root/plugins/disabled-Multiuser /root/plugins/Multiuser ) && (/usr/bin/tor &) && python zeronet.py --ui_host proxy.zites.cf 127.0.0.1:43110 --ui_ip 0.0.0.0 --fileserver_port 26552'"


Вот это последнее command — то, что стартует вместо штатного запуска, прописанного в контейнере.

KRoN73 ★★★★★
()
Ответ на: комментарий от WennY

А yml'ками можно Dockerfile полностью заменить?

Нельзя. Docker-файл — это инструкция, как создавать образ. docker-compose.yml — это инструкция, как запускать образ. Это замена docker run.

Хотя теоретически можно в docker-compose, наверное, прописать те же действия, что выполняются в Dockerfile при создании нового образа из базового. Но это ж сколько тормозить будет при каждом старте! :D

KRoN73 ★★★★★
()
Ответ на: комментарий от KRoN73

Меня тут просто дилемма тру-кодера одолевает... Вот у меня сейчас небольшой конт с конфигом: пых+жинкс+редис. Нагрузка смешная.

Вот если я удумаю запилить тот же набор, но чуть с другими настройками (например, уже под хайлод), мне как хорошему мальчику как сподобиться: разбить на микросервисы и докерфайлом на месте подшаманивать нужные настройки или на каждую задачу держать полноценный, настроенный конт на докерхабе, который yml'кой деплоить?

WennY
() автор топика
Ответ на: комментарий от WennY

В первом случае мы собираем конструктор, но конфить его извольте сами; во втором - клон на 99%, зато заводимся композером.

WennY
() автор топика
Ответ на: комментарий от WennY

Я просто не знаю, как принято поступать в таких случаях. А то уже вижу дюжины контов с разницей в полтора килобайта...

WennY
() автор топика
Ответ на: комментарий от WennY

Вот если я удумаю запилить тот же набор, но чуть с другими настройками (например, уже под хайлод)

Настройки тех же php/nginx/mysql делаются мапингом конфигов в контейнер — у меня выше в примерах так сделано.

Делать свой собственный образ имеет смысл, только если ты типовое решение (какие-то приложения, сервисы) в одинаковом варианте используешь массово, на многих машинах.

У меня такой задачи нет, самый высокий общий уровень — LAMP-связка. А конкретные сайты уже все индивидуальны. Поэтому я просто использую готовые образы nginx+php и mysql. А уже их, если надо, настраиваю локальными конфигами.

KRoN73 ★★★★★
()
Ответ на: комментарий от WennY

зато заводимся композером

А это, считай, обязательный инструмент :D

KRoN73 ★★★★★
()
Ответ на: комментарий от WennY

Конфиги снаружи пробрасывай, либо рендери чем угодно на основании, например, переменных окружения, которые устанавливаются при запуске контейнера.

leave ★★★★★
()
Ответ на: комментарий от KRoN73

Настройки тех же php/nginx/mysql делаются мапингом конфигов в контейнер — у меня выше в примерах так сделано. >>

Т.е. несколько отдельных контов можно в один втиснуть? или они будут все же в разных инстансах пребывать?

WennY
() автор топика
Ответ на: комментарий от WennY

Т.е. несколько отдельных контов можно в один втиснуть? или они будут все же в разных инстансах пребывать?

Образ один. И место за одного занимает, поскольку контейнеры через aufs/overlayfs/аналоги делаются. А вот самих контейнеров (инстансов) — сколько надо, как минимум, по одному набору (php-nginx + mysql) на сайт :)

KRoN73 ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.