docker-compose 简单部署Flask + Redis + Nginx环境搭建网站

news2024/11/15 21:36:18

主博客目录:《从零开始学习搭建量化平台笔记》

Website Server
主项目计划需要搭建一个 Flask + Redis + Nginx环境 来制作一个可视化的网站,为了避免搭完就忘,因此就有了这个博客。
任务:搭建一个内网通信且只有由Nginx代理发放的网页端显示环境。

  1. 默认已经安装好了 Docker 与 docker-compose。若未安装,可点击链接。
  2. 拉取 Flask, Redis, Nginx 所需镜像:
# 拉取 Flask 依赖镜像 Python
sudo docker pull python

# 拉取 Redis
sudo docker pull redis

# 拉取 Nginx
sudo docker pull nginx
  1. 生成Flask 初始化所需文件与文件夹:
mkdir code
touch requirements.txt
touch code/runserver.py
touch Dockerfile

requirements.txt 内写需要依赖的库:

# 环境依赖包
redis
flask
gevent

# SQL 依赖包
flask-sqlalchemy
pymysql
cryptography

编写 Flask 运行脚本 code/runserver.py

"""
此脚本使用pywsgi代理
"""
import time
from gevent import pywsgi
from flask import Flask

app = Flask(__name__)

# 编写网页 主页与home
@app.route("/")
@app.route("/home")
def home():
    return "Hello World\n"

# 运行模式为发布模式
server = pywsgi.WSGIServer(("0.0.0.0", 5000), app)
server.serve_forever()

# 此为开发模式
# app.run(debug=True, host="0.0.0.0", port=5000)

编写 Flask 部署 Dockerfile 文件:

# 使用 Python 最新版本镜像作为基础镜像
FROM python

# 设置工作目录
COPY "./code" "/code"
WORKDIR /code

# 设置默认开始脚本
ENV FLASK_APP=runserver.py
ENV FLASK_RUN_HOST=0.0.0.0
EXPOSE 5000

# 安装依赖 加速使用清华源
RUN python -m pip install --upgrade pip -i  https://pypi.tuna.tsinghua.edu.cn/simple/
RUN pip install -r requirements.txt -i  https://pypi.tuna.tsinghua.edu.cn/simple/

# 默认运行命令
CMD ["flask", "run"]
  1. 生成 Nginx 初始化所需文件与文件夹:
# 创建文件夹
mkdir cert html logs www
# 赋予权限
chmod 777 -R cert html logs www
# 生成配置文件
touch nginx.conf

Nginx 配置文件 nginx.conf:

worker_processes  1;
events {
    worker_connections  1024;
}
http {
    include       /etc/nginx/mime.types;
    server {
      listen       80;
      server_name  localhost;
      location / {
      		# 代理内网
            proxy_pass http://171.171.0.12:5000;
            proxy_redirect off;
            proxy_set_header Host $host:80;
            proxy_set_header X-Real-IP $remote_addr;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
            ## 如果是静态网站这么写
            #root   /usr/share/nginx/html;
            #index  index.html index.htm;
      }
    }
    access_log /var/log/nginx/access.log;
    error_log /var/log/nginx/error.log;
}
  1. 创建网桥 bridge,内网桥接各个dockers,并指定网关
# 列出已有docker网络
sudo docker network ls
# 添加网桥 名称 my-bridge 网关 171.171.0.1 掩码 171.171.0.0/24
sudo docker network  create --driver bridge --subnet=171.171.0.0/24 --gateway 171.171.0.1 my-bridge
# 查看是否添加成功
sudo docker network ls
# 查看细节
sudo docker network inspect my-bridge
  1. 编写 docker-compose.yml, 需注意缩进。
version: '3'

networks:
    my-bridge:
        external: true

