Własny generator QR w Pythonie na Biedahostingu

Wstęp: Po co to robimy?

Zamiast korzystać z zewnętrznych generatorów QR, postawiliśmy własne, surowe narzędzie. Wykorzystaliśmy do tego Pythona (Flask) oraz Reverse Proxy, aby ukryć port aplikacji przed światem.

0. - BiedaHosting

Hosting kosztuje 15 PLN na rok i powinien wystarczyć do tego zastosowania. Jeżeli planujesz większe pliki - wybierz większy pakiet

1. Przygotowanie środowiska

Logujemy się przez SSH na serwer i instalujemy niezbędne biblioteki. Wystarczą dwie komendy:

python3 -m pip install --user Flask qrcode[pil]

2. Kod aplikacji (Python)

Tworzymy plik qr_app.py. Kluczowym rozwiązaniem jest generowanie obrazka bezpośrednio do pamięci (BytesIO) i wysyłanie go jako Base64. Dzięki temu serwer nie musi zapisywać żadnych plików na dysku (oszczędzamy I/O).

<code>
from flask import Flask, render_template_string, request, send_file
import qrcode
from io import BytesIO

app = Flask(__name__)

HTML_TEMPLATE = """
<!DOCTYPE html>
<html lang="pl">
<head>
    <meta charset="UTF-8">
    <title>BIEDA-QR: Generator Biedahosting.pl</title>
    <style>
        body { background-color: black; color: #00ff00; font-family: monospace; padding: 20px; }
        input, button { background-color: #111; color: #00ff00; border: 1px solid #00ff00; padding: 5px; font-family: monospace; }
        button:hover { background-color: #00ff00; color: black; cursor: pointer; }
        .container { max-width: 600px; margin: 0 auto; border: 1px solid #00ff00; padding: 20px; }
        .footer { margin-top: 20px; font-size: 0.8em; border-top: 1px solid #00ff00; padding-top: 10px; }
    </style>
</head>
<body>
  <div class="container">
        <h1>[ BIEDA-QR GENERATOR v0.1 ]</h1>
        <p>Wpisz tekst lub URL, aby wygenerowa~G kod QR.</p>
        <p>Zero reklam. Czysty prestiż Biedahostingu.</p>
        
        <form method="POST">
            <input type="text" name="data" placeholder="https://..." style="width: 80%;" required>
            <button type="submit">GENERUJ</button>
        </form>

        {% if qr_base64 %}
            <h2>Twój Kod QR:</h2>
            <img src="data:image/png;base64,{{ qr_base64 }}" alt="Wygenerowany Kod QR" style="border: 5px solid white; margin-top: 10px;">
            <p>Kliknij prawym -> "Zapisz grafikę jako...", żeby pobrać.</p>
        {% endif %}

        <div class="footer">
            Powered by <a href="https://biedahosting.pl" style="color: #00ff00; text-decoration: underline;">Biedahosting.pl</a> - Hosting dla kumatych (15 PLN/rok).
        </div>
    </div>
</body>
</html>
"""
import base64

@app.route("/", methods=["GET", "POST"])
def index():
    qr_base64 = None
    if request.method == "POST":
        data = request.form.get("data")
        if data:
            # --- GENEROWANIE KODU QR ---
            qr = qrcode.QRCode(version=1, box_size=10, border=4)
            qr.add_data(data)
            qr.make(fit=True)
            img = qr.make_image(fill_color="black", back_color="white")

            # --- KONWERSJA DO BASE64 (aby wyswietlic na stronie bez zapisywania pliku) ---
            buffered = BytesIO()
            img.save(buffered, format="PNG")
            qr_base64 = base64.b64encode(buffered.getvalue()).decode('utf-8')

    return render_template_string(HTML_TEMPLATE, qr_base64=qr_base64)

if __name__ == "__main__":
    # UWAGA: Na produkcji używa sie gunicorn, ale do testów i Biedahostingu to wystarczy.
    # Ustaw port, który udostepni Ci Admin (jezeli nie 5000).
    app.run(host='127.0.0.1', port=5000)
        </code>

3. Magia Reverse Proxy (.htaccess)

To najważniejszy krok. Aby aplikacja była dostępna pod adresem TwojaDomena.pl/qr/ zamiast TwojaDomena.pl:5000, w pustym folderze /qr/ tworzymy plik .htaccess:


RewriteEngine On
RewriteRule ^(.*)$ http://127.0.0.1:5000/$1 [P,L]
        

4. Uruchomienie

Aby uruchomić skrypt używamy komendy python3 qr_app.py Otrzymyjemy informacje żeby nie robić tak produkcyjnie, więc pewnie nie należy tak robic produkcyjnie.

5. Sprawdzenie

Wchodzimy na twojadomena.pl/qr i sprawdzamy nasz generator

generator kodów qr na własnym hostingu

6. Uwaga, bardzo ważne

W biedahostingu staramy zachować sie minumum bezpieczeństwa. Tak wystawiony port będize dostępny dla każdego posaidającego konto na serwerze. Pamiętaj o tym podczas wystawiania skryptów!!! Nie wystawiaj wrażliwych danych, dbaj o odpowiednie zabezpieczenie kodu.

Podsumowanie: W jeden wieczór, postawiliśmy działający mikroserwis. To idealny przykład na to, jak wykorzystać "bieda-zasoby" do ambitnych celów programistycznych.

Więcej takich case'ów znajdziesz na: Biedahosting.pl

👉 Powrót do oferty BiedaHostingu