آمادهسازی VPS و دسترسی GHCR
این Runbook فقط Stack مستقل tripylon-frontend را آماده میکند و Containerهای dong، documents و Backend را تغییر نمیدهد.
مخاطب: DevOps/SRE دارای دسترسی sudo.
شرط توقف: Network مشترک یا Alias سالم Backend وجود نداشته باشد.
۱. بررسی پیشنیازهای موجود
docker version
docker compose version
docker network inspect dong_frontend >/dev/null
docker exec dong-nginx-1 getent hosts tripylon-api
docker versionارتباط Client با Docker Engine را بررسی میکند.docker compose versionوجود Compose V2 را تایید میکند.network inspectفقط وجود Network مشترک Reverse Proxy را میخواند.getent hostsتایید میکند Nginx میتواند Alias پایدار Backend را Resolve کند.
اگر دستور آخر نتیجه نداشت، پیش از ادامه باید Backend سالم و متصل به dong_frontend باشد.
۲. ساخت Directory مستقل
sudo install -d -m 0750 -o deploy -g deploy /opt/applications/tripylon-frontend
sudo -u deploy touch /opt/applications/tripylon-frontend/.env
sudo chown deploy:deploy /opt/applications/tripylon-frontend/.env
sudo chmod 0600 /opt/applications/tripylon-frontend/.env
sudo -u deploy nano /opt/applications/tripylon-frontend/.env
install -dDirectory را با Owner و Permission مشخص میسازد.0750دسترسی نوشتن را به Owner محدود میکند.touchفایل را در نبود آن میسازد و در اجرای دوباره محتوای موجود را حذف نمیکند.chownوchmodمالکیت و Permission فایل را بهdeploy:deployو0600محدود میکنند.nanoفایل را بدون Heredoc چندخطی باز میکند.
محتوای .env:
PROXY_NETWORK=dong_frontend
API_BASE_URL=http://tripylon-api:8080
BACKEND_REQUEST_TIMEOUT_MS=5000
WEB_MEMORY_LIMIT=512m
WEB_CPU_LIMIT=1.0
WEB_PIDS_LIMIT=200
این فایل Secret فعلی ندارد، ولی Runtime Configuration است و Commit نمیشود. Port 3000 روی Host منتشر نخواهد شد.
۳. ورود Machine Account به GHCR
برای Repository خصوصی، Token یک Machine Account با دسترسی read:packages و دسترسی Read به Repository بسازید. سپس:
sudo -iu deploy
read -rsp 'GHCR token: ' GHCR_TOKEN
printf '\n'
printf '%s' "$GHCR_TOKEN" | docker login ghcr.io --username YOUR_GITHUB_USERNAME --password-stdin
unset GHCR_TOKEN
exit
sudo -iu deployShell همان کاربری را باز میکند که Workflow با آن Deploy میکند.read -sToken را هنگام تایپ نمایش نمیدهد.--password-stdinمانع قرار گرفتن Token در Command History و Process List میشود.- Username بدون
@نوشته میشود. unsetمتغیر موقت را از Shell پاک میکند.
Credential فقط در Home کاربر deploy ذخیره میشود. Token دارای write:packages یا دسترسی عمومی VPS نباشد و برای Rotation آن تاریخ تعیین شود.