我一直在尝试部署一个使用Google云应用程序引擎的Web应用程序。我的应用程序使用 Flask 和 sqlalchemy 连接到 mysql 谷歌云数据库。该网站已创建,但当尝试单击链接时,它只会无限加载。日志没有为我指明任何方向。
目前这是我的 app.yaml 文件
runtime: python
env: flex
entrypoint: gunicorn -b :$PORT main:app
runtime_config:
operating_system: ubuntu22
manual_scaling:
instances: 1
resources:
cpu: 1
memory_gb: 0.5
disk_size_gb: 10
这是直接从 Gcloud 示例文件复制的。我的 main.py 文件是
from Website import create_app
app = create_app()
if __name__ == '__main__':
app.run(host="127.0.0.1", port=8080, debug=True)
这是我的 init.py 文件,位于我的网站文件夹中
from flask import Flask
from flask_sqlalchemy import SQLAlchemy
from flask_login import LoginManager
from sqlalchemy import create_engine
db = SQLAlchemy()
DB_NAME = "database.db"
def create_app():
app = Flask(__name__)
app.config['SECRET_KEY'] = 'Secret Key'
PASSWORD = "DB Password"
PUBLIC_IP_ADDRESS = "Ip address of database"
DBNAME = "Database Name"
PROJECT_ID = "Project Id"
INSTANCE_NAME = "Instance Name"
app.config["SQLALCHEMY_DATABASE_URI"] = f"mysql+mysqldb://root:{PASSWORD}@{PUBLIC_IP_ADDRESS}/{DBNAME}?unix_socket=/cloudsql/{PROJECT_ID}:{INSTANCE_NAME}"
app.config["SQLALCHEMY_TRACK_MODIFICATIONS"] = True
db.init_app(app)
from .views import views
from .auth import auth
app.register_blueprint(views, url_prefix='/')
app.register_blueprint(auth, url_prefix='/')
from .models import User
login_manager = LoginManager()
login_manager.login_view = 'auth.login'
login_manager.init_app(app)
@login_manager.user_loader
def load_user(id):
return User.query.get(int(id))
with app.app_context():
db.create_all()
return app
这是我第一次部署网站,所以这可能是一个简单的修复,但我不知道我可以更改什么,所以任何提示都会有很大帮助!
正如@guillaume blaquiere 所提到的
不会解决您的问题,但是...您的应用程序可以使用 App Engine 标准。或者,使用 Cloud Run 而不是 App Engine Flex。您还应该使用秘密管理器而不是配置文件中的秘密
guillaume blaquiere 是对的,从 App Engine Flex 切换到 App Engine standard 或 Cloud Run 可能会帮助您解决问题。称为 App Engine 标准的托管环境是专门为运行 Web 应用程序而创建的。对于您的应用程序来说,它可能比 App Engine Flex 性能更高,并且设置和配置更简单。
Cloud Run 是一个无服务器计算平台,允许您运行代码而无需管理服务器。对于遇到流量突然激增的应用程序来说,这是一个不错的选择,因为它可以自动扩展和缩小以满足需求。
使用机密管理器来确保您的机密(包括数据库密码)安全。您的应用程序将因此变得更加易于管理和安全。
如果您在迁移到 App Engine 标准 或 Cloud Run 方面需要帮助,可以使用以下文档: