kate_ekb я как раз вечером в vscode сидел, когда ты про
docker stop написала. второй монитор, .gitlab-ci.yml, стейдж
deploy, курсор уже на новой строке. после тех томов первая мысль была тупая: ну хоть контейнер бота пересоберу по-человечески. и я уже набирал
docker stop
bot &&
docker rm bot.
sqlite с бэкапом крутится рядом в другом контейнере, его бы эта же джоба увидела — так же, как ты из пайплайна
wordpress увидела.
ты написала, что из джобы exec открыла, контейнер живой, шелл внутри. я это дочитал и строку стёр, даже в
git add не пустил. вот что чуть уехало в репу. полчаса сочинял, «работает, я гений», и ты как обычно объяснила что нет))
deploy:
stage: deploy
tags:
- vps
script:
- docker stop bot || true
- docker rm bot || true
- docker build -t bot:latest .
- docker run -d --name bot --env-file /opt/bot/.env --restart unless-stopped bot:latest
на общем демоне это не «перезапустил своего бота». это «джоба видит вообще все контейнеры и может любой стопнуть». я после твоего exec запустил тестовую джобу с
docker ps — в списке бот, сам раннер и
nginx, который я под вебхук поднимал ещё в июле и забыл. :ro на сокете файл не даст подменить,
api как был открытым, так и остался. lexa92 это уже написал, я просто своими глазами увидел.
пробовал сначала вообще сокет не пробрасывать. тесты на
python 3.12 проходят, образ собирается, а контейнер на хосте как стоял, так и стоит со старым кодом. бот после пуша молчит, вебхук смотрит в старый процесс. без
docker в ci мне этот деплой не закрыть, у тебя пайплайн только
nginx.conf кладёт и образ собирает — мне надо ещё контейнер на этом же хосте обновить.
сейчас так, без stop и без
rm. только up одного сервиса.
deploy:
stage: deploy
tags:
- vps
only:
- main
script:
- cd /opt/bot
- docker compose up -d --build --no-deps bot
--no-deps, чтобы соседний
nginx с сертом не пересобрался по дороге. тома уже именованные, не bind в /tmp раннера, это я после прошлого раза руками переписал.
healthcheck в
compose так и не прописал, знаю, не бей сразу.
prune из джобы тоже выкинул. один раз почти добавил
docker image prune -af, чтобы место не жрало — это бы снесло старые образы бота и заодно всё забытое. руки теперь не тянутся.
andryukha писал:
а сколько это в месяц по живому счёту, не «зато свой агент»?
я не вордпресс с редисом с зимы считаю. у меня бот и раннер на одном
vps. на gitlab.com 400 минут сгорели за две недели: pytest плюс
docker build, кэш не настроил,
pip каждый раз качал колёса заново. один пайплайн 12–15 минут, пуш в main после работы — и к среде третьей недели баннер buy more minutes. это тоже счёт, просто его гитлаб присылает, а не хостер.
свой агент поставил на тот же uk, где бот живёт. раннер отдельным контейнером, тег
vps, concurrent=1, чтобы два деплоя
compose не схватили одновременно. начинал с Ba Lite, когда тесты и бот влезли впритык — перешёл на Uab и не жалею. в кабинете сумма как на сайте, гитлабовские минуты больше не покупаю. калькулятор у тебя рефлекс, ок, только считай не «вордпресс плюс редис плюс раннер», а «раннер вместо тех 400 минут, которые и так кончились».
песочницы из этого нет, я не спорю. джоба с
docker cli теоретически напишет
docker stop что угодно, даже если в
yaml сейчас --no-deps. privileged в config.
toml не включал, хотя в гайде как будто само собой. executor
docker, каталог
cache раннера не в /tmp — это уже проверил не по гайду с телефона, а зайдя на хост.
у кого пайплайн только тесты гоняет, без деплоя на тот же хост — вам проще, сокет можно не пробрасывать вообще. мне надо бота обновить с этого демона, вот и живу с открытым
api. а у кого так же деплой в тот же
docker — stop из джобы уже выкинули или ещё нет?