Pull to refresh

Comments 23

Извините за вопрос не совсем по теме, но никак не могу найти ни в Интернете ни тут на Хабре. Или не знаю как точно искать.
Вот у меня есть программа и я хочу, чтобы она автоматически обновлялась. Откуда ей скачивать новую версию? Всякие диски от Гугла и Яндекса не подходят, как я понял. Т.к. нет постоянной ссылки, а ещё в них ограничения на количество скачивающих.
Организовать домашний сервер? Подошло бы и отдавать только торрент-файл, чтобы снять нагрузку на домашний ПК. Есть у кого информация или даже опыт в таком?

app <-> master server <-> update server

Создаете такую структуру


В программу прописываете адрес на мастер сервер. А в мастере можете писать уже адрес на любой сервис или ресурс откуда тягаете обновление и передаете данные через мастер сервер орбратно на приложение. Так же удобно, что при изменении настроек/адресов на новые сервера обновления - app не надо менять так как все что надо знать app это адрес мастер сервера.

Не проще ли в этот мастер сервер и заливать обновления?
Например, запущу его дома на отдельном ПК. Мне не требуется скачивать обновление где угодно. IP-адрес можно ведь сделать статичным и так же жёстко прописать в программе.

Всё зависит от ваших задач. Но вы должны осознавать одну вещь. Если вы распространяете ПО, которое должно обновляться. Но вы в него в жёсткую пропишите IP адрес с обновлениями, может приключиться не хорошая ситуация, когда у вас по какой-либо причине сменится IP. Провайдер его вам принудительно изменит, вы смените провайдеры, то ваше ПО уже за обновлениями не достучится. И клиента просить или заставлять менять какой-то IP, где-то в конфигурации или ещё что-то, так себе задачка. Тут имеет смысл в ПО прописывать имя хоста вашего домена/поддомена и через DNS иметь возможность менять IP, по которому ваше ПО будет обращаться. Для этих целей можно либо на домашнем ПК держать Web сервер, с которого будут идти обновления, или лучше всего оплатить VDS/VPS (это не дорого) и там развернуть систему обновлений вашей программы.

имя хоста вашего домена/поддомена

поменяться не могут?
Да, буду держать дома сервер — не только для раздачи обновлений, но и для сервера игры. Программирование сетей для меня это что-то новое, поэтому ищу пути как подступиться.

ну если за домен исправно платить, то поменяться не может.

Это должен был быть риторический вопрос, т.к. свой статичный ip-адрес казался дешевле. Но сейчас проверил и мой провайдер такую услугу не оказывает.
А у бесплатных хостингов типа Ucoz и Narod какие могут быть риски?

если вы не являетесь владельцем домена, то риски есть всегда.

В предыдущем комментарии вы написали, что сети это для вас новое. То возможно вам сначала нужно в образовательных целях попробовать что-то сделать, допустим даже на каком-то бесплатном хостинге, если не готовы оплатить VPS/VDS. По упрожняться, понять что и как работает и определиться, что вы хотите, а после уже приобрести себе домен, арендовать виртуалку, и реализовать свои пожелания

Я и пытаюсь что-то сделать, поупражняться, но не могу найти информацию как начать и как искать, что даже написал вот сюда.
Что хочу — бесплатно или очень дёшево, разве не очевидно?: )
Удивительно, что эта задача не такая распространённая, хотя каждый разработчик хотел бы обновлять свой софт удобно для пользователя. Весь Интернет даёт загружать файлы и хранить, делиться, отчего возникает иллюзия, что твоя программа тоже может просто заглядывать в Интернет, видеть обновление, скачивать и обновляться. А тут всё как сложно, оказывается, и даже надо платить.
Похоже, напишу статью тут когда смогу это сделать. На Хабре нахожу только статьи алгоритма обновления, но не где хранить и как скачивать. Спасибо.

как вариант github

вы попробуйте более конкретно описать свою потребность. Что за ПО ? на чём написано/или пишете? какую задачу решает? и т.д.

Ниже как-раз подсказали ГитХаб и теперь рассматриваю эту версию.
ПО — допустим, програмка для изменения размера картинки. Написано на Си. Добавляю новую функцию и хочется, чтобы пользователи уже запускали обновлённый вариант.
Вариант с ГитХабом вижу такой: размещаю новый бинарник в релизах, а ссылку на него — в ReadMe на главной, в нём и номер версии. Моя програмка по прямой ссылке на этот ReadMe проверяет номер версии, и если оно выше — скачивает по ссылке в том-же ReadMe бинарник из релизов.

Вполне рабочее решение. Возможно только имеет смысл не в README проверять, а достаточно в репозитории github держать некий служебный файл, например manifest.json и в нём и версия, и дата, и контрольная сумма и ссылка на бинарник, и ещё что-то, что ваша программа на Си должна знать.

А вообще мир давно уже движется в направлении web и мобильных устройств. Если весь функционал, который планируете реализовать, можно засунуть в web, то это было бы возможно лучшим решением. Платформенная независимость, клиент всегда работает с самой актуальной версией, если коммерческое продакшн решение, то можно организовать платную подписку на фичи допустим какие-то. Предоставить API для интеграции в какие-то другие ПО и т.д. фантазировать можно много.

в последнее время всё чаще встречаю обновления из репы на гитхабе. там же лежит файлик с данными о последней версии который программа проверяет

А как вы узнаёте, что программа обновляется через Гитхаб?
Media Player Classic вот показывает окно о новой версии и отправляет на страницу Гитхаба — обновление приходится скачивать и запускать вручную.

с MPC другой случай, скорее всего у них автосборка в релизы - туда и отправляет.

просто встречал случаи когда делали репу в которой бинарный релиз и рядом файлик с информацией о свежей версии который по прямой ссылке программа и чекает. если версия выше существующей, то просто качает по указанной ссылке бинарник с гитхаба и обновляется. для небольших своих поделок вполне себе вариант, кмк

который по прямой ссылке программа и чекает

Как такая ссылка может выглядеть — не знаете? Наверно, прямая ссылка на Readme проекта? А в ней и ссылка на бинарник в релизах.

нет. просто в репу бинарник складывать, далее открыть файл, там тычка RAW

будет ссылка в духе https://raw.githubusercontent.com/%username%/%repo_name%/master/%filename%

вот её и можно использовать

Спасибо, т.е. я правильно вас понял, просто бинарник необязательно в релизы выкладывать, получается.
Я тоже встречал подобные репозитории, сейчас вспомнил.

А как "работать" с токенами юзеру, можно их как-то обходить/обманывать?

почитайте про JWT токены. Если nginx будет проверять срок действия и подпись JWT токена, то без наличия приватного ключа его будет не возможно подделать. При этом nginx не нужно никуда дополнительно стучаться (при условии, что нет необходимости на стороне CDN проверить не был ли токен отозван)

не то чтобы совсем невозможно, но усложнит обход, да.

если мы говорим о защите JWT токеном с тем, что CDN так-же проверяет его срок действия и подпись, то я не могу себе даже представить сценарий, при котором вы его сможете подделать или обойти без наличия приватного ключа, которым он подписывается.

Sign up to leave a comment.