ubuntu
カテゴリ
ゴルフ管理アプリ作成
2026/07/07 15時golf
Flaskアプリ本体の/mnt/data/docker/golf_app/app.py
#!/usr/bin/env python3
"""ゴルフスコア管理 WebUI"""

from flask import Flask, render_template, request, jsonify, redirect, url_for, send_from_directory
import sqlite3
from pathlib import Path
from datetime import datetime

app = Flask(__name__)
app.config["APPLICATION_ROOT"] = "/golf"
app.config["PREFERRED_URL_SCHEME"] = "https"

@app.context_processor
def inject_base_path():
    return {"base_path": "/golf"}
from werkzeug.middleware.proxy_fix import ProxyFix
app.wsgi_app = ProxyFix(app.wsgi_app, x_prefix=1)
DB_PATH = Path("/app/golf.db")

def get_db():
    conn = sqlite3.connect(DB_PATH)
    conn.row_factory = sqlite3.Row
    return conn
-------------割愛-------------

/mnt/data/docker/golf_app/Dockerfile
FROM python:3.11-slim
WORKDIR /app
RUN pip install flask gunicorn
COPY . .
EXPOSE 5001
CMD ["gunicorn", "--bind", "0.0.0.0:5001", "--workers", "2", "--timeout", "120", "--root-path", "/golf", "app:application"]

/mnt/data/docker/golf_app/docker-compose.yml
version: '3.8'
services:
  golf-app:
    build: .
    container_name: golf_app
    ports:
      - "5001:5001"
    volumes:
      - /mnt/data/docker/golf_app:/app
    restart: unless-stopped

TWAアプリのHTTPS要件を満たすため、Tailscale ServeでHTTPS→Apache→Flaskの経路を設定
sudo tailscale serve --bg 80
これによりhttps://ubuntu-sv.tailde37b8.ts.net/ がApache(port 80)にプロキシされる

/etc/apache2/sites-available/vafee2.conf 追記
ProxyHTMLURLMap http://127.0.0.1:5001 https://ubuntu-sv.tailde37b8.ts.net/golf
ProxyPass        /golf/ http://127.0.0.1:5001/golf/
ProxyPassReverse /golf/ http://127.0.0.1:5001/golf/
<Location /golf/>
    ProxyHTMLEnable On
    ProxyHTMLURLMap / /golf/
    ProxyHTMLURLMap /static/ /golf/static/
</Location>

必要なApacheモジュール
sudo a2enmod proxy proxy_http proxy_html headers
sudo systemctl reload apache2

Tailscale Serve
# 設定確認
sudo tailscale serve status
# → https://ubuntu-sv.tailde37b8.ts.net (tailnet only)
#    |-- / proxy http://127.0.0.1:80

# 設定が消えた場合の再設定
sudo tailscale serve --bg 80

記事一覧