Skip to content

Commit 9e62d12

Browse files
committed
Added optional SQL instance connector
1 parent 75b443e commit 9e62d12

File tree

2 files changed

+42
-32
lines changed

2 files changed

+42
-32
lines changed

.github/workflows/main.yml

Lines changed: 40 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -138,7 +138,7 @@ jobs:
138138
SERVICE_ACCOUNT: ${{ vars.GCP_SA_EMAIL }}
139139
MIGRATOR_SERVICE: ${{ vars.GCP_SERVICE_MIGRATOR_NAME }}
140140
API_IMAGE: ${{ vars.GCP_PROJECT_REGION }}-docker.pkg.dev/${{ vars.GCP_PROJECT_ID }}/${{ vars.GCP_ARTIFACT_REGISTRY }}/${{ vars.GCP_SERVICE_API_NAME }}:${{ github.sha }}
141-
# SQL_INSTANCE_NAME: ${{ vars.GCP_SQL_INSTANCE_CONNECTION_NAME }}
141+
SQL_INSTANCE_NAME: ${{ vars.GCP_SQL_INSTANCE_CONNECTION_NAME }}
142142
DB_URL_SECRET: ${{ vars.GCP_SECRET_DB_URL }}
143143
runs-on: ubuntu-latest
144144

@@ -152,21 +152,25 @@ jobs:
152152
uses: google-github-actions/setup-gcloud@v1
153153

154154
- name: Deploy migration job to Cloud Run
155-
# re-add this for cloudsql integration
156-
# --set-cloudsql-instances=${{ env.SQL_INSTANCE_NAME }}
157155
run: |-
158-
gcloud --quiet run jobs deploy ${{ env.MIGRATOR_SERVICE }} \
159-
--image=${{ env.API_IMAGE }} \
160-
--region=${{ env.PROJECT_REGION }} \
161-
--service-account=${{ env.SERVICE_ACCOUNT }} \
162-
--network=default \
163-
--subnet=default \
164-
--vpc-egress=private-ranges-only \
165-
--set-secrets=DB_CONNECTION_STRING=${{ env.DB_URL_SECRET }}:latest \
166-
--args=--migrate \
167-
--max-retries=3 \
168-
--execute-now \
169-
--wait
156+
CMD="gcloud --quiet run jobs deploy ${{ env.MIGRATOR_SERVICE }} \
157+
--image=${{ env.API_IMAGE }} \
158+
--region=${{ env.PROJECT_REGION }} \
159+
--service-account=${{ env.SERVICE_ACCOUNT }} \
160+
--network=default \
161+
--subnet=default \
162+
--vpc-egress=private-ranges-only \
163+
--set-secrets=DB_CONNECTION_STRING=${{ env.DB_URL_SECRET }}:latest \
164+
--args=--migrate \
165+
--max-retries=3 \
166+
--execute-now \
167+
--wait"
168+
169+
if [ -n "${{ env.SQL_INSTANCE_NAME }}" ]; then
170+
CMD="$CMD --set-cloudsql-instances=${{ env.SQL_INSTANCE_NAME }}"
171+
fi
172+
173+
eval "$CMD"
170174
171175
deploy-services:
172176
needs: [deploy-migrator, push-ui-container]
@@ -181,7 +185,7 @@ jobs:
181185
UI_SERVICE: ${{ vars.GCP_SERVICE_UI_NAME }}
182186
UI_MAX_INSTANCES: ${{ vars.GCP_SERVICE_UI_MAX_INSTANCES }}
183187
UI_IMAGE: ${{ vars.GCP_PROJECT_REGION }}-docker.pkg.dev/${{ vars.GCP_PROJECT_ID }}/${{ vars.GCP_ARTIFACT_REGISTRY }}/${{ vars.GCP_SERVICE_UI_NAME }}:${{ github.sha }}
184-
# SQL_INSTANCE_NAME: ${{ vars.GCP_SQL_INSTANCE_CONNECTION_NAME }}
188+
SQL_INSTANCE_NAME: ${{ vars.GCP_SQL_INSTANCE_CONNECTION_NAME }}
185189
TG_TOKEN_SECRET: ${{ vars.GCP_SECRET_TG_BOT_TOKEN }}
186190
TG_PAYMENTS_SECRET: ${{ vars.GCP_SECRET_TG_PAYMENTS_TOKEN }}
187191
JWT_SECRET: ${{ vars.GCP_SECRET_JWT_SECRET }}
@@ -205,23 +209,27 @@ jobs:
205209
uses: google-github-actions/setup-gcloud@v1
206210