services:
    nginx:
        image: nginx
        container_name: nginx
        ports:
            - "80:80"
        volumes:
            - /Nginx/html:/usr/share/nginx/html
            - /Nginx/www:/var/www
            - /Nginx/logs:/var/log/nginx
            # 有可能会出现不能挂载,这个时候用手动拷贝配置文件就行
            - /Nginx/nginx.conf/:/etc/nginx/nginx.conf
            - /Nginx/cert:/etc/nginx/cert
            - /Nginx/conf.d:/etc/nginx/conf.d
        privileged: true
        environment:
            - NGINX_PORT=80
            - TZ=Asia/Shanghai
        restart: always
        logging:
            driver: json-file
            options:
                max-size: "20m" # 单个文件大小为20m
                max-file: "2" # 最多2个文件
        networks:
            my-bridge:
                ipv4_address: 171.171.0.2

    redis:
        image: redis
        container_name: redis
        volumes:
            - redis-data:/data
        environment:
            - TZ=Asia/Shanghai
        restart: always
        logging:
            driver: json-file
            options:
                max-size: "20m" # 单个文件大小为20m
                max-file: "2" # 最多2个文件
        networks:
            my-bridge:
                ipv4_address: 171.171.0.3

    flask:
        build: /Flask
        container_name: flask
        ports:
            - "5000:5000"
        volumes:
            - /Flask/code:/code
            - /Flask/logs:/logs
        environment:
            - TZ=Asia/Shanghai
        depends_on:
            - redis
        restart: always
        logging:
            driver: json-file
            options:
                max-size: "20m" # 单个文件大小为20m
                max-file: "2" # 最多2个文件
        networks:
            my-bridge:
                ipv4_address: 171.171.0.12


volumes:
    redis-data:
        driver: local

至此开放服务器防护墙 80 端口,外网即可访问网页,并显示 Hello World

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1151348.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Unity多人同时在线海量玩家角色的架构与设计

前言 Unity多人同时在线的游戏会有很大的地图,大量的玩家同时在线,以及玩家会有不同的游戏职业,这样众多的玩家游戏角色我们客户端应该如何来设计呢?本文来分享以下几个点 对惹,这里有一个游戏开发交流小组,希望大家…

腾讯待办小程序关停怎么办?可替代的智能待办提醒工具

有不少小伙伴在选择待办提醒工具时,会使用微信中的腾讯待办小程序,在里面逐条记录待办事项、设置定时提醒,然后通过微信接收待办提醒。 不过最近一段时间,使用腾讯待办的用户都发现了“业务关停通知”的弹窗,确实如此…

代码随想录打卡第五十五天|● 300.最长递增子序列 ● 674. 最长连续递增序列 ● 718. 最长重复子数组

