Экземпляр Discourse находится за GFW, поэтому мы используем прокси SOCKS5 для Git. У нас установлено несколько плагинов, поэтому при пересборке или инициализации приложения все эти репозитории клонируются заново. К сожалению, клонирование регулярно приводит к тайм-ауту, и весь процесс начинается сначала, даже если самая последняя кодовая база уже была клонирована. Я потратил более 40 попыток и около пяти часов. Последним препятствием является подпроцесс yarn внутри контейнера, который обычно завершается тайм-аутом, что приводит к неудачному обновлению.
Есть ли способ структурировать app.yml так, чтобы хотя бы не запускать весь процесс клонирования плагинов? Клонирование в код docker-manager и код Discourse происходит с вероятностью 50/50, а последующее клонирование — с вероятностью успеха около 1/3. Я не знаю, что вызывает сбой подпроцесса yarn, но на данный момент кажется, что оживить Discourse с помощью имеющихся методов невозможно.
Конечно, я был настолько глуп, что выполнил launcher destroy app, так как хотел инициализировать его вручную, поэтому я даже не могу выполнить launcher enter app, чтобы попробовать запустить команду yarn вручную. У кого-нибудь есть идеи? Спасибо за ваши предложения.
Конечно. Я использую китайский исходный код Ruby во всех приложениях Rails, рад, что он хотя бы есть. Меня смущает вот что: все репозитории (включая репозитории плагинов) уже клонированы, но этот подпроцесс yarn запускает следующее:
INFO -- : > cd /var/www/discourse && [ ! -d 'node_modules' ] || su discourse -c 'yarn install --production && yarn cache clean'
По какой-то причине GFW не любит слишком много процессов git clone подряд, и в какой-то момент разрывает соединение. Если бы я мог запустить лаунчер с флагом, который говорит что-то вроде: «Ладно, чувак, код уже здесь, клонировать не нужно… просто выполни начальную настройку»,
Редактирование: Невозможно. Только что, пока мы печатаем, моя 78-я попытка наконец увенчалась успехом после 11 часов. Я прибегнул к sshuttle, который тоже потребовал около 12 попыток, но по какой-то причине GFW сжалился над моей бедной душой.
Именно это должен делать ваш собственный кэширующий прокси (так мне кажется). Попробуйте squid. Тогда вы увидите, что лаунчер подтягивается из вашего зеркала, а не из оригинального источника.
launcher не содержит кода, потому что он клонирует его в новый контейнер, где кода нет, поэтому он каждый раз скачивает весь код. Каждый. Раз.
Да, у нас есть определённый опыт работы с Squid. В любом случае требуется универсальное решение, так как я не могу тратить часы на ручное обновление Discourse каждый раз. Несколько месяцев работал обычный прокси SOCKS5, однако борьба с GFW превратилась в постоянную игру в «кто кого», а доступ к GitHub с начала октября стал настоящей головной болью. Неудивительно, что на сайте gitee.com появилось множество клонов.
Спасибо за объяснение про лаунчер. Я довольно неопытен в вопросах Docker и предполагал, что он клонирует репозитории Git локально, а затем переносит их в какой-то контейнер.
Я обязательно изучу варианты с Squid, так как это может помочь решить и мою вторую проблему: fonts.googleapis.com.
Здесь должно быть не git clones, а установка из реестра пакетов NPM. Определённо, для NPM/Yarn должен существовать аналог bundle config mirror.https://rubygems.org https://gems.ruby-china.com/.
О, сразу после этого запустился какой-то подпроцесс, который клонировал что-то и завершился с ошибкой. К сожалению, сейчас я не могу воспроизвести лог ошибки. Он точно что-то загружал с GitHub, так как сообщение об ошибке было таким же: ошибка рукопожатия TLS / тайм-аут. Но сейчас это уже не важно. Обычно npm по какой-то причине здесь никогда не испытывает тайм-аутов. Великий файрвол длинен и полон тайн!