Отдельный интерфейс и бэкэнд с Heroku

У меня есть приложение, назовите его derpshow, состоящее из двух репозиториев, один для интерфейса и один для бэкэнд.

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

Возможно ли, чтобы оба приложения работали в одном домене, чтобы интерфейс мог вызвать бэкэнд на /api/*? Другим вариантом было бы обслуживание бэкэнд на api.derpshow.com и интерфейс на app.derpshow.com, но это несколько усложняет безопасность.

Каковы наилучшие методы для этого? Интерфейс - это просто статические файлы, поэтому его можно даже обслуживать с S3 или аналогичного, но мне все же нужны промежуточные и производственные среды и автоматическое тестирование и т.д.

Любые советы приветствуются!

Ответ 1

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

Предположим, что вы используете nginx в качестве веб-сервера, потому что его проще настроить. Файл конфигурации nginx будет выглядеть следующим образом:

# Server definition for project A
server {
    listen             80;
    server_name        derpshow.com www.derpshow.com;

    location / {
        # Proxy to gUnicorn.
        proxy_pass             http://127.0.0.1:<projectA port>;
        # etc...
    }
}

# Server definition for project B
server {
    listen             80;
    server_name        api.derpshow.com www.api.derpshow.com;

    location / {
        # Proxy to gUnicorn on a different port.
        proxy_pass             http://127.0.0.1:<projectBg port>;
        allow   127.0.0.1;
        deny    all;
        # etc...
    }
}

И вот оно.

OLD ANSWER: Попробуйте использовать nginx-buildpack, он позволяет запускать NGINX перед вашим сервером приложений на Heroku. Затем вам нужно запустить приложения на разных портах и ​​настроить один порт на api.derpshow.com и другие на app.derpshow.com, а затем вы можете ограничить вызовы на api.derpshow.com только с локального хоста.

Ответ 2

Я не использую Heroku, поэтому я отвечу на вопрос "без Heroku".

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

например:

dev.app.derpshow.com подключен к dev.api.derpshow.com и

app.derpshow.com подключен к api.derpshow.com

Как правило, вы можете развернуть dev для производства с помощью Git.

Для обеспечения безопасности вы находитесь в "системе" с перекрестным происхождением. Таким образом, ограничение в вашем домене от вашего приложения. Поэтому позже вы можете сделать другое приложение для соединения с вами, добавив домен снова. Поэтому никто не может использовать вас, апи.