300.最长递增子序列 **题目:**给你一个整数数组 nums ,找到其中最长严格递增子序列的长度。子序列 是由数组派生而来的序列,删除(或不删除)数组中的元素而不改变其余元素的顺序。例如,[3,6,2,7] 是数组 [0…

高数笔记04:微分方程与多元函数微分学

图源:文心一言 时间比较紧张,仅导图~~🥝🥝 第1版:查资料、画导图~🧩🧩 参考资料:《高等数学 基础篇》武忠祥 🦮思维导图 😶‍🌫️思维导图为整…

1.面向对象——继承

继承 子类拥有父类非 private 的属性、方法。 子类可以拥有自己的属性和方法,即子类可以对父类进行扩展。 子类可以用自己的方式实现父类的方法。 提高了类之间的耦合性(继承的缺点,耦合度高就会造成代码之间的联系越紧密,代码…

强化学习------DDQN算法

前言 DQN算法 DQN算法有一个显著的问题,就是DQN估计的Q值往往会偏大。这是由于我们Q值是以下一个s’的Q值的最大值来估算的,但下一个state的Q值也是一个估算值,也依赖它的下一个state的Q值…,这就导致了Q值往往会有偏大的的情况…

antd+全屏的坑(全屏下a-modal/下拉框等不展示)

问题:针对某个元素全屏时,下拉框/弹窗/二次确认窗不展示:下拉框是往body里面插入的,全屏的元素盖住了下拉框。解决:给有下拉框的加入:append-to-body"false"(缺点:每个都需要加&#…

k8s的概念

概念 它是一种开源的容器编排平台,用于自动化部署,扩展和管理容器化的应用程序,它提供了一种容器编排和管理的方式,可以帮助开发人员更轻松地管理容器化的的应用程序,并且提供了一种跨多个主机的自动化部署和管理机制…

为什么看了那么多测试技术帖,感觉自己还是菜?

作为测试新手,最爱莫过于看各大牛发的技术贴,这篇很牛叉,那篇也很有道理,似乎自己看着看着也会成为高手。然而几年后,发现自己对专业知识的理解乱的很,里面更有很多自相矛盾的地方,这到底是哪里…

PFAF-Net

I 1 _1 1​和I 2 _2 2​是多模态图像,I F _F F​是融合图像。FT 1 _1 1​是基于空间注意力的融合,FT 2 _2 2​是基于通道注意力的融合 作者未提供代码

Spring及SpringBoot中AOP的使用

Spring中AOP示例 <dependencies><!--Spring核心包--><dependency><groupId>org.springframework</groupId><artifactId>spring-core</artifactId><version>5.3.6</version></dependency><!--引入SpringBean--&…

Java工具库——commons-lang3的50个常用方法

未来的你&#xff0c;我亲爱的女孩&#xff0c;愿此刻无忧无虑&#xff0c;开心&#xff0c;快乐… 工具库介绍 Apache Commons Lang 3&#xff08;通常简称为Commons Lang 3&#xff09;是Apache Commons项目中的一个Java工具库&#xff0c;它提供了一系列实用的工具类和方法…

3.6每日一题(线性方程求通解)

1、判断类型选择方法&#xff1a;发现以y为未知函数&#xff0c;以x为自变量&#xff0c;不符合我们学过的类型 2、此时有两种方法&#xff1a; &#xff08;1&#xff09;x 与 y 对调&#xff0c;此时 x 为未知函数&#xff0c;y 为自变量 &#xff08;2&#xff09;变量代换…

【Mybatis-Plus】常见的@table类注解

目录 引入Mybatis-Plus依赖 TableName 当实体类的类名在转成小写后和数据库表名相同时 当实体类的类名在转成小写后和数据库表名不相同时 Tableld TableField 当数据库字段名与实体类成员不一致 成员变量名以is开头&#xff0c;且是布尔值 ​编辑 成员变量名与数据库关…

轻量级 IDE 文本编辑器 Geany 发布 2.0

Geany 是功能强大、稳定、轻量的开发者专用文本编辑器&#xff0c;支持 Linux、Windows 和 macOS&#xff0c;内置支持 50 多种编程语言。 2005 年Geany 发布首个版本 0.1。上周四刚好是 Geany 诞生 18 周年纪念日&#xff0c;官方发布了 2.0 正式版以表庆祝。 下载地址&#…

小红书app拉新上线了 适合网推社群和校园渠道作业

小红书app签到拉新上线了可以通过“聚量推客”进行申请&#xff0c;下面大概是要求和流程 要求网推社群渠道或者地推校园渠道&#xff0c;其它类型渠道禁止

R语言绘图-5-条形图(修改坐标轴以及图例等)

0. 说明&#xff1a; 1. 绘制条形图&#xff1b; 2. 添加文本并调整位置&#xff1b; 3. 调整x轴刻度的字体、角度及颜色&#xff1b; 4. 在导出pdf时&#xff0c;如果没有字体&#xff0c;该怎么解决问题&#xff1b; 1. 结果&#xff1a; 2. 代码&#xff1a; library(ggp…

sql--索引使用 ---覆盖索引

覆盖索引 Select 后接 * 走id索引才是最优&#xff0c;使用二级索引则需要回表&#xff08;性能稍差&#xff09; 前缀索引 Create index 索引名 on 表名( 字段名( n ) ) n数字 n代表提取这个字符串的n个构建索引 &#xff1f;&#xff1f;那么 n 为几性能是最好的呢&…

测试C#调用Aplayer播放视频(1:加载Aplayer控件)

微信公众号“Dotnet跨平台”的文章《开源精品&#xff0c;使用 C# 开发的 KTV 点歌项目》中使用了迅雷开源APlayer播放引擎。最近在学习有哪些能拿来播放视频的组件或控件&#xff0c;于是准备试试&#xff0c;根据文章中的介绍&#xff0c;在迅雷APlayer播放引擎网站中下载了A…

计算机出现msvcr110.dll文件丢失问题的五种常见方法

msvcr110.dll是Microsoft Visual C Redistributable的一部分&#xff0c;它是Windows操作系统上的一个动态链接库文件。它包含了许多与C编程相关的函数和库&#xff0c;用于支持应用程序的运行。如果电脑上缺少msvcr110.dll文件&#xff0c;可能会导致一些应用程序无法正常运行…