# Login to GitHub Container Registry (GHCR) ## On the Server ### 1. Create GitHub Personal Access Token Go to: https://github.com/settings/tokens Click "Generate new token (classic)" Select scopes: - ✅ `read:packages` (required) - ✅ `write:packages` (if you need to push) Copy the token (starts with `ghp_`) ### 2. Login to GHCR ```bash # On your server echo YOUR_GITHUB_TOKEN | docker login ghcr.io -u franknstayn --password-stdin ``` Or export as environment variable: ```bash export GITHUB_TOKEN=ghp_your_token_here echo $GITHUB_TOKEN | docker login ghcr.io -u franknstayn --password-stdin ``` ### 3. Pull the image ```bash cd crew-infrastructure docker compose pull slipmatz_web docker compose up -d slipmatz_web ``` ## Make Package Public (Alternative - No Auth Required) If you want to avoid authentication: 1. Go to: https://github.com/franknstayn?tab=packages 2. Click on `slipmatz-web` package 3. Package settings (right sidebar) 4. "Change visibility" → Select "Public" 5. Confirm Then you can pull without login: ```bash docker compose pull slipmatz_web ``` ## Recommended for Production Store credentials securely: ```bash # On server, add to ~/.bashrc or ~/.zshrc export GITHUB_TOKEN=ghp_your_token_here # Add to docker-compose.yml env echo "GITHUB_TOKEN=$GITHUB_TOKEN" >> .env ``` Or use docker credential helper for permanent storage.