sudo apt update && sudo apt upgrade sudo apt install python3.9
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
/etc/apache2/sites-available/internal-vafee-lab.conf 追記
# --- Golf (port 5001) ---
<VirtualHost *:443>
ServerName golf.vafee-lab.com
SSLEngine on
SSLCertificateFile /etc/letsencrypt/live/vafee-lab.com/fullchain.pem
SSLCertificateKeyFile /etc/letsencrypt/live/vafee-lab.com/privkey.pem
ProxyPreserveHost On
ProxyPass /golf/ http://127.0.0.1:5001/golf/
ProxyPassReverse /golf/ http://127.0.0.1:5001/golf/
ProxyPass / http://127.0.0.1:5001/golf/
ProxyPassReverse / http://127.0.0.1:5001/golf/
<Location />
RequestHeader unset Accept-Encoding
</Location>
</VirtualHost>必要な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