All repos have GitHub Actions on the develop branch that auto-deploy to dev environment.
| Repo | Workflow | Deploys To |
|---|---|---|
| PinDelivery-BE | deploy-dev.yml |
dev.api.pindelivery.rs |
| PinDelivery-FE | deploy-dev.yml |
dev.pindelivery.rs |
| PinDelivery-Admin-FE | deploy-dev.yml |
dev.admin.pindelivery.rs |
Just push to develop and CI/CD handles the rest. GitHub secret SERVER_PASSWORD is configured on all repos.
cd PinDelivery-BE
GOOS=linux GOARCH=amd64 go build -o PinDeliveryDev ./main.go
sshpass -p '<password>' ssh pc@89.216.87.98 "echo '<password>' | sudo -S systemctl stop pindelivery-dev"
sshpass -p '<password>' scp PinDeliveryDev pc@89.216.87.98:/opt/pindelivery/
sshpass -p '<password>' ssh pc@89.216.87.98 "echo '<password>' | sudo -S systemctl start pindelivery-dev"
cd PinDelivery-BE
GOOS=linux GOARCH=amd64 go build -o PinDeliveryProduction ./main.go
sshpass -p '<password>' ssh pc@89.216.87.98 "echo '<password>' | sudo -S systemctl stop pindelivery-prod"
sshpass -p '<password>' scp PinDeliveryProduction pc@89.216.87.98:/tmp/
sshpass -p '<password>' ssh pc@89.216.87.98 "echo '<password>' | sudo -S mv /tmp/PinDeliveryProduction /usr/local/bin/ && sudo -S systemctl start pindelivery-prod"
cd PinDelivery-FE/frontend
npm run build
sshpass -p '<password>' scp -r dist/frontend/browser/* pc@89.216.87.98:/var/www/pindelivery/dev-client/
cd PinDelivery-Admin-FE/frontend
npm run build
sshpass -p '<password>' scp -r dist/frontend/browser/* pc@89.216.87.98:/var/www/pindelivery/dev-admin/
CRITICAL: Before building for production, change
environment.tsto point to production API URLs. After building, restore dev URLs.
Production URLs:
apiServerUrl: 'https://api.pindelivery.rs', wsUrl: 'wss://api.pindelivery.rs'apiServerUrl: "https://api.pindelivery.rs", production: true# Production Admin
cd PinDelivery-Admin-FE/frontend && npm run build
sshpass -p '<password>' ssh pc@89.216.87.98 "echo '<password>' | sudo -S rm -rf /var/www/pindelivery/admin/*"
sshpass -p '<password>' ssh pc@89.216.87.98 "echo '<password>' | sudo -S chown -R pc:pc /var/www/pindelivery/admin/"
sshpass -p '<password>' scp -r dist/frontend/browser/* pc@89.216.87.98:/var/www/pindelivery/admin/
sshpass -p '<password>' ssh pc@89.216.87.98 "echo '<password>' | sudo -S chown -R www-data:www-data /var/www/pindelivery/admin/"
# Production Client
cd PinDelivery-FE/frontend && npm run build
sshpass -p '<password>' ssh pc@89.216.87.98 "echo '<password>' | sudo -S rm -rf /var/www/pindelivery/client/*"
sshpass -p '<password>' ssh pc@89.216.87.98 "echo '<password>' | sudo -S chown -R pc:pc /var/www/pindelivery/client/"
sshpass -p '<password>' scp -r dist/frontend/browser/* pc@89.216.87.98:/var/www/pindelivery/client/
sshpass -p '<password>' ssh pc@89.216.87.98 "echo '<password>' | sudo -S chown -R www-data:www-data /var/www/pindelivery/client/"
| Problem | Cause | Fix |
|---|---|---|
| Build fails | Missing environment files | Create environment.ts and environment.development.ts in frontend/src/app/environments/ |
| 403 after deploy | Wrong upload path | Upload from dist/frontend/browser/* NOT dist/frontend/* |
| Old version showing | Browser cache | Clear server files first, hard refresh (Ctrl+Shift+R) |
| Prod FE hitting dev API | Wrong environment.ts | Verify URLs before production builds, restore after |
Located at frontend/src/app/environments/ (gitignored).
environment.ts (used for production builds):
export const environment = {
apiServerUrl: "https://dev.api.pindelivery.rs", // swap to prod for prod builds
production: false // swap to true for prod builds
};
environment.development.ts (used for ng serve):
export const environment = {
apiServerUrl: "https://dev.api.pindelivery.rs",
production: false
};
develop is the primary branch (source of truth)developmain is force-synced from develop (not used for active development)develop triggers CI/CD deployment to dev environment