Окружење за извршавање и sandbox
Животни циклус sandbox-а, убризгано окружење, породице токена и слика из које се сесија покреће.
Свака сесија се покреће у сопственом изолованом окружењу. Ова страница је референтни водич за животни циклус окружења, окружење које Beeuni убацује при покретању, породице токена и саму слику окружења. Више о концепту сесија потражите у одељку Сесије.
Животни циклус окружења за извршавање
Ред сесије садржи status. Енумерација дефинише queued, branching, provisioning, running, stopped, failed, completed, али Beeuni уписује само 4 од њих.
| Статус | Када се поставља |
|---|---|
provisioning |
При креирању сесије. Beeuni креира грану сесије и захтева окружење за извршавање. |
running |
Када окружење постане активно и доступно. |
stopped |
При изричитом заустављању или током периодичног чишћења које хибернира неактивна окружења. |
failed |
Ако припрема не успе. |
queued, branching и completed постоје у енумерацији, али се не користе у току рада сесије. Немојте их сматрати активним стањима.
Само окружење за извршавање у свом реду има посебан status, са сопственом енумерацијом.
| Статус | Када се поставља |
|---|---|
provisioning |
Када добављач покрене окружење. |
active |
Када добављач потврди да је окружење активно. |
stopped |
При изричитом заустављању, аутоматском заустављању због неактивности или током поновног покретања. |
error |
Када добављач пријави грешку при покретању или током рада. |
archived |
Коначно стање. Избрисали сте сесију, а добављач је уништио окружење, уместо да га паузира. |
Beeuni не ограничава број сесија које се истовремено покрећу по налогу или пројекту. За активне сесије наплаћује се рачунарска снага; ако на налогу нема кредита, при креирању се добија 402.
Модел грана
- Грана сесије добија име по ID-у сесије (UUID-у).
BEEUNI_SESSION_IDиBEEUNI_BRANCH_NAMEимају исту вредност. - Beeuni прави грану од
base_ref, која подразумевано означава подразумевану грану пројекта, у тренутку креирања сесије. - Окидачи креирају грану сесије на исти начин као и интерактивна сесија.
- Ништа не уписује директно у подразумевану грану. То ради само спојени захтев за измену.
Усаглашавање гране сесије
Користите Ask Agent: Sync Branch & Reload у палети команди сесије када се основна грана промени. Агент прегледа грану сесије, чува локални рад, преузима најновији base_ref, разрешава сукобе, покреће одговарајуће тестове и потврђује усаглашавање комитом. Beeuni не бира једну страну сукоба нити ресетује радно стабло.
Агент завршава са beeuni sessions reload "$BEEUNI_SESSION_ID" --project "$BEEUNI_PROJECT_ID" --no-repo --force --yes. --no-repo је обавезно јер је агент већ усагласио грану. Поновно учитавање замењује стандардни harness окружење за извршавање када ново постане исправно. Тиме се завршава тренутни потез, па пошаљите continue након што се окружење поново покрене.
Заглавље сесије приказује сваку фазу поновног учитавања коју је сервер потврдио, у реалном времену. Поновно учитавање са веба проверава сесију, компајлира конфигурацију агента, примењује и проверава замену окружења за извршавање, а затим потврђује активну конфигурацију. Не освежава репозиторијум. CLI може да освежи репозиторијум, осим ако не проследите --no-repo.
Усаглашавање конфигурације
Свака сесија користи конфигурацију основне гране. Пошаљите измене у ту грану и поново учитајте сесију. Ажурирања чекају крај активног корака. Config Releases више нема посебну заставицу.
Користите Reload config или beeuni sessions reload <session id>. Ако учитавање не успе, проверите детаље грешке и исправите конфигурацију пројекта.
/workspace је место за уређивање, а основна грана је оно што се покреће
Сесија УВЕК покреће тренутну конфигурацију основне гране. Не постоји режим конфигурације по сесији.
/workspace је ваша копија за уређивање. Конфигурацију читате тамо и тамо је мењате — а промена стиже до активне сесије када се пошаље на основну грану, након чега је преузима уобичајена конвергенција. Уређивање које се налази само у /workspace не мења начин рада сесије, а активни агенту се то саопштава: његова упутства наводе commit из ког потиче његова конфигурација и кажу да /workspace можда заостаје за њим.
Копија издања је само за читање, па уређивање погрешне копије не успева уз грешку дозволе, уместо да нечујно не уради ништа.
Када конфигурација више не декларише агента сесије
Сесија се креира са агентом. Ако каснији commit уклони или преименује тог агента, сесија прелази на подразумеваног агента пројекта — једном, и само када власник сесије сме да користи тог агента. Beeuni бележи прелаз у дневнику ревизије и наводи га у упутствима активног агента, тако да сесија саопштава шта се догодило.
Ако власник не сме да користи подразумеваног агента или пројекат нема подразумеваног агента, сесија остаје без агента и без приступа агенту. И даље се покреће и пријављује разлог. Поново декларишите агента, поставите подразумеваног агента за пројекат или затражите од менаџера пројекта приступ подразумеваном агенту.
Шта приказује заглавље сесије
| Стање | Услов | Заглавље |
|---|---|---|
| Тренутно | Није застарело, нема резервне опције | Ништа |
| Доступно ажурирање | stale: true |
Ознака ажурирања са Reload config |
| Резервна опција | Постављено је fallback_reason |
Црвена ознака: Config failed to load |
Поновно учитавање које се заврши резервном опцијом пријављује грешку, а не успех.
Reload config
Reload config — и beeuni sessions reload <session id> — у једном кораку ради две ствари и наводи шта се догодило са сваком од њих:
- Пребацује активну сесију на тренутне агенте, вештине и алате основне гране.
- Врши fast-forward над копијом
/workspace, тако да се датотеке које тамо читате подударају са конфигурацијом коју сесија покреће.
Преузимање копије је само fast-forward, на сопственој грани сесије, па се ништа не одбацује. Наведите --no-repo у CLI-ју да бисте га прескочили. Да бисте унели CODE из base_ref у грану сесије, користите Ask agent to sync.
Искључивање
Убачено окружење
Beeuni убацује ове променљиве при покретању. Само тајна пројекта која је изричито конфигурисана за достављање у runtime улази у sandbox. Акредитиви конектора и добављача модела остају на Beeuni серверу.
| Променљива | Опис |
|---|---|
BEEUNI_PROJECT_ID |
UUID овог пројекта. |
BEEUNI_SESSION_ID |
UUID ове сесије. Уједно и назив гране. |
BEEUNI_BRANCH_NAME |
Иста вредност као BEEUNI_SESSION_ID. |
BEEUNI_REPO_URL |
URL за клонирање репозиторијума пројекта. |
BEEUNI_DEFAULT_BRANCH |
Подразумевана грана пројекта. |
BEEUNI_BASE_REF |
Референца од које је ова сесија разграната. |
BEEUNI_API_URL |
Основни URL API-ја платформе (.../v1). |
BEEUNI_AGENT_NAME |
Агент са којим је сесија креирана. |
BEEUNI_MODEL |
Модел који треба покренути, ако је подешен. BEEUNI_OPENCODE_MODEL има исту вредност за демоне направљене пре него што је овај назив уведен. |
BEEUNI_LLM_BASE_URL |
Основни URL Beeuni LLM мрежног пролаза. Мрежни пролаз разрешава акредитиве добављача на страни сервера. |
BEEUNI_TOKEN |
Beeuni акредитив везан за сесију. Погледајте испод. |
Beeuni не убацује BEEUNI_WORKSPACE. Слика садржи /workspace, а ниједан корак за појединачну сесију га не подешава. Beeuni не убацује ни Git токен — демон преузима краткотрајни акредитив за клонирање када му затреба; погледајте одељак Слање измена из сесије испод. Beeuni одбија корисничку тајну са префиксом BEEUNI_*, јер тај префикс чува за променљиве платформе.
Акредитив сесије
Beeuni има спољне токене које сами креирате и један акредитив унутар сваког изолованог окружења.
Спољни токени
Лични приступни токен (PAT, са префиксом beeuni_pat_) или налог услуге (са префиксом beeuni_sa_) потврђује идентитет при позивању Beeuni API-ја, SDK-а и CLI-ја изван изолованог окружења. Погледајте одељак Аутентификација за опсег PAT-а, подешавање налога услуге и избор између њих.
Токен у изолованом окружењу
BEEUNI_TOKEN се генерише када Beeuni покрене окружење сесије. Везан је за корисника који га покреће, пројекат, сесију и одобрење за агента. Свака API рута и даље спроводи сопствену проверу могућности.
Идентификатори почетног упита и евиденције потеза нису променљиве окружења. Демон их преузима од API-ја помоћу BEEUNI_TOKEN након покретања.
Слање измена из сесије
Ниједан узводни Git токен не улази у изоловано окружење. git push origin HEAD шаље комите у грану сесије. Спајање у подразумевану грану захтева спојен захтев за измене.
Слика изолованог окружења
Ваш Dockerfile дефинише основно окружење. Beeuni обезбеђује алате сесије и везу са контролном таблом.
Дефинисање предлошка
Наведите свој Dockerfile као именовани предложак под sandbox.templates у beeuni.yaml.
sandbox:
templates:
- slug: dev
name: Dev box
dockerfile: Dockerfile.dev
default: dev
Поставите тачно један од dockerfile или image на сваки унос. Путање до Dockerfile датотека морају остати унутар репозиторијума. Подесите default на ознаку шаблона који ваше сесије треба да користе; изоставите га да бисте користили подразумевану слику платформе. Старији пројекти на beeuni.toml користе иста поља — погледајте застарели beeuni.toml. Комплетан списак поља: референца манифеста.
Ограничења
| Правило | Зашто |
|---|---|
Немојте постављати ENTRYPOINT или CMD. |
Beeuni замењује оба да би покренуо демон. |
Немојте заузимати порт 8000. |
Резервисан је за обрнути прокси демона. Покрећите развојне сервере на другим портовима. |
FROM Debian или Ubuntu као основну слику. |
Слој окружења за извршавање покреће apt-get. Alpine, Fedora и Arch не могу да се изграде. |
Немојте покретати apt-get clean без rm -rf /var/lib/apt/lists/*. |
Слој окружења за извршавање поново покреће apt-get update; неисправна кеш меморија онемогућава изградњу. |
| Немојте уграђивати акредитиве у слику. | Наведите име у env: и подесите вредност као тајну пројекта. Beeuni је убацује на почетку сесије. |
Спецификације хардвера
cpu, memory и disk у уносу шаблона одређују величину изолованог окружења. Сва три су опциона; ако је поље изостављено, користи се подразумевана вредност платформе: 2 vCPU, 4 GiB меморије, 20 GiB диска.
sandbox:
templates:
- slug: big
image: ubuntu:24.04
cpu: 4
memory: 8
disk: 50
cpu прихвата вредности од 1 до 32 језгра, memory од 1 до 128 GiB, а disk од 1 до 500 GiB. Beeuni све вредности изнад ових ограничења своди на највећу дозвољену вредност. Beeuni не подржава GPU-ове; кључ gpu у шаблону изазива упозорење, а не грешку.
Спецификација је део снимка шаблона, а не поставка појединачне сесије. Променом спецификације поново се прави снимак и она се примењује на следећу сесију. Тренутна сесија задржава већ покренуту спецификацију.
Docker у изолованом окружењу
Подесите container_runtime: true у шаблону да бисте покренули Docker у његовим изолованим окружењима: мреже у режиму bridge и мреже које дефинише корисник, управљачки програм за складиштење overlayfs и излазни саобраћај преко NAT-а. Локални стекови као што су supabase start и docker compose раде као на лаптопу.
sandbox:
templates:
- slug: dev
dockerfile: .beeuni/Dockerfile.dev
container_runtime: true
Портови и URL-ови за преглед
Демон слуша на порту 8000 и проксира било који други порт који ваша апликација користи у изолованом окружењу. Сам порт 8000 блокиран је за проксирање.
Контролна табла приступа порту изолованог окружења на два начина:
- Путем путање:
https://<api-host>/v1/p/<sandbox-id>/<port>/.... Ово је подразумевани облик и једини који подржава WebSocket надоградње. - Путем поддомена:
https://p<port>-<sandbox-id>.<api-host>/.... Користите овај облик за апликације којима су потребне путање релативне у односу на корен или колачићи, као што су развојни сервери Next.js или Vite. WebSocket надоградње још увек не раде у овом облику.
Прокси за преглед уклања X-Frame-Options и све смернице frame-ancestors. Сесија може да угради преглед ваше апликације у iframe без икаквог подешавања са ваше стране.
Преглед сесије може се делити и путем јавне везе, у режиму само за преглед или интерактивном режиму. Јавне везе за дељење блокирају портове 22, 4096, 8000 и порт за дељење статичких датотека.
Поновна изградња снимака
Промене слике или подешавања окружења поново граде окружење за наредне сесије. Непромењена подешавања користе постојећу слику. Прва сесија којој је потребна поновна изградња приказује „припрема слике“, а наредне користе ту изграђену слику.
Измена Dockerfile-а унутар сесије ступа на снагу у следећој сесији, а не у тренутној. Измена стиже до main тек када се захтев за измену споји.