207211
- name: Deploy API service to Cloud Run
208-
# re-add this for cloudsql integration
209-
# --set-cloudsql-instances=${{ env.SQL_INSTANCE_NAME }}
210212
run: |-
211-
gcloud --quiet run deploy ${{ env.API_SERVICE }} \
212-
--image=${{ env.API_IMAGE }} \
213-
--region=${{ env.PROJECT_REGION }} \
214-
--service-account=${{ env.SERVICE_ACCOUNT }} \
215-
--network=default \
216-
--subnet=default \
217-
--vpc-egress=private-ranges-only \
218-
--max-instances=${{ env.API_MAX_INSTANCES }} \
219-
--set-secrets=TELEGRAM_BOT_TOKEN=${{ env.TG_TOKEN_SECRET }}:latest \
220-
--set-secrets=TELEGRAM_PAYMENTS_TOKEN=${{ env.TG_PAYMENTS_SECRET }}:latest \
221-
--set-secrets=JWT_SECRET=${{ env.JWT_SECRET }}:latest \
222-
--set-secrets=DB_CONNECTION_STRING=${{ env.DB_URL_SECRET }}:latest \
223-
--set-secrets=S3_CONNECTION_STRING=${{ env.S3_URL_SECRET }}:latest \
224-
--allow-unauthenticated
213+
CMD="gcloud --quiet run deploy ${{ env.API_SERVICE }} \
214+
--image=${{ env.API_IMAGE }} \
215+
--region=${{ env.PROJECT_REGION }} \
216+
--service-account=${{ env.SERVICE_ACCOUNT }} \
217+
--network=default \
218+
--subnet=default \
219+
--vpc-egress=private-ranges-only \
220+
--max-instances=${{ env.API_MAX_INSTANCES }} \
221+
--set-secrets=TELEGRAM_BOT_TOKEN=${{ env.TG_TOKEN_SECRET }}:latest \
222+
--set-secrets=TELEGRAM_PAYMENTS_TOKEN=${{ env.TG_PAYMENTS_SECRET }}:latest \
223+
--set-secrets=JWT_SECRET=${{ env.JWT_SECRET }}:latest \
224+
--set-secrets=DB_CONNECTION_STRING=${{ env.DB_URL_SECRET }}:latest \
225+
--set-secrets=S3_CONNECTION_STRING=${{ env.S3_URL_SECRET }}:latest \
226+
--allow-unauthenticated"
227+
228+
if [ -n "${{ env.SQL_INSTANCE_NAME }}" ]; then
229+
CMD="$CMD --set-cloudsql-instances=${{ env.SQL_INSTANCE_NAME }}"
230+
fi
231+
232+
eval "$CMD"
225233
226234
- name: Get API service URL
227235
run: echo "API_URL=$(gcloud --quiet run services describe ${{ env.API_SERVICE }} --platform managed --region ${{ env.PROJECT_REGION }} --format 'value(status.url)')" >> $GITHUB_ENV

README.md

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -122,6 +122,8 @@ Deployment setup:
122122

123123
After successful deployment, obtain the bot API URL from either `deploy-services` job results or from [GCP Project Console](https://console.cloud.google.com) and proceed to [switching bot environment](#switching-bot-environment).
124124

125+
Alternatively, to fit within the [GCP free tier](https://cloud.google.com/free/docs/free-cloud-features#free-tier), you can deploy PostgreSQL on an e2-micro Compute Engine VM and connect Cloud Run services using [Direct VPC](https://cloud.google.com/run/docs/configuring/vpc-direct-vpc). However, because a self-managed PostgreSQL instance requires additional configuration and operational oversight, this approach is not covered in this instruction.
126+
125127
## Switching bot environment
126128
After the bot is either [launched locally](#local-environment) or [deployed in GCP](#production-deployment), Telegram needs to be configured with a proper webhook URL. To set it, use:
127129
```sh

0 commit comments

Comments
 (0)