Не работают curl запросы к API

Всё что касается построения API
Ответить
emeraudx
Сообщения: 4
Зарегистрирован: 2023.02.27, 11:58

Не работают curl запросы к API

Сообщение emeraudx »

Добрый день, форумчане!

Проблема такая. Переставил сайт на yii advanced - docker - nginx - php-fpm. Внутри проекта есть такие папки:
- admin (бывший backend)
- adminapi (бывший frontend).

URL, прописанные в etc/hosts (на локальной машине Ubuntu, не в контейнере):
127.0.0.1 admin.wise
127.0.0.1 adminapi.wise

В папке adminapi находится мой Rest API, URL которого без проблем простукиваются через Postman. Т.е. отправив запрос в постамане, я получаю нужные ответы от API. Однако, из браузера, т.е. из админки в папке admin, достучаться через curl до эндпоинтов в папке adminapi не получается. Пока сидел на апаче - всё работало без проблем.
Получается, сам сайт находится в папке admin, к нему я попадают через браузер по URL admin.wise. Он работает через API, которое находится в папке adminapi. Curl мне что только не писал: Couldn't connect to server, couldn't resolve the host и т.д. Перепробовал всё, два дня уже курю гугл, но без результатов. Примерно где-то внутри что-то мне подсказывает, что дело в контейнерах, но я не могу понять что именно надо сделать. Постман ведь спокойно стучится до эндпоинтов и ответы приходят.
Например: ввожу в постмане URL http://adminapi.wise/<эндпоинт> и получаю нужный ответ. А через браузер по тому же URL через Curl достучаться уже не могу.

Помогите кто чем может пжста.

docker-compose.yml

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

version: '3'

services:
  nginx:
    image: nginx:latest
    ports:
      - 80:80
    volumes:
      - ./.dev/docker/nginx/site.conf:/etc/nginx/conf.d/default.conf
      - ./:/app
    depends_on:
      - php-fpm

  php-fpm:
    build: ./.dev/docker/php
    env_file:
      - ./.env
    volumes:
      - ./:/app
    working_dir: /app

  db:
    image: mariadb:10.11
    environment:
      MYSQL_DATABASE: database_db
      MYSQL_ROOT_PASSWORD: colt
    volumes:
      - ./developer/mysql/db:/var/lib/mysql
      - ./developer/mysql/logs:/var/log/mysql
      - ./developer/mysql/conf:/etc/mysql/conf.d
      - ./developer/mysql/mysql-dump:/docker-entrypoint-initdb.d
    command: --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci

.dev/docker/nginx/site.conf

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

map $http_x_forwarded_proto $fastcgi_param_https_variable {
    default off;
    https off;
}

server {
    server_name admin.wise;
    listen 80;
    listen [::]:80;
    root /app/admin/web;
    index index.php;

    location / {
        try_files $uri /index.php?$args;
    }

    location ~ \.php$ {
        fastcgi_pass php-fpm:9000;
        fastcgi_split_path_info ^(.+\.php)(/.+)$;
        include fastcgi_params;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
    }
}

server {
    server_name adminapi.wise;
    listen 80;
    listen [::]:80;
    root /app/adminapi/web;
    index index.php;

    location / {
        try_files $uri /index.php?$args;
    }

    location ~ \.php$ {
        fastcgi_pass php-fpm:9000;
        fastcgi_split_path_info ^(.+\.php)(/.+)$;
        include fastcgi_params;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
    }
}

.dev/docker/php/Dockerfile

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

FROM php:8.2.8-fpm

RUN apt-get update && apt-get upgrade -y && apt-get install -y unzip && apt-get install -y curl

# install-php-extensions
ADD https://github.com/mlocati/docker-php-extension-installer/releases/latest/download/install-php-extensions /usr/local/bin/
RUN chmod +x /usr/local/bin/install-php-extensions && install-php-extensions gd mcrypt pdo_mysql xdebug zip
# /install-php-extensions

