Я создаю приложение с Laravel и Firebird 2.5 и хочу запустить его на структуре сервера DigitalOcean. У нас есть 2 сервера для приложения, один для веб-сервисов (назовем его www) и один для сервисов баз данных. Я успешно выполнил настройку Mysql, и она хорошо работает, но мы все знаем, что Firebird — грубая. Итак, вот что мы сделали до сих пор:
Установите стек LEMP в www и Firebird 2.5 SuperServer. Как я уже сказал, это цифровые серверы Ocean, на обоих работает Ubuntu 14.04.
Мы создали SSH-туннель между двумя серверами со следующей структурой:
ssh -L 9500:127.0.0.1:3050 username@db_server_ip_address (Private address)
Но когда мы попытались соединить приложение на www с сервером базы данных, появилась следующая ошибка:
недоступная база данных
В файле конфигурации Laravel используются следующие настройки:
DB_HOST=127.0.0.1
DB_DATABASE=/home/username/database.gdb
DB_USERNAME=username
DB_PASSWORD=password
Учетные данные верны, мы можем использовать их на удаленном (дБ) сервере.
Как вы думаете, в чем может быть проблема? Это SSH туннелирование?
Предупреждение: я не так часто использую SSH и никогда не использовал SSH-туннелирование, мой ответ основан на просмотре документации.
ssh -L 9500:127.0.0.1:3050
не делает то, что вы думаете, что делает:
Указывает, что соединения с данным портом TCP или сокетом Unix на локальном (клиентском) хосте должны быть перенаправлены на данный хост и порт или сокет Unix на удаленной стороне. Это работает путем выделения сокета для прослушивания TCP порт на локальной стороне, необязательно привязанный к указанному bind_address, или в сокет Unix. Всякий раз, когда устанавливается соединение с локальным портом или сокетом, соединение перенаправляется по безопасному каналу, и соединение устанавливается либо хозяин порт HostPort, или сокет Unix remote_socket, с удаленной машины.
(от SSH (1))
Другими словами, насколько я могу судить, правильная команда будет:
ssh -L 9500:<ip-address of the Firebird server>:3050
Вторая проблема заключается в том, что в вашей конфигурации Laravel не указан порт, поэтому он, вероятно, все еще пытается подключиться к порту 3050 (порт Firebird по умолчанию) вместо настраиваемого порта 9500. Я не знаю Laravel, но собственность DB_PORT=9500
кажется логичным (но, возможно, эти свойства специфичны для вашего собственного развертывания, в этом случае вам может потребоваться проделать дополнительную работу).
Других решений пока нет …