Вариант с token.js тоже довольно часто используется. Например в Python/Django, часто создают файл settings_local.py. Но такой подход сработает только для интерпретируемых языков, и только если код физически на сервере и его можно править.
Этот подход не сработает, если ваше приложение написано на C#, и на сервере лежит только результат команды dotnet build, без собственно кода. Или если вы делаете приложение в виде пакета, и на сервере ставите его через npm install my-package. Или если вы используете typescript, и перед запуском приложения оно собирается в большой JS файл. Теоретически в последнем случае все еще можно использовать import TOKENS from "tokens", но придется поднапрячься с настройкой, чтобы собранный файл импортировал файл с токенами.
И второй момент — переменные окружения работают на уровне ОС, чтобы использовать их не надо ничего знать о структуре вашего приложения. Например такой подход применяется в популярном сервисе Heroku. При деплое на Heroku приложение может узнать, какой из портов открыт считав значение process.env.PORT.
На примерах с Docker в статье — можно собрать один image, и запускать его с разными настройками, не меняя файлы.
Как-то странно смешаны методы, для новичка может показаться что для проекта нужно выбрать один из перечисленных. Но как по мне первые два должны идти в отдельной группе.
Ведь тот же беспарольный доступ с помощью одноразового токена или логин через соц. сети передает на сервер некий токен по клику по ссылке в письме или при редиректе с соц сети обратно на сайт проекта.
Далее сервер проверяет этот токен (в базе, oAuth, да это может быть тот же JWT). И в случае успеха для последующих запросов клиент уже будет передавать нечто внутреннее для системы с помощью куки или заголовка.
Так что я бы разбил методы на две группы — что мы используем для логина и что мы используем для подтверждения аутентификации для последующих запросов.
Только что попробовал, видимо там zip архив с LinuxKit обновили. Теперь удалось запустить… правда через раз почему то, и на второй раз начало зависать при распаковке образа, но хоть что-то. Пришлось пару раз очищать папку lcow и качать образы заново.
Один из моментов который интересовал работает — можно добавить volume с диска который не расшарен. Так что есть повод ждать релиза.
Прочитал тикет 1219 — после определенной версии нужна еще одна переменная окружения.
$env:LCOW_API_PLATFORM_IF_OMITTED="linux"
Но все равно при попытке pull выходит ошибка. Образ находится, скачивается, но после распаковки падает.
Текст ошибки
C:\Work\dockerbeta\docker.exe: failed to register layer: failed to start service utility VM (applydiff c01367536c422450a2126cfc8ff74f689748c09740e399186473ab911faa1d16): container c01367536c422450a2126cfc8ff74f689748c09740e399186473ab911faa1d16_svm encountered an error during CreateContainer: failure in a Windows system call: Access is denied. (0x5) extra info: {"SystemType":"container", "Name": "c01367536c422450a2126cfc8ff74f689748c09740e399186473ab911faa1d16_svm", "Layers":null,"HvPartition":true, "HvRuntime":{"ImagePath":"C:\\Program Files\\Linux Containers\\uvm.vhdx", "BootSource":"Vhd"},"ContainerType":"linux", "TerminateOnLastHandleClosed":true}.
Скрипт для ACL я выполнял. Если открыть в проводнике, то там есть Full Access для Virtual Machines. Но если попробовать давать права через проводник, то он не находит роль NT VIRTUAL MACHINE\Virtual Machines. И с LinuxKit вместо Xenial выходит тоже самое.
С выходом Creator Fall решил попробовать сделать все по туториалу.
И столкнулся с проблемой из этого тикета. Флаг experimental тоже не помог. Не знаете, есть ли какое-то решение? Возможно надо откатиться на предыдущую версию dockerd?
Спасибо за ответы, я уже после вопроса прочитал предыдущую статью и примерно так и понял.
А что с потреблением памяти? Сейчас под виртуалку с докером можно выделить фиксированное количество ОЗУ, у меня например стоит 2 Гб.
А при новом подходе — надо будет задавать объем памяти для каждого контейнера?
И еще вопрос, который волнует — можно ли теперь подключать volumes без необходимости расшаривать весь диск по самбе?
Я пробовал несколько месяцев назад, запустить Docker под Linux subsystem — не получалось. Даже с попыткой замены Unix сокетов на TCP. Не помню что именно, но это ядро не поддерживало все фичи изоляции, которые нужны докеру.
Так что думаю что вопрос в использовании самой подсистемы как линукса.
И насколько я помню, там продублирован не весь функционал Линукса, так что некоторые утилиты не работают.
А я так понимаю что .\dockerd.exe запускается вместо стандартного докер-демона, который запускается через "C:\Program Files\Docker\Docker\Docker for Windows.exe"
То есть запустив таким образом особый Ubuntu-Docker, я не смогу использовать другие контейнеры, например на основе alpine?
Или все не Ubuntu контейнеры будут также запускаться через старый MobyLinuxVM?
Я знаю человека, который живя в пригороде приезжал каждый день на работу на авто, парковал его у центра города на парковке и по центру ездил на складном велосипеде. И так выходило быстрее всего, и не было проблем где оставить машину. Правда у него еще и хобби МТБшное, так что крутить педали он любит.
А по Германии такое еще популярней, насколько я слышал. До города на машине или электричке, потом на веле.
использование рекламы на русском языке, отсылающей к соответствующему интернет-сайту
А это еще интересней момент. Учитывая что рекламные объявления обычно автор сайта руками не отбирает, а отдает это на плечи баннерных сетей. Тогда ведь на любых сайтах пользователю из РФ будет показываться реклама магазинов из РФ.
А меня в core разочаровал Entity Framework Core. Недавно столкнулся с тем что там GROUP BY очень ограничен, и не конвертируется нормально в SQL запрос.
А какие именно Garmin и смартфон? У меня сразу после покупки были конфликты на Sony Z3 Compact + Fenix 3HR.
То отпадали уведомления, то начинался дикий жор батареи. Решилось это добавкой приложений Garmin'a в исключения для стамины и энергосбережения, а также делал pair не только через Garmin Connect, но и через сам Андроид.
Осталась проблема с контролем музыки, иногда отпадает почему-то, но редко.
Можете еще попробовать костыльные софтины типа Reconnect Garmin.
Кстати, я думал что такая проверка идет из Chromium, поэтому проверил сразу и в Хроме и в Опере (46). Так Опера проверила сертификат и не дала зайти на сайт. А у Хрома вполне себе зеленый замочек как у валидного HTTPS.
Видимо это применимо к Python2. Там если записать в одну строку, то результат поменяется
Но в Python 3 эта же строка вернет False. Более того, даже для создания списка сразу из двух элементов будет False
Даже если положить это в файл.
Вариант с
token.js
тоже довольно часто используется. Например в Python/Django, часто создают файлsettings_local.py
. Но такой подход сработает только для интерпретируемых языков, и только если код физически на сервере и его можно править.Этот подход не сработает, если ваше приложение написано на C#, и на сервере лежит только результат команды
dotnet build
, без собственно кода. Или если вы делаете приложение в виде пакета, и на сервере ставите его черезnpm install my-package
. Или если вы используете typescript, и перед запуском приложения оно собирается в большой JS файл. Теоретически в последнем случае все еще можно использоватьimport TOKENS from "tokens"
, но придется поднапрячься с настройкой, чтобы собранный файл импортировал файл с токенами.И второй момент — переменные окружения работают на уровне ОС, чтобы использовать их не надо ничего знать о структуре вашего приложения. Например такой подход применяется в популярном сервисе Heroku. При деплое на Heroku приложение может узнать, какой из портов открыт считав значение
process.env.PORT
.На примерах с Docker в статье — можно собрать один image, и запускать его с разными настройками, не меняя файлы.
Как-то странно смешаны методы, для новичка может показаться что для проекта нужно выбрать один из перечисленных. Но как по мне первые два должны идти в отдельной группе.
Ведь тот же беспарольный доступ с помощью одноразового токена или логин через соц. сети передает на сервер некий токен по клику по ссылке в письме или при редиректе с соц сети обратно на сайт проекта.
Далее сервер проверяет этот токен (в базе, oAuth, да это может быть тот же JWT). И в случае успеха для последующих запросов клиент уже будет передавать нечто внутреннее для системы с помощью куки или заголовка.
Так что я бы разбил методы на две группы — что мы используем для логина и что мы используем для подтверждения аутентификации для последующих запросов.
Тут такой пункт есть, и от него наверно в итоге будет многое зависеть.
Интересно, какое все таки время установлено, например для той же Ауди А8. Хотя бы порядок там, секунды или минуты?
Я так понимаю вы про эту статью — Linux-контейнеры для Windows.
Только что попробовал, видимо там zip архив с LinuxKit обновили. Теперь удалось запустить… правда через раз почему то, и на второй раз начало зависать при распаковке образа, но хоть что-то. Пришлось пару раз очищать папку lcow и качать образы заново.
Один из моментов который интересовал работает — можно добавить volume с диска который не расшарен. Так что есть повод ждать релиза.
Частично отвечу на свой же вопрос.
Прочитал тикет 1219 — после определенной версии нужна еще одна переменная окружения.
Но все равно при попытке
pull
выходит ошибка. Образ находится, скачивается, но после распаковки падает.C:\Work\dockerbeta\docker.exe: failed to register layer: failed to start service utility VM (applydiff c01367536c422450a2126cfc8ff74f689748c09740e399186473ab911faa1d16): container c01367536c422450a2126cfc8ff74f689748c09740e399186473ab911faa1d16_svm encountered an error during CreateContainer: failure in a Windows system call: Access is denied. (0x5) extra info: {"SystemType":"container", "Name": "c01367536c422450a2126cfc8ff74f689748c09740e399186473ab911faa1d16_svm", "Layers":null,"HvPartition":true, "HvRuntime":{"ImagePath":"C:\\Program Files\\Linux Containers\\uvm.vhdx", "BootSource":"Vhd"},"ContainerType":"linux", "TerminateOnLastHandleClosed":true}.
Скрипт для ACL я выполнял. Если открыть в проводнике, то там есть Full Access для Virtual Machines. Но если попробовать давать права через проводник, то он не находит роль
NT VIRTUAL MACHINE\Virtual Machines
. И с LinuxKit вместо Xenial выходит тоже самое.С выходом Creator Fall решил попробовать сделать все по туториалу.
И столкнулся с проблемой из этого тикета. Флаг
experimental
тоже не помог. Не знаете, есть ли какое-то решение? Возможно надо откатиться на предыдущую версию dockerd?Я на простом проекте пробовал — текст печатался, так что код доступен. Про другие потоки не подумал, тут не подскажу к сожалению
А нельзя просто в
Program.Main
добавить код после вызова.Run()
?Спасибо за ответы, я уже после вопроса прочитал предыдущую статью и примерно так и понял.
А что с потреблением памяти? Сейчас под виртуалку с докером можно выделить фиксированное количество ОЗУ, у меня например стоит 2 Гб.
А при новом подходе — надо будет задавать объем памяти для каждого контейнера?
И еще вопрос, который волнует — можно ли теперь подключать volumes без необходимости расшаривать весь диск по самбе?
Я пробовал несколько месяцев назад, запустить Docker под Linux subsystem — не получалось. Даже с попыткой замены Unix сокетов на TCP. Не помню что именно, но это ядро не поддерживало все фичи изоляции, которые нужны докеру.
Так что думаю что вопрос в использовании самой подсистемы как линукса.
И насколько я помню, там продублирован не весь функционал Линукса, так что некоторые утилиты не работают.
А я так понимаю что
.\dockerd.exe
запускается вместо стандартного докер-демона, который запускается через"C:\Program Files\Docker\Docker\Docker for Windows.exe"
То есть запустив таким образом особый Ubuntu-Docker, я не смогу использовать другие контейнеры, например на основе alpine?
Или все не Ubuntu контейнеры будут также запускаться через старый MobyLinuxVM?
Я знаю человека, который живя в пригороде приезжал каждый день на работу на авто, парковал его у центра города на парковке и по центру ездил на складном велосипеде. И так выходило быстрее всего, и не было проблем где оставить машину. Правда у него еще и хобби МТБшное, так что крутить педали он любит.
А по Германии такое еще популярней, насколько я слышал. До города на машине или электричке, потом на веле.
А это еще интересней момент. Учитывая что рекламные объявления обычно автор сайта руками не отбирает, а отдает это на плечи баннерных сетей. Тогда ведь на любых сайтах пользователю из РФ будет показываться реклама магазинов из РФ.
А меня в core разочаровал Entity Framework Core. Недавно столкнулся с тем что там GROUP BY очень ограничен, и не конвертируется нормально в SQL запрос.
Обещают в 2.1 добавить.
А какие именно Garmin и смартфон? У меня сразу после покупки были конфликты на Sony Z3 Compact + Fenix 3HR.
То отпадали уведомления, то начинался дикий жор батареи. Решилось это добавкой приложений Garmin'a в исключения для стамины и энергосбережения, а также делал pair не только через Garmin Connect, но и через сам Андроид.
Осталась проблема с контролем музыки, иногда отпадает почему-то, но редко.
Можете еще попробовать костыльные софтины типа Reconnect Garmin.
Ну Heroku вроде не совсем из той серии. У них больше автоматизаций, но и больше ограничений, например только один порт на машину, для VPN не подходит.
Это скорее аналог Azure App Service или Google App Engine.
Проще деплоить, но и писать надо с оглядкой на платформу.
Я так понимаю, что с распространением https граббинг все менее и менее юзабелен.
Есть, только у них пользователей меньше.
Кстати, я думал что такая проверка идет из Chromium, поэтому проверил сразу и в Хроме и в Опере (46). Так Опера проверила сертификат и не дала зайти на сайт. А у Хрома вполне себе зеленый замочек как у валидного HTTPS.
И даже Edge не позволил зайти
Error Code: ERROR_INTERNET_SEC_CERT_REVOKED
Не туда ответил