Индекс на дневникаDockup / бележка от практиката
Note / git-repository-to-production-deployment

От Git repository до production: ръководство за deployment с Dockup

От Git repository до production с Dockup: създайте service, изберете Nixpacks или Dockerfile, конфигурирайте health checks, направете deploy, проверете резултата и върнете предишна версия.

Преминаването от Git repository до production изисква повече от свързване на remote и натискане на deploy. Платформата трябва да знае целевия service, branch, метода за build, start командата, listening port, environment, health gate и пътя за възстановяване. Dockup прави тези решения явни, като поддържа както автоматични Nixpacks builds, така и Dockerfile, управляван от repository.

Това ръководство започва с repository, който никога не е бил deploy-ван, и завършва с проверен URL, deployment history, logs и тествана rollback команда.

Какво трябва да се провери преди първия production deploy?

Уверете се, че repository-то може да бъде deploy-нато без недокументирано локално състояние. Един чист clone трябва да съдържа всичко необходимо за инсталиране на dependencies и стартиране на application-а, с изключение на secrets.

Използвайте този checklist:

ПроверкаОчакван резултат
Default branchСъществува branch-ът, предназначен за production
Dependency lockfileCommit-нат е за възпроизводими инсталации
Start processСлуша на конфигурирания port и 0.0.0.0
Health routeВръща success без външни странични ефекти
Database migrationsИмат изричен и безопасен план за изпълнение
SecretsСъхраняват се извън Git
Persistent filesИзползват volume, а не файловата система на container-а
RollbackПредишният deployment може да бъде изпълнен отново

Инсталирайте CLI и се удостоверете:

npm install -g dockup-cli
export DOCKUP_TOKEN="<TOKEN>"
dockup whoami --json

Изведете съществуващите services, преди да създадете нов:

dockup services --json

Това предотвратява създаването на дублирани resources и потвърждава точната convention за workspace и target.

Как Dockup create поддържа Git deployment?

Обичайната команда за първи deploy създава service-а, deploy-ва го, изчаква резултата и свързва текущата директория:

dockup create api \
  --repo https://github.com/acme/api \
  --project production \
  --branch main \
  --deploy \
  --wait \
  --link \
  --json

Полученият target е production/api. Връзката .dockup позволява на следващите команди да откриват service-а, когато се изпълняват в repository-то, но production документацията все пак трябва да записва пълния target.

След прекъснат опит за provisioning изведете services и проверете точния target, преди да стартирате създаването отново:

dockup services --json

Ако production/api вече съществува, продължете, като прочетете неговия status и deployment history. Така избягвате превръщането на несигурен network резултат в дублиран service. Съхранявайте credentials за достъп до repository извън source control и output-а на командите.

Как Dockup избира Nixpacks или Dockerfile?

Ако repository-то съдържа Dockerfile, Dockup го използва. В противен случай Nixpacks открива application-а и го build-ва автоматично. Този ред на избор прави изричната container дефиниция в repository-то водеща.

Nixpacks е добър първи избор, когато application-ът следва обичайните conventions на ecosystem-а и не се нуждае от customization на ниво операционна система. Dockerfile е полезен, когато са ви нужни конкретен base image, system packages, multi-stage build, custom runtime user или точни граници на копиране.

Не е необходимо да добавяте празен Dockerfile само за да изглежда проектът „готов за production“. Неправилен Dockerfile може да бъде по-малко възпроизводим от conventional automatic build. Използвайте процеса за избор в Nixpacks vs Dockerfile.

Проверете service-а след създаването му:

dockup info production/api --json

Отговорът включва repository URL, branch, deployment type, port, build и start settings, environment keys, custom domains и данни за последния deployment.

Ако откритите команди изискват override, използвайте документирани settings:

dockup set production/api \
  --build "npm ci && npm run build" \
  --start "npm start" \
  --port 3000 \
  --json

Settings влизат в сила при следващия deployment.

Как се конфигурират production environment и health?

Добавяйте обикновените стойности и secrets отделно:

dockup env set NODE_ENV=production \
  -s production/api \
  --json

dockup env set DATABASE_URL="$DATABASE_URL" \
  --secret \
  -s production/api \
  --json

Secret стойностите се маскират при извеждане на environment-а. Те могат да бъдат задавани или заменяни, но съхранената стойност не се връща.

Промените в environment-а изискват redeploy, защото работещият process не може да получи нов environment със задна дата. Пълният lifecycle е обяснен в environment variables and secrets.

Конфигурирайте health gate, който представя готовността на application-а:

dockup health production/api \
  --path /healthz \
  --interval 5 \
  --timeout 3 \
  --retries 5 \
  --json

Dockup използва blue-green flow без downtime и започва да изпраща traffic към новия deployment едва след успешно преминаване на readiness проверката. Когато не е конфигуриран HTTP path, gate-ът може да използва readiness на TCP port.

Health route трябва да проверява дали application process-ът е готов да обслужва requests. Избягвайте да го карате да изпълнява destructive checks или скъпи тестове на цялата система. Задълбочените проверки на dependencies могат да създадат false outages, когато незадължителен service е влошен.

Как се правят deploy, наблюдение и проверка в production?

Стартирайте release-а и изчакайте terminal state:

dockup deploy production/api --wait --json

Default timeout-ът е 900 секунди. Exit 0 означава success. deploy_failed и deploy_timeout са non-zero резултати, така че shell scripts и CI системите спират правилно.

За да наблюдавате build-а като NDJSON:

dockup logs production/api --build -f --json

Stream-ът приключва при success или failure. Ако build-ът е успешен, но container-ът се срине, проверете runtime logs:

dockup logs production/api --json

След успешен release проверете състоянието на платформата и публичното поведение:

dockup status production/api --json
dockup uptime production/api --hours 24 --json
dockup security production/api --json

Uptime probes се изпълняват всяка минута и отчитат средното време за response и p95. Security scanning проверява за image CVEs и проблеми в configuration. Добавете специфичен за application-а smoke test за реалния business endpoint; platform readiness е необходима, но не е достатъчна.

Подробният метод за работа с logs е описан в build and runtime log debugging.

Как трябва да се въведат automatic deploys и previews?

Направете първия production release достатъчно ръчно, за да наблюдавате всяка граница. След като са ясни build-ът, health gate-ът и rollback пътят, активирайте deployment при push:

dockup auto-deploy production/api --on --json

Automatic deployment трябва да следва protected branch и policy за code review. Push към repository е production trigger, затова permissions за repository се превръщат в infrastructure permissions.

Pull request и branch previews предоставят изолирани URLs и environments:

dockup pr-preview production/api --on --json
dockup preview branch feature/login production/api --json

В project с private networking previews се присъединяват към project network-а. Те могат да достигат до същата production database на <slug>.internal, но Dockup създава автоматичен read-only database user за preview-то. Preview-то може да преглежда данни със структура като тази в production, без да ги променя.

Това не отменя задълженията за privacy. Достъпът на previews все пак трябва да бъде ограничен и одитиран и да се използва само когато четенето на production данни е разрешено.

Как се прави rollback на неуспешен deployment?

Запазете evidence преди recovery. Прочетете build logs при build failure и runtime logs при crash. След това изведете deployment history:

dockup deployments production/api -n 20 --json

Изберете deployment ID, чийто status и timestamp са известни, след което го изпълнете отново:

dockup rollback <deploymentId> production/api --json

Rollback трябва да бъде изрично incident действие. Запишете ID на неуспешния deployment, избрания recovery ID, причината и последващия fix. Ако database migration не е backward compatible, rollback само на application-а може да не възстанови съвместимостта; design-ът на migration-ите трябва да бъде част от release плана.

Ръководството за deployment без downtime обяснява traffic cutover-а, а Dockup CLI reference документира всички command flags.

Запис за завършване на първия deploy

В края на workflow-а от Git repository до production запишете:

  • Точния project/service target.
  • Repository-то и production branch-а.
  • Build метода: Nixpacks или Dockerfile.
  • Build и start командите, когато са override-нати.
  • Listening port-а и health path-а.
  • Deployment ID и terminal status.
  • Production URL и плана за custom domain.
  • Uptime и security проверката.
  • Rollback deployment ID или правилото за избор.

Този запис превръща втория deployment в рутинна операция, а не в поредно проучване.

Отделете application state от container image

Writable filesystem-ът в service container трябва да се приема като заменяем. Нов deployment създава нова версия, а rollback изпълнява отново по-стар image; файловете, записани само в стария container, не са надеждна стратегия за durable data.

Използвайте managed databases за relational, document или cache state и прикачете volume за файлове, които трябва да се запазят между deployments. Потвърдете mount paths преди първия production release. Containerized upload directory, която никога не е била mount-ната, може да изглежда здрава, докато следващият deploy не изтрие данните.

Прегледайте persistent volumes and snapshots, преди да преместите user-generated files. За database state използвайте специфичната backup система на database-а, вместо да приемате hot volume snapshot за transaction-consistent backup.

Как да изчислите първия месец, без да измисляте фиксирана сметка за instance?

Dockup измерва потреблението на CPU, RAM и disk всяка минута и приспада използваното от баланса на плана. Free plan включва началeн кредит от $10 и до три deployments; препоръчителният Pro plan струва $20 месечно и включва $20 usage credit.

След като service-ът започне да получава реален traffic, прегледайте потреблението му на CPU, RAM и disk в app.dockup.ai. Използвайте наблюдаваното потребление на минута, а не предположен максимум, за да решите дали service-ът, database-ът или persistent disk-ът се нуждаят от промяна.

Проверете чист втори deployment

След първия release направете безобидна промяна, преминала review, и deploy-нете отново. Така потвърждавате, че repository link-ът, предположенията за build cache-а, health gate-ът, environment-ът и history работят като постоянен process, а не само като еднократно успешно provisioning действие.

Поддържайте target-а изрично указан

Запишете окончателния project/service string.

Запазете URL-а на release-а

Запишете production URL-а до deployment ID.

Потвърдете следващия trigger

Запишете дали бъдещите releases са ръчни или използват незадължителен deploy-on-push. Така permissions за repository, branch protection и production очакванията остават съгласувани след първия deployment.

Започнете с deployment, който може да бъде проверен

Изберете малко repository с ясна start команда и health route, след което документирайте точния target и rollback ID след първия успешен release.

Започнете безплатно в app.dockup.ai. Free plan е $0 месечно, включва $10 начален кредит и поддържа един workspace, три databases и три deployments.

Често задавани въпроси

Може ли Dockup да deploy-не repository без Dockerfile?

Да. Когато няма Dockerfile, Dockup използва Nixpacks, за да открие и build-не application-а автоматично.

Какво прави dockup create --link?

Той записва .dockup link в текущата директория, така че следващите команди да могат да открият свързания project/service target.

Защо първият deploy трябва да използва --wait?

Той поддържа командата свързана, докато deployment-ът достигне success, failure или timeout, и връща exit code, който точно представя крайния резултат.

Прилагат ли се промените в environment variables незабавно?

Не. Те се прилагат към нов container при следващия deployment, затова deploy-нете service-а отново след промяна на environment configuration.

Как Dockup прави rollback на application?

Изведете deployment history, идентифицирайте известен предишен deployment ID и използвайте dockup rollback с този ID и точния service target.