Как настроить приложение Laravel на AWS ECS с помощью Fargate?
Изменить: мой первый вопрос: "Как связать контейнеры внутри определения задачи в AWS ECS с помощью Fargate?" Но, возможно, я ошибаюсь с самого начала, поэтому я изменил свой вопрос и сохранил содержание ниже:
Я пытаюсь развернуть простое приложение на основе Laravel на AWS через ECS.
Мой сервис работает, как ожидалось, в локальном файле docker-compose-yml.
Но на AWS я получаю: "nginx: [emerg] host not found in upstream "app" in /etc/nginx/conf.d/default.conf:12"
из моего журнала веб-контейнера.
Здесь контейнеры моей службы: web (nginx), приложение (Laravel), база данных (MySQL) и кеш (redis).
Я понимаю, что все контейнеры описания задачи имеют одно и то же пространство имен, поэтому нет необходимости связывать контейнер (мы не можем использовать атрибут ссылок с Fargate).
Можете ли вы помочь мне найти проблему здесь? Я слепой.
Здесь мой рабочий локальный файл docker-compose.yml:
version: '2'
services:
# The Application
app:
image: 696759765437.dkr.ecr.us-east-1.amazonaws.com/ali-
maison/tribe-migrate
volumes:
- /var/www/storage
env_file: '.env'
environment:
- "DB_HOST=database"
- "REDIS_HOST=cache"
# The Web Server
web:
image: 696759765437.dkr.ecr.us-east-1.amazonaws.com/ali-maison/laravel-web
ports:
- 80:80
# The Database
database:
image: mysql:5.6
volumes:
- dbdata:/var/lib/mysql
environment:
- "MYSQL_DATABASE=homestead"
- "MYSQL_USER=homestead"
- "MYSQL_PASSWORD=secret"
- "MYSQL_ROOT_PASSWORD=secret"
# redis
cache:
image: redis:3.0-alpine
volumes:
dbdata:
Здесь мой веб-контейнер Dockerfile:
FROM nginx:1.10
ADD vhost.conf /etc/nginx/conf.d/default.conf
WORKDIR /var/www
И мой vhost.conf:
server {
listen 80;
index index.php index.html;
root /var/www/public;
location / {
try_files $uri /index.php?$args;
}
location ~ \.php$ {
fastcgi_split_path_info ^(.+\.php)(/.+)$;
fastcgi_pass app:9000;
fastcgi_index index.php;
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_param PATH_INFO $fastcgi_path_info;
}
}
Ответы
Ответ 1
Из vhost.conf:
fastcgi_pass app:9000;
Имя хоста "app" работает для docker-compose, потому что это то, что вы назвали службой в файле docker-compose.yml. docker-compose создает новую сеть для контейнеров, которым она должна управлять, и эта сеть позволяет контейнерам ссылаться друг на друга по имени хоста без дальнейшей настройки.
Fargate не имеет этой функции, поэтому "приложение" не будет разрешено.
Единственный сетевой режим Fargate в настоящее время позволяет вам использовать специальный режим AWS, называемый awsvpc. Каждая задача, выполняемая в Fargate, получает свой собственный эластичный сетевой интерфейс (ENI), что означает, что каждая задача получает собственный IP-адрес. Вы можете дополнительно настроить ENI на наличие общедоступного IP-адреса, как и с ENI в экземпляре EC2.
Как разрешить контейнер приложения из контейнера nginx
В Fargate разверните определение своей задачи для сервера приложений (вкладка "Кластеp > Задачи" > щелкните идентификатор контейнера в столбце "Задачи" для вашего сервера приложений). Секция сети будет иметь частный IP-адрес.
Замените имя хоста "app" на этот ip в conf:
fastcgi_pass <private_ip>:9000;