RUN curl -sS https://getcomposer.org/installer | php -- --install-dir=/usr/local/bin --filename=composer --quiet

RUN groupadd --gid 1000 dockerGroup
RUN useradd --uid 1000 --gid dockerGroup --shell /bin/bash --create-home andrey

USER andrey
Запросы, отправляемые через Curl в подпроекте admin (одна из вариаций, которую пробовал):

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

$ch = curl_init();
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);
curl_setopt($ch, CURLOPT_URL, 'http://adminapi.wise/v1/administrator/login');
curl_setopt($ch, CURLOPT_FAILONERROR, 1);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_TIMEOUT, 50);
curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
curl_setopt($ch, CURLOPT_USERAGENT, $user_agent);
Аватара пользователя
samdark
Администратор
Сообщения: 9489
Зарегистрирован: 2009.04.02, 13:46
Откуда: Воронеж
Контактная информация:

Re: Не работают curl запросы к API

Сообщение samdark »

Домен пингуется?
emeraudx
Сообщения: 4
Зарегистрирован: 2023.02.27, 11:58

Re: Не работают curl запросы к API

Сообщение emeraudx »

samdark писал(а): 2024.02.11, 11:52 Домен пингуется?
Я не пробовал, но вряд ли. Я пробовал отправлять curl запросы не только по URL adminapi.wise, но и по localhost:9000.
Проблема точно с контейнерами, т.к. раньше на апаче у меня было кол-во контейнеров по кол-ву папок. Т.е. у меня есть папки admin и adminapi, и я создавал такие же контейнеры как и было сделано из коробки yii advanced:

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

version: '3.9'

services:

  admin:
    container_name: admin
    build: admin
    ports:
      - 8001:80
    volumes:
      # Re-use local composer cache via host-volume
      - ~/.composer-docker/cache:/root/.composer/cache:delegated
      # Mount source-code for development
      - ./:/app

  adminapi:
    container_name: adminapi
    build: adminapi
    ports:
      - 8002:80
    volumes:
      # Re-use local composer cache via host-volume
      - ~/.composer-docker/cache:/root/.composer/cache:delegated
      # Mount source-code for development
      - ./:/app
Соответственно, я достукивался до API через контейнер, т.е. отправлял curl запросы на: http://adminapi
А сейчас у меня один контейнер, а все подпрооекты из папок доступны по прямым URL типа http://adminapi.wise и http://admin.wise, и я не понимаю как отправлять curl запросы внутри контейнера
Аватара пользователя
SiZE
Сообщения: 2817
Зарегистрирован: 2011.09.21, 12:39
Откуда: Perm
Контактная информация:

Re: Не работают curl запросы к API

Сообщение SiZE »

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

ports:
      - 8001:80
А что проксирует на 8001 порт?
emeraudx
Сообщения: 4
Зарегистрирован: 2023.02.27, 11:58

Re: Не работают curl запросы к API

Сообщение emeraudx »

SiZE писал(а): 2024.02.11, 15:52

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

ports:
      - 8001:80
А что проксирует на 8001 порт?
В данный момент у меня таких прокси нет. В прошлом сообщении я дал пример docker-compose.yml из коробки. А в треде (самом первом сообщении) написал тот docker-compose.yml, который есть у меня сейчас
Аватара пользователя
maleks
Сообщения: 1992
Зарегистрирован: 2012.12.26, 12:56

Re: Не работают curl запросы к API

Сообщение maleks »

Получилось?
Может extra_hosts для этого?
emeraudx
Сообщения: 4
Зарегистрирован: 2023.02.27, 11:58

Re: Не работают curl запросы к API

Сообщение emeraudx »

maleks писал(а): 2024.02.20, 10:14 Получилось?
Может extra_hosts для этого?
Не получилось. Я сделал немного по-другому. Я создал доп контейнер на двигле apache, а потом прокидываю curl запросы из основного контейнера туда. Так работает, но понимаю, что колхоз
Ответить