پرش به محتویات

آماده‌سازی 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 -d Directory را با 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 deploy Shell همان کاربری را باز می‌کند که Workflow با آن Deploy می‌کند.
  • read -s Token را هنگام تایپ نمایش نمی‌دهد.
  • --password-stdin مانع قرار گرفتن Token در Command History و Process List می‌شود.
  • Username بدون @ نوشته می‌شود.
  • unset متغیر موقت را از Shell پاک می‌کند.

Credential فقط در Home کاربر deploy ذخیره می‌شود. Token دارای write:packages یا دسترسی عمومی VPS نباشد و برای Rotation آن تاریخ تعیین شود.

مرحله بعد: SSH و GitHub