• docker+mysql+flask+redis+vue3+uwsgi+docker部署


    首先拉取mysql的镜像,这里用的mysql5.7.6

    docker pull mysql:5.7.6

    镜像拉取完成后启动:

    docker run --name my-mysql -d -p 3306:3306 -v /usr/local/my-mysql/conf:/etc/mysql/conf.d -v /usr/local/my-mysql/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456  mysql:5.7.6

    利用dockerfile构建python3.9.11+uwsgi+nginx

    1. FROM python:3.9.11
    2. # 为镜像添加标签
    3. LABEL version="v1" description="Docker deploy Flask" by="guochunbiao"
    4. RUN mkdir /opt/flask_app
    5. COPY ./bask_flask /opt/flask_app/bask_flask
    6. COPY ./dist /opt/flask_app/dist
    7. COPY ./site-pages /usr/local/lib/python3.9/site-packages
    8. COPY ./nginx.conf /etc/nginx/nginx.conf
    9. # 配置工作目录
    10. WORKDIR /opt/flask_app
    11. # 在镜像容器中执行命令
    12. RUN pip install Flask && pip install uwsgi -i https://pypi.tuna.tsinghua.edu.cn/simple/
    13. #RUN pip install Flask && pip install -r request.txt -i https://pypi.tuna.tsinghua.edu.cn/simple/
    14. #安装nginx
    15. apt-get update
    16. apt-get install nginx
    17. apt-get install vim

    构建:

    docker build -t mydemo .

    flask配置:

    #基本项目创建
    pip freeze > requirements.txt

    安装:pip install -r requirements.txt

    #安装flask-sqlalchey flask-migrate mysql数据库
    pip install flask-sqlalchemy flask-migrate
    #安装 flask-cors解决跨域访问
    pip install flask-cors
    
    数据库迁移
          创建迁移数据库 flask db init
          生成迁移脚本 flask db migrate -m "add user tables"
          将迁移脚本应用到数据库中 flask db upgrade 这个执行前确保,alembic_version的标号是最新的,不是手动更新在migrations->versions目录下
          将迁移脚本回滚 flask db downgrade

    celery:

    启动redis celery -A auto.celery worker -l info -P eventlet

    微信支付python的库

    pip3.9 install wechatpayv3==1.2.35 -i https://pypi.tuna.tsinghua.edu.cn/simple/

    --link redis:redis-server flask容器就可以读取redis容器redis服务了:

    docker pull redis:5.0.3

    docker run --name redis -d redis:5.0.3 redis-server --appendonly yes

    说明:

    1. 使用Docker运行一个名为"redis"的容器。
    2. 使用"redis:5.0.3"这个Docker镜像来创建这个容器。这个镜像是Redis数据库的一个版本。
    3. "-d"参数表示容器将在"detached"模式下运行,也就是说这个容器将在后台运行。
    4. "redis-server --appendonly yes"是传递给容器的命令,它将启动一个Redis服务器并开启append-only模式。这个模式会把所有的修改操作都记录下来,以便在数据库重启后可以通过这些记录恢复数据。
    docker run --name flask -p 5000:5000 -p 3000:3000  --link redis:redis-server -itd auto_flask_nginx_v1.0:v1.0

    说明:

    1. 使用 Docker 运行一个名为 "flask" 的容器。
    2. 使用 "auto_flask_nginx_v1.0:v1.0" 这个 Docker 镜像来创建这个容器。
    3. "-p 5000:5000" 和 "-p 3000:3000" 参数将容器内的端口 5000 和 3000 分别映射到主机的端口 5000 和 3000,这样你就可以通过主机的这两个端口来访问容器内的服务了。
    4. "--link redis:redis-server" 参数将链接名为 "redis" 的容器到 "flask" 容器,并在 "flask" 容器中用 "redis-server" 这个名字来引用 "redis" 容器。这样,"flask" 容器就可以通过 "redis-server" 这个名字来访问 "redis" 容器提供的服务了。
    5. "-itd" 参数表示容器将在 "detached" 模式下运行,并以交互模式打开一个伪终端。

    1. # 获取access_token用来获取微信用户openid
    2. def secret_token(code, user):
    3. redis_conn = redis.Redis(host='redis-server', port=6379)
    4. is_key = redis_conn.hget('{}_zc_token'.format(user), 'wx_token')
    5. if is_key:
    6. return is_key
    7. else:
    8. url = "https://api.weixin.qq.com/sns/oauth2/access_token?appid={0}&secret={1}&code={2}&grant_type=authorization_code".format(
    9. APP_ID,
    10. APP_SECRET, code)
    11. response_data = requests.get(url)
    12. eval_resp = eval(response_data.content)
    13. redis_conn.hset('{}_zc_token'.format(eval_resp.get('openid')), 'wx_token', response_data.content)
    14. redis_conn.expire('{}_zc_token'.format(eval_resp.get('openid')), 7100)
    15. return response_data.content

    参考连接:

    http://hk.javashuo.com/article/p-kgdqsqip-bv.html

    uwsgi.ini配置:

    1. [uwsgi]
    2. #项目目录
    3. chdir=/opt/flask_app
    4. #指定项目的应用,固定写法,承接上面的项目目录
    5. module=auto:app
    6. wsgi-file=/opt/flask_app/auto.py
    7. callable=app
    8. #sock文件存放目录,方便nginx进行sock连接交互
    9. socket=/opt/flask_app/uwsgi_log/uwsgi.sock
    10. #并发进程
    11. workers=5
    12. #进程id存放文件
    13. pidfile=/opt/flask_app/uwsgi_log/uwsgi.pid
    14. #启动的ip及端口
    15. http=0.0.0.0:5000
    16. # 对应app.py文件中Flask对象对应的变量名
    17. callable=auto
    18. #静态文件映射,第一个等于代表Django里面的别名,第二个等于后面是Django里面的真实路径
    19. #static-map=/static=/opt/AutomationPlatform/frontend/static/
    20. #启动的用户和组
    21. uid=root
    22. gid=root
    23. #启用主进程
    24. master=true
    25. #自动移除unixSocket和pid文件当服务停止的时候
    26. vacuum=true
    27. #序列化接受的内容,如果可能的话
    28. thunder-lock=true
    29. #启用线程
    30. enable-threads=true
    31. #设置自中断时间
    32. harakiri=36000
    33. #设置缓存
    34. post-buffering=1024
    35. #日志存放目录,方便拍错
    36. daemonize=/opt/flask_app/uwsgi_log/uwsgi.log

    启动:

    uwsgi --ini uwsgi.ini

    停止:

    uwsgi --stop uwsgi_log/uwsgi.pid

    部署Vue3到Nginx和设置请求转发需要以下步骤:

    1. 构建Vue3项目:在项目目录下运行npm run build命令。这会生成一个dist目录,里面包含构建后的静态文件。

    2. 部署到Nginx:将dist目录下的所有文件复制到Nginx的web目录下,例如/usr/share/nginx/html/

    3. 配置Nginx转发请求:在Nginx的配置文件中添加一个新的server块。例如:

      1. server {
      2. listen 80;
      3. server_name yourdomain.com;
      4. location / {
      5. root /usr/share/nginx/html; # Vue3项目在Nginx的路径
      6. index index.html;
      7. try_files $uri $uri/ /index.html; # 用于支持Vue的history模式
      8. }
      9. location /api {
      10. proxy_pass http://backend:3000; # 假设后端服务运行在3000端口
      11. }
      12. }

    4. /api路径下的所有请求都会被转发到后端服务。

    5. 重启Nginx:最后,你需要重启Nginx以应用新的配置。在Linux上,你可以使用sudo systemctl restart nginx命令。

  • 相关阅读:
    Apache Druid连接回收引发的血案
    代码随想录Leetcode 343. 整数拆分
    万字爽文一篇带你掌握Java8新特性
    Git 安装和基础命令、IDEA 基础操作
    ASP.NET Core 6框架揭秘实例演示[13]:日志的基本编程模式
    Vue2+ElementUI 静态首页案例
    Union类型和集合的union()方法-set.union()
    人工智能应用加速落地,推动券商业务+IT双升级|爱分析报告
    关键主题汇编
    (笔记)Kotlin——Android封装ViewBinding之二 优化
  • 原文地址:https://blog.csdn.net/guochunbiao0416/article/details/133296396