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>
</head>
<body>
<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>
<p><form method="POST">
<input type="text" name="data" placeholder="https://..." required>
<button type="submit">GENERUJ</button>
</form></p>
<p>{% if qr_base64 %}</p>
<h2>Twój Kod QR:</h2>
<p>Kliknij prawym -> "Zapisz grafikę jako...", żeby pobrać.</p>
<p>{% endif %}</p>
<p>Powered by <a href="../index.html">Biedahosting.pl</a> - Hosting dla kumatych (15 PLN/rok).</p>
<p></body>
</html>
"""
import base64</p>
<p>@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")</p>
<p># --- 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')</p>
<p>return render_template_string(HTML_TEMPLATE, qr_base64=qr_base64)</p>
<p>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
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