Документация на GCP предполагает, что правильным способом является использование App Engine / Node - пока вы не получите шаг, который говорит
Следуйте инструкциям на Ghost веб-сайт для установки Ghost в качестве NPM модуля.
Что ж, инструкции на сайте Ghost гласят: не устанавливайте Ghost как модуль NPM. Это не поддерживается.
Хорошо, а как насчет CloudRun? Я нашел этот чрезвычайно многообещающий образец на Git. Единственным недостатком является то, что он использует внутреннюю базу данных SqlLite, и мне нужно подключиться к существующей базе данных MySQL, размещенной на GCP.
Очевидно, существует какая-то проблема с подключением к базе MySQL, размещенной на хосте. на GCP через TCP. Не знаю почему, но есть прокси, который вы запускаете локально. Я могу запустить Ghost из командной строки, например:
ghost config --ip 0.0.0.0 --port 8080 --no-prompt --url http://localhost:8080 --db mysql --dbhost localhost --dbuser ghost_service --dbpass <pass> --dbname darkstore_blog_db
ghost start
И, похоже, он работает.
Однако, с теми же аргументами в Dockerfile, я получаю
app_1 | [2020-02-01 02:15:39] ERROR Invalid database host.
app_1 |
app_1 | Invalid database host.
app_1 |
app_1 | "Please double check your database config."
app_1 |
app_1 | Error ID:
app_1 | 500
Теперь это не абсурдно: контейнер Docker представляет собой VM-подобную вещь со своим собственным определением «localhost». Документация предлагает использовать вместо этого «host. docker .internal». Нет, тот же результат.
ОК, хорошо, мне не нужно запускать его на локальном Docker контейнере. Проблема в том, что если он работает под CloudRun, он, конечно, не может использовать прокси. Разумеется, я должен установить значение конфигурации "socketPath" на значение /cloudsql/mycompany-1943107437902:us-west1:mycompany-blog-db
.
Но нет способа установить socketPath! Это не аргумент для ghost config, и я не вижу способа предоставить файл конфигурации.
Так что я в тупике. Я немного раздражен из-за того, что
- люди из базы данных считают, что законно требовать четыре или пять отдельных аргументов - аргументов, которые не согласованы в разных СУБД - для открытия соединения
- людей-призраков, за то, что они не поддерживают то, что мне кажется очевидным вариантом использования из коробки
- людей из GCP, просто потому, что они действуют мне на нервы
Но В основном, я бы хотел пройти через это. Кто-то, должно быть, получил эту работу.