Skip to content

Commit ee13205

Browse files
committed
switch to app engine standard
1 parent 67400bf commit ee13205

7 files changed

Lines changed: 39 additions & 107 deletions

File tree

.github/workflows/staging.yml

Lines changed: 24 additions & 49 deletions
Original file line numberDiff line numberDiff line change
@@ -105,62 +105,43 @@ jobs:
105105
print("Missing required secrets: " + ", ".join(missing), file=sys.stderr)
106106
sys.exit(1)
107107
108-
config = {
109-
"service": "staging-api",
110-
"runtime": "custom",
111-
"env": "flex",
112-
"entrypoint": "gunicorn -c gunicorn.config.py -b :$PORT main:app",
113-
"manual_scaling": {"instances": 1},
114-
"resources": {"cpu": 1, "memory_gb": 0.6, "disk_size_gb": 15},
115-
"env_variables": {
116-
"DATABASE_URL": os.environ["STAGING_DATABASE_URL"],
117-
"SECRET_KEY": os.environ["STAGING_SECRET_KEY"],
118-
"SMTP_USERNAME": os.environ["SMTP_USERNAME"],
119-
"SMTP_PASSWORD": os.environ["SMTP_PASSWORD"],
120-
"SMTP_SENDER_NAME": "Deep Learning Indaba",
121-
"SMTP_SENDER_EMAIL": os.environ.get("SMTP_SENDER_EMAIL", "baobab@deeplearningindaba.com"),
122-
"SMTP_HOST": os.environ.get("SMTP_HOST", "email-smtp.us-east-1.amazonaws.com"),
123-
"SMTP_PORT": os.environ.get("SMTP_PORT", "587"),
124-
"GCP_CLIENT_ID": os.environ["STAGING_GCP_CLIENT_ID"],
125-
"GCP_CLIENT_EMAIL": os.environ["STAGING_GCP_CLIENT_EMAIL"],
126-
"GCP_PRIVATE_KEY_ID": os.environ["STAGING_GCP_PRIVATE_KEY_ID"],
127-
"GCP_PRIVATE_KEY": os.environ["STAGING_GCP_PRIVATE_KEY"],
128-
"GCP_PROJECT_NAME": os.environ["GCP_PROJECT_ID"],
129-
"GCP_BUCKET_NAME": os.environ["STAGING_BACKEND_BUCKET"],
130-
"FILE_SIZE_LIMIT": "10485760",
131-
"BOABAB_HOST": os.environ.get("STAGING_BAOBAB_HOST", "https://test-baobab.deeplearningindaba.com/"),
132-
},
133-
"beta_settings": {
134-
"cloud_sql_instances": os.environ["STAGING_CLOUD_SQL_INSTANCE"]
135-
},
136-
"readiness_check": {"app_start_timeout_sec": 600},
108+
env_variables = {
109+
"DATABASE_URL": os.environ["STAGING_DATABASE_URL"],
110+
"SECRET_KEY": os.environ["STAGING_SECRET_KEY"],
111+
"SMTP_USERNAME": os.environ["SMTP_USERNAME"],
112+
"SMTP_PASSWORD": os.environ["SMTP_PASSWORD"],
113+
"SMTP_SENDER_NAME": "Deep Learning Indaba",
114+
"SMTP_SENDER_EMAIL": os.environ.get("SMTP_SENDER_EMAIL", "baobab@deeplearningindaba.com"),
115+
"SMTP_HOST": os.environ.get("SMTP_HOST", "email-smtp.us-east-1.amazonaws.com"),
116+
"SMTP_PORT": os.environ.get("SMTP_PORT", "587"),
117+
"GCP_CLIENT_ID": os.environ["STAGING_GCP_CLIENT_ID"],
118+
"GCP_CLIENT_EMAIL": os.environ["STAGING_GCP_CLIENT_EMAIL"],
119+
"GCP_PRIVATE_KEY_ID": os.environ["STAGING_GCP_PRIVATE_KEY_ID"],
120+
"GCP_PRIVATE_KEY": os.environ["STAGING_GCP_PRIVATE_KEY"],
121+
"GCP_PROJECT_NAME": os.environ["GCP_PROJECT_ID"],
122+
"GCP_BUCKET_NAME": os.environ["STAGING_BACKEND_BUCKET"],
123+
"FILE_SIZE_LIMIT": "10485760",
124+
"BOABAB_HOST": os.environ.get("STAGING_BAOBAB_HOST", "https://test-baobab.deeplearningindaba.com/"),
137125
}
138126
139127
def scalar(value):
140128
return "'" + str(value).replace("\\n", "\\\\n").replace("'", "''") + "'"
141129
142130
with open("app.generated.yaml", "w") as f:
143-
f.write("service: " + config["service"] + "\n")
144-
f.write("runtime: " + config["runtime"] + "\n")
145-
f.write("env: " + config["env"] + "\n")
146-
f.write("entrypoint: " + scalar(config["entrypoint"]) + "\n")
131+
f.write("service: staging-api\n")
132+
f.write("runtime: python311\n")
133+
f.write("instance_class: B4\n")
134+
f.write("entrypoint: " + scalar("gunicorn -c gunicorn.config.py -b :$PORT main:app") + "\n")
147135
f.write("\n")
148136
f.write("manual_scaling:\n")
149-
f.write(" instances: " + str(config["manual_scaling"]["instances"]) + "\n")
150-
f.write("resources:\n")
151-
f.write(" cpu: " + str(config["resources"]["cpu"]) + "\n")
152-
f.write(" memory_gb: " + str(config["resources"]["memory_gb"]) + "\n")
153-
f.write(" disk_size_gb: " + str(config["resources"]["disk_size_gb"]) + "\n")
137+
f.write(" instances: 1\n")
154138
f.write("\n")
155139
f.write("env_variables:\n")
156-
for key, value in config["env_variables"].items():
140+
for key, value in env_variables.items():
157141
f.write(" " + key + ": " + scalar(value) + "\n")
158142
f.write("\n")
159143
f.write("beta_settings:\n")
160-
f.write(" cloud_sql_instances: " + scalar(config["beta_settings"]["cloud_sql_instances"]) + "\n")
161-
f.write("\n")
162-
f.write("readiness_check:\n")
163-
f.write(" app_start_timeout_sec: " + str(config["readiness_check"]["app_start_timeout_sec"]) + "\n")
144+
f.write(" cloud_sql_instances: " + scalar(os.environ["STAGING_CLOUD_SQL_INSTANCE"]) + "\n")
164145
PY
165146
env:
166147
GCP_PROJECT_ID: ${{ secrets.GCP_PROJECT_ID }}
@@ -179,11 +160,5 @@ jobs:
179160
STAGING_BAOBAB_HOST: ${{ secrets.STAGING_BAOBAB_HOST }}
180161
STAGING_CLOUD_SQL_INSTANCE: ${{ secrets.STAGING_CLOUD_SQL_INSTANCE }}
181162

182-
- name: Use deployment Dockerfile
183-
run: cp Dockerfile.deploy Dockerfile
184-
185-
- name: Increase App Engine Cloud Build timeout
186-
run: gcloud config set app/cloud_build_timeout 7200
187-
188163
- name: Deploy backend to App Engine staging service
189164
run: gcloud app deploy app.generated.yaml --quiet --promote --stop-previous-version --version=v1

api/app/__init__.py

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,6 @@
55
from flask_bcrypt import Bcrypt
66
from flask_migrate import Migrate, MigrateCommand
77
from flask_script import Manager
8-
from flask_redis import FlaskRedis
98
from .utils.logger import Logger
109
from flask_admin import Admin, AdminIndexView, helpers, expose
1110
from flask_admin.contrib.sqla import ModelView
@@ -21,7 +20,6 @@
2120
rest_api = restful.Api(app)
2221
db = SQLAlchemy(app)
2322
bcrypt = Bcrypt(app)
24-
redis = FlaskRedis(app)
2523
LOGGER = Logger().get_logger()
2624

2725
from . import routes

api/app/invoice/invoice.pdf

0 Bytes
Binary file not shown.

api/app/utils/rate_limit.py

Lines changed: 0 additions & 47 deletions
This file was deleted.

api/main.py

Lines changed: 15 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,17 @@
1-
from app import app
2-
application = app # make uwsgi happy
1+
import logging
2+
import sys
3+
import traceback
4+
5+
logging.basicConfig(stream=sys.stderr, level=logging.DEBUG,
6+
format='%(asctime)s %(levelname)s %(message)s')
7+
8+
try:
9+
from app import app
10+
application = app # make uwsgi happy
11+
logging.info("App initialized successfully")
12+
except Exception:
13+
logging.critical("STARTUP FAILED:\n%s", traceback.format_exc())
14+
sys.exit(3)
15+
316
if __name__ == "__main__":
417
app.run()

api/requirements.txt

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,6 @@ Flask-Bcrypt==0.7.1
55
Flask-Failsafe
66
Flask-Migrate==2.7.0
77
Flask-RESTful==0.3.8
8-
Flask-Redis
98
Flask-SQLAlchemy==2.5.1
109
Flask-Script==2.0.6
1110
Flask-Login
@@ -24,7 +23,6 @@ itsdangerous==1.1.0
2423
pytest
2524
passlib
2625
pytz
27-
redis
2826
six
2927
flask-cors
3028
python-dateutil

docker-compose.yml

Lines changed: 0 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,5 @@
11
version: "3.2"
22
services:
3-
redis:
4-
image: redis
5-
ports:
6-
- 6379:6379
73
db:
84
image: postgres
95
ports:
@@ -27,7 +23,6 @@ services:
2723
links:
2824
- db
2925
- storage
30-
- redis
3126
environment:
3227
DEBUG: "True"
3328
SECRET_KEY: __filler__

0 commit comments

Comments
 (0)