No problem. I wish I could help you more, but unfortunately, I do not have enough knowledge on the subject. Hopefully someone that knows more will respond soon. I would also watch the topic that I linked to. It might eventually have a solution posted.
In the mean time, you might want to take a look at your logs and see if there are similarities to the logs posted in that topic. I’m pretty sure the logs you would be interested in can be found by adding /logs to your forum’s base URL. So it would look something like https://example.com/logs The user in that topic also mentions a proxy. Are you using a proxy?
If you can provide this type of information, it should be helpful to someone that reads this topic and has a better understanding on the subject.
We’d prefer if you could upload to try first (try.discourse.org), that way we don’t start getting image uploads all over the place. If the image fails to lightbox on try, then feel free to upload it here so the example doesn’t get deleted when try is reset each day. If the image lightboxes on try then the issue is specific to your configuration as @schungx stated.
У меня запущена версия 2.5.0.beta6, и я сталкиваюсь с той же проблемой.
Опция «создать миниатюры» активна, но лайтбокс не открывается, независимо от размера изображения.
У меня есть второй экземпляр Discourse, который работает уже несколько месяцев. Там лайтбокс работает в старых постах, но не в новых.
Возможно, это проблема, связанная с обновлением?
Если я загружаю то же изображение на try.discourse.org, то там лайтбокс работает корректно.
Это говорит о том, что где-то в вашей настройке есть проблема. Пожалуйста, проверьте консоль браузера на наличие ошибок или предоставьте ссылку на сайт, с которым у вас возникли трудности.
Я только что создал там тестовую тему на новом экземпляре Discourse, который я настроил на прошлой неделе.
Изображение имеет размер 1920x1050, но не открывается в лайтбоксе. https://dis.ctb.co.at/t/test-image-lightbox/44
При второй установке, на которой лайтбокс ранее работал, путь изначально был “/var/docker”, но позже я изменил его на другое расположение.
Возможно, проблема с лайтбоксом возникла именно из-за смены пути — точно не уверен.
Может быть, я упустил какие-то настройки для нового пути?
Приведённые выше строки — единственные, которые я нашёл, указывающие на исходную директорию “/var/docker”.
Я только что попытался переместить его обратно в “/var/discourse”, чтобы подтвердить, что именно изменение пути вызвало проблему, но с исходным путём та же самая ошибка.
Кроме того, он работает за обратным прокси-сервером nginx, который выполняет шифрование SSL, если это имеет значение, но я не менял ничего в конфигурации там с момента, когда это перестало работать на другой установке.
Я выполнил следующие настройки для nginx в соответствующем файле .yml.
Если дело не в пути, что ещё может вызвать эту проблему с лайтбоксом?
Я вернул его обратно в “/var/docker/dis.ctb.co.at”.
Вот моя текущая конфигурация yml (изменены только личные данные). Возможно, ошибка здесь, или это проблема самого Discourse?
## это шаблон контейнера Docker Discourse «всё в одном», автономный
##
## После внесения изменений в этот файл вы ОБЯЗАНЫ выполнить пересборку
## /var/discourse/launcher rebuild app
##
## БУДЬТЕ *ОЧЕНЬ* ОСТОРОЖНЫ ПРИ РЕДАКТИРОВАНИИ!
## YAML-ФАЙЛЫ ЧРЕЗВЫЧАЙНО ЧУВСТВИТЕЛЬНЫ К ОШИБКАМ В ПРОБЕЛАХ И ВЫРАВНИВАНИИ!
## для проверки файла обращайтесь на http://www.yamllint.com/ по мере необходимости
templates:
- "templates/postgres.template.yml"
- "templates/redis.template.yml"
- "templates/web.template.yml"
- "templates/web.ratelimited.template.yml"
## Раскомментируйте эти две строки, если хотите добавить Lets Encrypt (https)
# - "templates/web.ssl.template.yml"
# - "templates/web.letsencrypt.ssl.template.yml"
## какие TCP/IP-порты должен открывать этот контейнер?
## Если вы хотите, чтобы Discourse использовал порт совместно с другим веб-сервером, например Apache или nginx,
## см. https://meta.discourse.org/t/17247 для подробностей
expose:
# - "80:80" # http
# - "443:443" # https
- "127.0.0.1:3041:80"
docker_args:
- "--network=nginx-br"
params:
db_default_text_search_config: "pg_catalog.english"
## Установите db_shared_buffers максимум в 25% от общего объёма памяти.
## будет установлено автоматически при загрузке на основе обнаруженной оперативной памяти, либо вы можете переопределить
db_shared_buffers: "4096MB"
## может улучшить производительность сортировки, но увеличивает использование памяти на соединение
#db_work_mem: "40MB"
## Какую ревизию Git должен использовать этот контейнер? (по умолчанию: tests-passed)
#version: tests-passed
env:
LANG: en_US.UTF-8
# DISCOURSE_DEFAULT_LOCALE: en
## Сколько одновременных веб-запросов поддерживается? Зависит от памяти и количества ядер CPU.
## будет установлено автоматически при загрузке на основе обнаруженных процессоров, либо вы можете переопределить
UNICORN_WORKERS: 8
## TODO: Доменное имя, на которое будет реагировать этот экземпляр Discourse
## Обязательно. Discourse не будет работать с чистым IP-адресом.
DISCOURSE_HOSTNAME: dis.ctb.co.at
## Раскомментируйте, если хотите, чтобы контейнер запускался с тем же
## именем хоста (опция -h), что указано выше (по умолчанию "$hostname-$config")
#DOCKER_USE_HOSTNAME: true
## TODO: Список email-адресов через запятую, которые станут администраторами и разработчиками
## при первой регистрации, например 'user1@example.com,user2@example.com'
DISCOURSE_DEVELOPER_EMAILS: 'nothing@nothing.com'
## TODO: SMTP-сервер, используемый для проверки новых учётных записей и отправки уведомлений
## SMTP-адрес, имя пользователя и пароль обязательны
## ВНИМАНИЕ: символ '#' в пароле SMTP может вызвать проблемы!
DISCOURSE_SMTP_ADDRESS: mailserver.nothing.com
DISCOURSE_SMTP_PORT: 25
DISCOURSE_SMTP_USER_NAME: nothing@nothing.com
DISCOURSE_SMTP_PASSWORD: "secret"
DISCOURSE_SMTP_ENABLE_START_TLS: false # (необязательно, по умолчанию true)
DISCOURSE_SMTP_OPENSSL_VERIFY_MODE: none
## Если вы добавили шаблон Lets Encrypt, раскомментируйте ниже, чтобы получить бесплатный SSL-сертификат
# LETSENCRYPT_ACCOUNT_EMAIL: me@example.com
## Адрес CDN http или https для этого экземпляра Discourse (настроен на извлечение)
## см. https://meta.discourse.org/t/14857 для подробностей
#DISCOURSE_CDN_URL: https://discourse-cdn.example.com
VIRTUAL_HOST: dis.ctb.co.at
VIRTUAL_PORT: 9002
LETSENCRYPT_HOST: dis.ctb.co.at
LETSENCRYPT_EMAIL: nothing@nothing.com
## Контейнер Docker не сохраняет состояние; все данные хранятся в /shared
volumes:
- volume:
host: /var/docker/dis.ctb.co.at/shared/standalone
guest: /shared
- volume:
host: /var/docker/dis.ctb.co.at/shared/standalone/log/var-log
guest: /var/log
## Плагины размещаются здесь
## см. https://meta.discourse.org/t/19157 для подробностей
hooks:
after_code:
- exec:
cd: $home/plugins
cmd:
- git clone https://github.com/discourse/docker_manager.git
## Любые пользовательские команды для запуска после сборки
run:
- exec: echo "Начало пользовательских команд"
## Если вы хотите установить адрес электронной почты «От» для вашей первой регистрации, раскомментируйте и измените:
## После получения первого письма о регистрации закомментируйте строку обратно. Выполнять нужно только один раз.
#- exec: rails r "SiteSetting.notification_email='info@unconfigured.discourse.org'"
- exec: echo "Конец пользовательских команд"
- replace:
filename: /etc/nginx/conf.d/discourse.conf
from: "types {"
to: |
set_real_ip_from 172.18.0.0/16;
real_ip_header X-Forwarded-For;
real_ip_recursive on;
types {
Теперь я понял, что это происходит только если опция Заставить ваш сайт использовать только HTTPS активна в момент создания поста с изображением.
У меня эта настройка была включена на другой установке с самого начала, но вдруг перестала работать — возможно, из-за обновления nginx или Discourse.
Пока что в логах nginx ничего подозрительного не видно.
Обычно это связано с некорректной настройкой сложных схем обратного прокси, судя по моему опыту. Подпапка добавляет дополнительную сложность (и, следовательно, переменные), а также.
Я запускаю две отдельные установки Discourse через этот прокси nginx, а также экземпляр Nextcloud. На первой установке Discourse лайтбокс работал раньше, а затем внезапно перестал. На самом деле я ничего не менял в конфигурации прокси, так как она работала.
Интересно, что он всё ещё создаёт некоторые файлы и папки в /var/discourse, даже если я не указывал тома для этой директории.
Никогда не случалось, чтобы файлы создавались в /var/discourse, возможно, я видел какие-то старые файлы.
Теперь я переключился с nginx на traefik, чтобы убедиться, что проблема не в nginx, но проблема всё ещё сохраняется. Это говорит мне о том, что проблема, вероятно, на стороне Discourse, а не прокси.
Такая же ситуация с traefik: если при публикации изображения опция «Принудительный HTTPS» отключена, то лайтбокс работает нормально, даже если я включу «Принудительный HTTPS» позже.
Что ещё можно проверить?
В файле журнала отображается ошибка, указывающая на невозможность доступа к /uploads/....
Не удалось получить доступ к '/uploads/default/original/1X/fe2af548af4a22f4802ddaa54afa557ae557417c.png' для получения его размеров.
Я могу открыть изображение без проблем, если введу URL в веб-браузер: https://domain.com/uploads/default/original/1X/fe2af548af4a22f4802ddaa54afa557ae557417c.png
Завершено 200 OK за 23 мс (Views: 0.3 мс | ActiveRecord: 0.0 мс | Выделения памяти: 3000)
Завершено 200 OK за 318 мс (Views: 1.2 мс | ActiveRecord: 0.0 мс | Выделения памяти: 50347)
Не удалось получить доступ к '/uploads/default/original/1X/fe2af548af4a22f4802ddaa54afa557ae557417c.png' для получения его размеров.
Запущен запрос GET "/posts/96" для 84.115.50.36 в 2020-07-04 14:15:14 +0000
Обработка контроллером PostsController#show в формате JSON
Параметры: {"id"=>"96"}
При отключённом принудительном использовании HTTPS ошибок не возникает.
Завершено 200 OK за 18 мс (Views: 0.3 мс | ActiveRecord: 0.0 мс | Выделения памяти: 3050)
Завершено 200 OK за 296 мс (Views: 0.5 мс | ActiveRecord: 0.0 мс | Выделения памяти: 49562)
Запущен запрос GET "/posts/97" для 84.115.50.36 в 2020-07-04 14:17:43 +0000
Обработка контроллером PostsController#show в формате JSON
Параметры: {"id"=>"97"}
Мне кажется, что Discourse по какой-то причине снова загружает изображение с веб-сервера для выполнения каких-то действий с лайтбоксом.
Если я вручную загружаю это изображение внутри контейнера Docker с Discourse, то система пытается получить к нему доступ напрямую через внутренний IP-адрес веб-сервера, а не через прокси. Это работает через HTTP, но не через HTTPS.
На самом веб-сервере доступен только HTTP, но система пытается получить к нему доступ через HTTPS, что приводит к ошибке.
Меня удивляет, почему Discourse снова загружает изображение с веб-сервера вместо того, чтобы обращаться к нему внутренне без использования HTTP/HTTPS.
Редактирование: Я обнаружил, что переименовал файл app.yml в domain.name.yml, из-за чего Docker изменил DNS-имя domain.name на его внутренний IP-адрес. Я переименовал его в domain_name.yml, и теперь всё работает корректно.