flask非常灵活,也非常难以驾驭,如何把flask同日常使用的功能结合起来,是需要考虑的问题,这里提供了一些方案
部署往往是新手写程序遇到的难题,有了docker之后,方便了很多。但每次更新完自己的代码,重新发布到服务器上又要花费一些时间。这里提供一种解决思路:
通过gitlab ci+docker-compose 完成个人项目的持续发布
docker-compose: nginx+mysql+redis 通过Dockerfile将程序运行在容器中
保证每次Push代码,线上的代码可以一键更新。
ssh为非对称加密,需要在本机上生成公钥和私钥,然后把公钥交给需要登录的机器。然后将私钥以变量
的信息存在gitlab ci中。
在gitlab runner中通过docker镜像和依赖进行测试。进行flak8和pytest单元测试。
通过ssh命令更新server下的代码,然后docker-compose rebuild
每次向gitlab push代码的时候,自动触发测试任务,手动触发deploy任务。
在create_app时,加载update_celery方法。更新config,同时将task放在context下
新建run_celery文件:
from jasmine_app import create_app
from jasmine_app import celery
app = create_app()
app.app_context().push()
celery worker -B -A run_celery.celery --loglevel=info
docker build --cache-from jasmine:latest -t jasmine:latest .
docker tag jasmine:latest fjl2401/jasmine
docker push fjl2401/jasmine
安装: pip install python-dotenv
在root目录下加入.env文件 .env文件中加入配置
需要去sentry注册并生成秘钥,官方文档也挺好的。主要给出屏蔽错误信息方法。
有两种方法
pip install --upgrade sentry-sdk[flask]==0.5.5
import sentry_sdk
from sentry_sdk.integrations.flask import FlaskIntegration
sentry_sdk.init(
dsn="https://e3c5ddd746d9486d9f0a76b6953d8be2@sentry.io/1327554",
integrations=[FlaskIntegration()]
)
在需要跑脚本的时候可以把脚本文件统一放在commands下做处理
通过AppGroup自定义cli,然后import_string()将commands加载进来
# extension文件中
usr_cli = AppGroup("user")
import_string("play_flask.single_app.command")
# 写在commands文件夹中
@usr_cli.command("create_user")
def create_user():
"""
create user
"""
print("create user {}".format("cli"))
print(current_app.config)
# 在init_app时
app.cli.add_command(usr_cli)
app中create_app 并运行
gunicorn --bind 0.0.0.0