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

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

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

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

# 拉取 Redis
sudo docker pull redis

# 拉取 Nginx
sudo docker pull nginx
  1. 生成Flask 初始化所需文件与文件夹:
# 创建工作目录
mkdir Flask
cd Flask
# 创建共享文件夹与文件
mkdir code logs
touch code/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 Nginx
cd 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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值