Tavs šīs stundas izaicinājums: Izvietot lietotni publiski un saprast pamata drošības principus produkcijas vidē.
Lokālā lietotne, kas darbojas uz localhost:5000, nav pieejama citiem. Lai pasaule to redzētu, jāizvieto mākonī.
Bezmaksas mākoņi (2026):
Drošības pamati:
.env.import os
from dotenv import load_dotenv
load_dotenv() # nolasa .env failu
DATABASE_URL = os.getenv("DATABASE_URL")
SECRET_KEY = os.getenv("SECRET_KEY")
Sagatavo lietotni produkcijai.
requirements.txt ar visām atkarībām: pip freeze > requirements.txt.Procfile ar saturu web: gunicorn app:app (instalē gunicorn)..env failu ar SECRET_KEY=; pievieno to .gitignore.os.environ, nevis hard-coded vērtības.Publicē projektu internetā.
render.com (ar GitHub).pip install -r requirements.txt; Start command: gunicorn app:app.SECRET_KEY.curl https://tavs-app.onrender.com/api/rezultati.Pievieno datubāzi mākonī un nostiprini.
DATABASE_URL vides mainīgo savai web servisam.DATABASE_URL un savienojas ar psycopg2.connect(os.environ["DATABASE_URL"]).migrate.py, kas izpilda schema.sql pēc deploy.flask_limiter rate limit (max 100 pieprasījumu minūtē uz IP), lai pasargātu no DDoS.Pievieno savu domēnu ar HTTPS.
.env!runtime.txt).DATABASE_URL izmanto SSL un pareizu psycopg2 sintakse (Render dod URL sākot ar postgres:// — pielāgo uz postgresql://).# app.py — produkcijai gatavs
import os
from flask import Flask, jsonify, request
import psycopg2
app = Flask(__name__)
DATABASE_URL = os.environ.get("DATABASE_URL")
SECRET_KEY = os.environ.get("SECRET_KEY", "dev-only-key")
def get_db():
return psycopg2.connect(DATABASE_URL, sslmode="require")
@app.route("/api/rezultati")
def saraksts():
with get_db() as conn, conn.cursor() as cur:
cur.execute("SELECT vards, punkti FROM rezultati ORDER BY punkti DESC LIMIT 10")
return jsonify([dict(zip(["vards","punkti"], r)) for r in cur.fetchall()])
if __name__ == "__main__":
app.run(host="0.0.0.0", port=int(os.environ.get("PORT", 5000)))