Я просто хотел поделиться опытом для менее опытных и knowledgeable администраторов, которые с трудом разбираются в вещах. Всё началось с того, что я задал ему вопросы о некоторых lingering проблемах. Он давал мне команды и проводил меня через процесс. Но настоящий прорыв случился, когда я подключил Claude Code напрямую через SFTP и SSH…

После подключения он сделал удивительные вещи! Наш Discourse используется только для группы друзей, поэтому у нас нет большого бюджета на исправления, если что-то пойдёт не так. Недавно Claude Code обнаружил множество мелких проблем в моей конфигурации.
-
Исправил настройку S3 на Spaces. Я был близок, но всё ещё были проблемы с корректной загрузкой JS-активов при перестроении. Полная история здесь: Digital Ocean Spaces (S3) "unable to sign request without credentials set" - #20 by DavidO
- Он всё настроил правильно
-
Исправил загрузку JS для X.com в Discourse вместо использования API-ключа
-
Провёл меня через настройку CDN, параметры DNS Cloudflare и всё остальное
- Контролировал процесс перепекания (rebake)
-
Нашёл 4000 сиротских изображений Tapatalk из нашей старой миграции с phpBB и связал их
-
Преобразовал множество старых BBCode-тегов в HTML, чтобы изображения работали
-
Я показал ему скриншот нашего счёта, он проанализировал использование и обнаружил, что мой том Digital Ocean был полностью пуст. Кроме того, он дал мне уверенность нажать DELETE и сэкономить $/месяц. Я перенёс всё на S3, или, по крайней мере, я был почти уверен, что перенёс, но всё ещё слишком боялся удалить это. Очень стыдно, но я не хотел потерять ни одного фото.
Но ещё более весело было то, что он дал мне уверенность взяться за другой проект — возрождение нашего старого форума vBulletin, который работал с 2002 по 2016 год для студенческого клуба. Он пришёл в упадок и был окончательно выведен из эксплуатации после того, как «заразил» HIV несколько телефонов. Он смог взять старую резервную копию, распаковать её и восстановить.
Он проделал впечатляющую работу:
- Импортировал 12 394 темы и 282 096 сообщений
- База данных была настолько повреждена, что мы экспортировали её части как отдельные таблицы или фрагменты таблиц в виде CSV-файлов, поскольку полный SQL-файл не получался. Более 25 отдельных файлов. Он собрал всё вместе и создал файл импорта для Discourse.
- Мигрировал и восстановил связь 9504 изображений из резервной копии
- Затем он зашёл и нашёл недостающие изображения в WayBackMachine и других источниках. Я дал ему резервную копию phpGallery2, которую мы использовали тогда, и он нашёл ещё 288 изображений и связал их с 735 другими сообщениями.
- Я просто кидал ему директории и zip-архивы с резервными копиями, а он сортировал их, находил всёвозможные вещи и правильно их подключал
- К сожалению, он мало что мог сделать с более чем 7000 изображениями, которые были на Photobucket
- Подключил ещё 780 изображений по прямым ссылкам
- Восстановил 143 из 159 имён пользователей, которые ранее были удалены и отображались просто как «system»
- Также нашёл их аватары
- Он даже нашёл мой старый аватар — фотографию лучшего хорошего мальчика!
- Цензурировал более 5000 «студенческих» \(\)\(\)\(\)\(\) слов, ласково называемых: ОТЧЁТ ОБ ОСКОРБЛЕНИЯХ
- Создал новые логотипы на основе некоторых старых фрагментов, найденных в файлах
- Восстановил все классические эмодзи vBulletin и связал их со всеми сообщениями
- Он сообщил, что :flipoff2: был самым используемым эмодзи (19 191 раз), за ним следовали :rolleyes: и
(далекие аутсайдеры)
- Он сообщил, что :flipoff2: был самым используемым эмодзи (19 191 раз), за ним следовали :rolleyes: и
- Позволил выполнить поиск и замену для имён, номеров телефонов или email-адресов, которые были публичными
- Провёл меня через переход на API Resend
- Провёл меня через настройку SSL
- Провёл меня через настройку CORS
- Затем, прежде чем мы углубились в процесс, он запустил сканирование ClamAV на всех файлах
Он работал в фоновом режиме почти неделю, время от времени в течение нескольких сессий. Это было увлекательное окно в прошлое, когда мы находили фотографии и детали о поездках и проектах.
Я также глубоко впечатлён тем, что есть люди, которые понимают, что это делает…
Разрешить Claude выполнить:
cat << 'RUBY' > /tmp/tapatalk_analysis.rb
posts_with_tapatalk = Post.where("raw LIKE '%uploads/tapatalk/%'").where(deleted_at: nil)
dual_ref_count = 0
tapatalk_only_count = 0
tapatalk_only_files = []
posts_with_both = 0
posts_tapatalk_only = 0
posts_with_tapatalk.find_each do |post|
raw = post.raw
tapatalk_urls = raw.scan(/uploads\/tapatalk\/[^\s"'<>\]]+/)
has_upload_ref = raw.include?("upload://")
post_has_dual = false
post_has_only = false
tapatalk_urls.each do |url|
idx = raw.index(url)
next unless idx
start_pos = [idx - 200, 0].max
context = raw[start_pos..idx + 10]
if context && context.include?("upload://")
dual_ref_count += 1
post_has_dual = true
else
tapatalk_only_count += 1
post_has_only = true
tapatalk_only_files << url unless tapatalk_only_files.include?(url)
end
end
posts_with_both += 1 if post_has_dual
posts_tapatalk_only += 1 if post_has_only
end
puts "=== TAPATALK IMAGE ANALYSIS ==="
puts "Dual reference (upload:// + tapatalk): #{dual_ref_count} refs"
puts "Tapatalk only (no upload:// nearby): #{tapatalk_only_count} refs"
puts "Unique tapatalk-only files: #{tapatalk_only_files.length}"
puts "Posts with at least one dual ref: #{posts_with_both}"
puts "Posts with at least one tapatalk-only ref: #{posts_tapatalk_only}"
puts "—SAMPLE TAPATALK-ONLY FILES—"
tapatalk_only_files.first(15).each { |f| puts f }
RUBY
scp /tmp/tapatalk_analysis.rb root@23.21.11.54:/tmp/ 2>/dev/null && echo "Uploaded"
Чрезвычайно впечатляюще.
В любом случае, я просто хотел поделиться, на случай если эта идея поможет кому-то ещё начать что-то интересное. Сделайте хорошую резервную копию и давайте начинать!
Счастливого Discourse-ния. ![]()
