Я меняю инфраструктуру в AWS и хочу использовать Docker (ECS) с Fargate. Мой образ Docker основан на Ubuntu, и я устанавливаю в него все, что мне нужно. Я использую Laravel 5.6 на NGINX под управлением PHP 7.2. Мой контейнер Docker работает на моей локальной машине, и если я запускаю ECS с EC2, однако, когда я перехожу на Fargate, он возвращает ошибку NGINX 500. Я провел несколько тестов и знаю, что PHP работает, только когда я устанавливаю свое приложение Laravel, происходит ошибка.
Так как я не могу получить доступ к машине Fargate, я не знаю, как отлаживать. Я попытался соединить NGINX с Loggly, однако для этого требуется rsyslog, и, поскольку я использую Docker, он не может получить доступ к ядру Ubuntu. Когда я устанавливаю и пытаюсь запустить, он возвращает:
rsyslogd: imklog: cannot open kernel log (/proc/kmsg): Operation not permitted
Вот мой Dockerfile:
FROM ubuntu:latest
ENV BACKEND_PATH=/code/Backend
ENV FRONTEND_PATH=/code/Frontend
## Update
RUN apt-get update -y
## Upgrade
RUN apt-get install -y software-properties-common
RUN add-apt-repository -y ppa:certbot/certbot
RUN apt-get update -y
RUN apt-get upgrade -y
RUN apt-get dist-upgrade -y
RUN apt-get autoremove -y
RUN apt-get update -y
## Nano
RUN apt-get install -y nano
## Timezone
RUN echo "America/Sao_Paulo" > /etc/timezone && \
apt-get install -y tzdata && \
rm /etc/localtime && \
ln -snf /usr/share/zoneinfo/America/Sao_Paulo /etc/localtime && \
dpkg-reconfigure -f noninteractive tzdata && \
apt-get clean
## Git
RUN apt-get install -y git
## NGINX
RUN apt-get install -y nginx
COPY ./nginx/app/sites-available /etc/nginx/sites-available
COPY ./nginx/app/sites-available /etc/nginx/sites-enabled
COPY ./nginx/sites /etc/nginx/sites
COPY ./nginx/ssl /ssl
## PHP
RUN apt-get install -y php-cli php-fpm php-curl php-mbstring
COPY ./php/php.ini /usr/local/etc/php
# Install Composer
RUN curl -sS https://getcomposer.org/installer | php -- --install-dir=/usr/local/bin --filename=composer
# Install libs
RUN apt-get install -y php-zip php-mysql php-gd pngquant gifsicle jpegoptim libicu-dev g++ php-intl php-xml
## Crontab
RUN apt-get install -y cron
COPY crontab newcrontab
RUN crontab newcrontab
RUN rm newcrontab
## Supervisor
RUN apt-get install -y supervisor
COPY ./supervisord /etc/supervisor/conf.d
## Certbot
RUN apt-get install -y python-certbot-nginx
## Install apps
COPY ./code/Backend /code/Backend
COPY ./code/Frontend/dist /code/Frontend/dist
RUN cd ${BACKEND_PATH} && chmod +x composer.phar && ./composer.phar self-update && php composer.phar install
RUN chmod -Rf 777 ${BACKEND_PATH}/storage
RUN chmod -Rf 777 ${BACKEND_PATH}/resources
RUN php ${BACKEND_PATH}/artisan config:clear
RUN php ${BACKEND_PATH}/artisan passport:keys
## Run!
EXPOSE 80 443
RUN service php7.2-fpm start
CMD ["/usr/bin/supervisord"]
Я думаю, что эта ошибка как-то связана с разрешениями, но без сообщения об ошибке почти невозможно узнать, что происходит … У кого-нибудь есть идеи, как я могу это выяснить?
Проверьте этот ответ на ServerFault: https://serverfault.com/questions/691048/kernel-log-stays-empty-rsyslogd-imklog-cannot-open-kernel-log-proc-kmsg
Попробуйте запустить задачу Fargate с --privileged
флаг. Вы можете установить этот флаг в консоли AWS для каждого контейнера в определении задачи. Он находится в разделе БЕЗОПАСНОСТЬ в конце определения контейнера. Вот полная ссылка на определения контейнера.
Я понял. Действительно глупая ошибка на самом деле. Когда я создавал конфигурации Fargate, я использовал группу безопасности без разрешений для доступа к некоторым компонентам AWS, поэтому приложение не могло загрузиться.