使用docker-compose + Raspberry Pi + nginx + Flask时,获取当前连接的Wi-Fi的SSID的备忘录

总结

在使用docker-compose + Raspberry Pi +nginx + Flask时,当我尝试获取当前连接的Wi-Fi的SSID时,遇到了一些困难,所以我决定记录下来方法。

文件结构

.
├── docker-compose.yml
├── nginx
│   └── default.conf
└── web
    ├── app.py
    ├── Dockerfile
    ├── requirements.txt
    └── templates
        └── index.html

docker-compose.yml 文件

事先在这里创建wpa_supplicant.conf文件的存储空间!!!!!!!!!!

version: "3"
services:
  nginx:
    image: nginx:latest
    container_name: nginx
    ports:
      - "82:80"
    volumes:
      - ./nginx/default.conf:/etc/nginx/conf.d/default.conf
    networks:
      - nginx_network

  web:
    build: ./web
    container_name: web
    ports:
      - 5002:5000
    volumes:
      - /etc/wpa_supplicant/wpa_supplicant.conf:/etc/wpa_supplicant/wpa_supplicant.conf
    networks:
      - nginx_network

networks:
  nginx_network:
    driver: bridge

默认配置文件

server {
    listen       80;
    server_name  localhost;

    location / {
        root   /usr/share/nginx/html;
        index  index.html index.htm;
    }

}

Dockerfile的中文释义是:引擎文件。

# Python3.7を使用
FROM python:3.7

# 作業ディレクトリを指定
WORKDIR /app

# カレントディレクトリのファイルをDockerコンテナの「/app」 ディレクトリにコピー
ADD . /app

# インストール
RUN pip install -r requirements.txt

# 外部に公開するポートを指定
EXPOSE 5000

# コンテナの実行コマンドを指定
CMD ["python", "app.py"]

要求清单

Flask
sqlalchemy
flask-sqlalchemy

索引.html

<!DOCTYPE html>
<html lang="jp">
<head>
    <meta charset="UTF-8">
    <title>SSIDの表示</title>
</head>
<body>
    <div>
        <table>
            <tbody>
                <p><現在の状態></p>
                <tr>
                    <li>接続中WiFiのSSID: {{wifissid}}</li>
                </tr><br>
            </tbody>
        </table>
    </div>
</body>
</html>

app.py的汉语翻译是app.py。

from flask import Flask
from flask import render_template
import re


app = Flask(__name__)

@app.route('/',methods=['POST','GET'])
def wifissid():
    reg = re.compile('(?<=")[^")]+(?=")')

    with open('/etc/wpa_supplicant/wpa_supplicant.conf', 'r',encoding='UTF-8') as f:
        lines = f.read().splitlines()
        m = re.search(reg,lines[4])
        ssid = m.group()

        return render_template('index.html', wifissid = ssid)


if __name__ == '__main__':
    app.run(host='0.0.0.0',port=5000,debug=True)

通过docker-compose执行

test@raspberrypi:~/server/flask $ docker-compose up -d
Creating network "flask_nginx_network" with driver "bridge"
Creating nginx ... done
Creating web   ... done

使用docker-compose检查状态。

test@raspberrypi:~/server/flask $ docker ps
CONTAINER ID   IMAGE             COMMAND                  CREATED          STATUS         PORTS                    NAMES
15f15f4d4042   flask_web   "python app.py"          2 minutes ago    Up 2 minutes   0.0.0.0:5002->5000/tcp         web
96a20fe360ce   nginx:latest      "/docker-entrypoint.…"   59 minutes ago   Up 7 minutes   0.0.0.0:82->80/tcp       nginx

请使用浏览器进行确认。

image.png
广告
将在 10 秒后关闭
bannerAds