юзер в контейнере

Говорим о серверах, развёртывании, нагрузках, выборе и использовании разных технологий и продуктов
Ответить
kukuruku
Сообщения: 1318
Зарегистрирован: 2011.02.14, 11:36

юзер в контейнере

Сообщение kukuruku »

использую докер https://github.com/yiisoft/yii2-app-bas ... ompose.yml
в итоге в контейнере проект с правами 1000:1000 изза того что нету юзера, и апач не может получить доступ к assets
как правильно запускать? вручную создать нужного юзера и настроить ему права?
Nex-Otaku
Сообщения: 831
Зарегистрирован: 2016.07.09, 21:07

Re: юзер в контейнере

Сообщение Nex-Otaku »

Я докер не знаю, но кажется в этом самом разделе видел, как нужного пользователя в конфиге докера прописывали.
kukuruku
Сообщения: 1318
Зарегистрирован: 2011.02.14, 11:36

Re: юзер в контейнере

Сообщение kukuruku »

возможно
но в readme https://github.com/yiisoft/yii2-app-basic ничего не написано
anton_z
Сообщения: 483
Зарегистрирован: 2017.01.15, 15:01

Re: юзер в контейнере

Сообщение anton_z »

chmod -R 777 assets в хостовой системе
kukuruku
Сообщения: 1318
Зарегистрирован: 2011.02.14, 11:36

Re: юзер в контейнере

Сообщение kukuruku »

про 777 знаю но это не правильное решение
надо решение через юзера и права
конечно можно руками сделать но где тогда автоматизация?
anton_z
Сообщения: 483
Зарегистрирован: 2017.01.15, 15:01

Re: юзер в контейнере

Сообщение anton_z »

Для producton правильное. Даже init yii делает 777 на assets. Вкупе с отключением выполнения php кода в каталогах, куда apache может писать это безопасно. Делать чтобы процесс apache имел права владельца на весь проект и мог изменять любой файл с кодом, согласитесь, небезопасно. Но это актуально только для production.

Для development можно сделать чтобы в контейнере пользователь www-data имел такой же uid и gid как и пользователь, от которого редактируется код приложения в хостовой системе. Если это подходит, могу показать как это делаю я. Помогает не только для assets и runtime, но и для кодогенерации с gii через веб-интерфейс.
kukuruku
Сообщения: 1318
Зарегистрирован: 2011.02.14, 11:36

Re: юзер в контейнере

Сообщение kukuruku »

читал что вместо 777 достаточно добавить апач или другой аккаунт в группу юзера
странно что приходится доделывать после развертывания
разве докер не должен все автоматизировать?
anton_z
Сообщения: 483
Зарегистрирован: 2017.01.15, 15:01

Re: юзер в контейнере

Сообщение anton_z »

В корень проекта кладем Dockerfile:

Код: Выделить всё


FROM yiisoftware/yii2-php:7.1-apache

ARG uid
ARG gid

RUN usermod -u $uid www-data

RUN chmod 755 /usr/local/bin/composer
RUN chown www-data:www-data /var/www

Правим docker-compose.yml (сервис php):

Код: Выделить всё

services:
  php:
    build:
      context: .
      args:
        - uid=${uid}
        
    volumes:
      - ~/.composer-docker/cache:/root/.composer/cache:delegated
      - ./:/app:delegated
    ports:
      - '8000:80'

Делаем два bash-скрипта:

app.sh:

Код: Выделить всё


#!/usr/bin/env bash
export uid=$(id -u)
export gid=$(id -g)
docker-compose up -d

build.sh:

Код: Выделить всё


#!/usr/bin/env bash
export uid=$(id -u)
export gid=$(id -g)
docker-compose build

Запускаем командой ./app.sh, если что-то поменяли в Dockerfile, ребилдим контейнеры командой ./build.sh

Повторюсь, все это годится только для development, для production не пойдет.

P.S. Докер это не серебрянная пуля, которая все и вся сразу делает красивым и удобным, это инструмент, к которому нужно найти подход.
kukuruku
Сообщения: 1318
Зарегистрирован: 2011.02.14, 11:36

Re: юзер в контейнере

Сообщение kukuruku »

если я правильно понял наличие файла docker-compose.yml не освобождает от донастройки запуска проекта?
anton_z
Сообщения: 483
Зарегистрирован: 2017.01.15, 15:01

Re: юзер в контейнере

Сообщение anton_z »

kukuruku писал(а): 2018.06.19, 10:51 если я правильно понял наличие файла docker-compose.yml не освобождает от донастройки запуска проекта?
Смотря что понимать под донастройкой. В большинстве случаев - нет, билдим свои образы, отдельно под development и production.
Если не нравится Dockerfile в репозитории проекта - отдельно билдим образ, выкладываем его в собственный docker registry или на dockerhub и ссылаемся в compose.
Ответить