TDDD80 Projekt: Mobila och sociala applikationer
Laboration S3: Hosting
Syfte
I denna laboration ska ni flytta er labb-applikation så att den kör på en extern server. På den externa servern ska ni använda en PostgreSQL-databas.
Genomförande
Första steget i laborationen är att utforska (Googla) och skriftligt förklara viktiga grundbegrepp. Det är viktigt att ni för varje svar lägger med de URL:er (länkar) som ni har bedömt vara trovärdiga och som ni har använt för att sammanställa ert svar. (Svaren lämnas in i README-fil i Gitlab, tillsammans med labb-koden):
- Vad är Azure för typ av tjänst?
- Varför rekommenderas ni köra en annan typ av databas än SQLite, dvs. vad finns det för fördelar med att köra PostgreSQL istället för SQLite på Azure?
- Att genomföra under/efter laborationen: Redogör för något begrepp/problem som ni har behövt googla på under arbetet med labb3 (inkludera länk(ar) till de svar som ni tyckte var mest informativa).
Laborationen genomförs i par. Ni ansvarar själva för att installera nödvändig programvara för att utveckla med Python+Flask+SQLAlchemy+PostgreSQL, samt enhetstestning med code coverage.
Uppstart
Ladda de programmoduler som används i kursen genom att skriva följande (om ni har gjort initadd tidigare, kan ni hoppa över detta steg):
module initadd courses/TDDD80
Eller, för att bara få senaste installerade versionen av Azure command line interface (CLI):
module initadd prog/azure-cli
Starta en terminal och ställ dig i er labbmapp. Skriv sedan följande:
>> source my_env/bin/activate
Starta PyCharm:
>> pycharm.sh
SQLite ska även i fortsättningen användas som databas lokalt, men PostgreSQL ska användas när applikationen körs på deploymentservern.
Krav
Utöver kraven från laboration 1 och 2 ska ni uppfylla följande
- På Azure ska en PostgreSQL-databas användas
- Lokalt ska en SQLite-databas användas
- Koden ska fungera både lokalt och på Azure utan förändringar
- Glöm inte att pusha er kod till gitlab för redovisning av labbarna.
Steg för att komma igång med Azure
Förbered den egna miljön
- Öppna ett terminalfönster, ställ er i projektets rotmapp (där ert lokala git finns), och aktivera ert virtual environment. Installera sedan följande (psycopg2 behövs för att SQLAlchemy ska kunna koppla till PostgreSQL):
(requirements.txt kommer att läsas av Azure för att återskapa er miljö i molnet. Vi vill dock inte ha med pkg-resources--vilket vi inte heller använder.)>> pip install psycopg2-binary >> pip freeze | grep -v "pkg-resources" >| requirements.txt
- Redigera requirements.txt-filen och att ta bort versionsnummer på de bibliotek som listas i filen. På det här sättet kommer Azure fritt kunna matcha biblioteksversioner med vald python-version, så att allt kan arbeta i samklang på deploymentservern.
Förbered den egna koden
- Lägg till följande kod i er config.py eller data_handler.py (eller i motsvarande fil där ni normalt pekar ut er databas):
if "AZURE_POSTGRESQL_CONNECTIONSTRING" in os.environ: conn = os.environ["AZURE_POSTGRESQL_CONNECTIONSTRING"] values = dict(x.split("=") for x in conn.split(' ')) user = values['user'] host = values['host']azure_project_structure database = values['dbname'] password = values['password'] db_uri = f'postgresql+psycopg2://{user}:{password}@{host}/{database}' app.config['SQLALCHEMY_DATABASE_URI'] = db_uri debug_flag = False else: # when running locally: use sqlite db_path = os.path.join(os.path.dirname(__file__), 'app.db') db_uri = f'sqlite:///{db_path}' debug_flag = True
Mappstruktur
Azure förväntar sig att app-koden ligger i en enkel mappstruktur, där app.py och requirements.txt ligger på översta nivån, ungefär så här:

Har ni tidigare skapat undermappar för varje labb, kan ett sätt vara att skapa ett särskilt lokalt repo i just den mapp där koden för labb S3 ligger, och sedan koppla detta repo till Azure (hur kopplingen görs beskrivs längre ner).
Skapa studentkonto på Azure
- Gå in på minit.liu.se. Där får ni tillgång till länken för Microsoft Devtools. I Microsoft Devtools kan ni skapa ett Azure-konto.
- Se sedan till att få en viss mängd krediter ($100).
- Vänta tålmodigt på att krediterna aktiveras. Det kan ta uppemot 5 minuter.
- Om du inte lyckas skapa studentkonto:
- Använd inkognito-browsing (Ctrl-Shift-N för Safari, Chrome, och Edge), så att Azure inte kommer ihåg dina tidigare försök att skapa konto. (Inkognito-läge betyder att inga kakor sparas undan.) Gör om stegen ovan.
Sätt upp Azure
- När du är inloggad, skriv "web app database" i sökrutan längst upp i Azure portalen. När du får upp resultaten, titta under Marketplace, och välj Web App + Database under Marketplace. Får du inte några Marketplace sökresultat, vänta tålmodigt på att dina krediter ska aktiveras. Försök igen efter några minuter, med att skriva "web app database" i sökrutan.
- På 'Create web app + database' sidan, ange följande. (Ersätt 'tddd80-labs3-rmk' med ett eget unikt namn. Ange 'Name' först, så kommer 'Resource-group', etc. att namnges automatiskt utifrån app-namnet ni angett. Runtime-stack bör matcha det python ni använder i projektet. Hosting plan ska vara 'Basic').
- Klicka vidare, och klicka till slut på Create.
- Vänta en låååång stund.
- När appen skapats, klicka på Configuration i navigations-fältet, och lägg till denna variabel till er webapp konfiguration (denna behövs så att er requirements.txt läses, biblioteken som listas där laddas in, och er webapp byggs (kompileras och biblioteken länkas in) när ni kör igång appen från er lokala dator via Azure CLI (se nedan steg). För vidare detaljer: denna dokumentation):
Kör igång er kod på Azure
az webapp up
- På den lokala datorn: Ställ er i den mapp där er kod ligger, dvs. i projektets topp-mapp (där också .git filen bör ligga). Skriv sedan följande (man måste logga in via terminal, dvs. via Azure CLI--Command Line Interface, för att senare kunna lägga upp sin kod i Azure från sin lokala mapp. Azure kommer att hämta kod direkt från mappen, inte från ert lokala repo):
Azure kommer ihåg>> az login >> az webapp up --name [ert webapp-namn på Azure] --resource-group [ert group-namn på Azure]
name
ochresource-group
för denna projektmapp, så vid efterföljande anrop räcker det att skriva:>> az webapp up
git push
- Ett alternativt sätt att köra igång sin kod på Azure är att använda git push från ert lokala repo. Fördelen är ni kommer att kunna pusha båda två, inte bara den som skapat Azure webappen.
- Ställ in local git på er webapp (Deployment Center > Settings > Source = Local Git):
- Läs av git clone URL, och app credentials under fliken Local Git/FTPS Credentials. Användarnamnet är det som börjar med $, i exemplet nedan: "$tddd80-labs3-rmk". Användarnamn och lösenord kommer ni att använda för att logga in när ni vill pusha er kod till Azure:
- Ni kommer att skapa en git remote på er dator, så ni kommer att ha två remotes i ert lokala repo, en som heter azure (eller liknande) och en som (förmodligen) heter origin. Ni kommer alltså även fortsättningsvis pusha till origin för att få upp er kod till LiU-gitlab. Vill ni vara supertydliga, kan ni döpa om origin till, t.ex. liu, genom att i er lokala projektmapp skriva kommandot:
I er lokala projektmapp, lägg till en remote till er git (och döp den till azure eller liknande)>> git remote rename origin liu
>> git remote add azure [URL till Azure repot, dvs. Git Clone Uri i Azure panelen]
- Ni kan nu pusha till azure genom:
Deployment branch på Azure är master, så om ert lokala repo branch heter main, måste ni explicit ange att main ska mappas på master, genom att skriva main:master.>> git push azure main:master
- Ni kommer att bli ombedda att logga in. Använd användarnamn och lösenord som ni läste av från Azure credentials. Om ni vill slippa skriva dessa vid varje push, kolla på kommandot
'git config --global credential.helper store'
Notera att namn och lösenord kommer att sparas som text, fullt läsbar för den som kan öppna filen ~/.git-credentials - Kolla om databasen är uppe: Klicka på SSH under Development tools i vänstra nav-fältet i Azure Home > [er webapp]-skärm. I ssh-terminalen, skriv följande för att få upp en lokal miljö där flask kommandon kan köras med er webapp som kontext:
>> flask shell >> db
- För att skapa era tabeller i er databas, skriv i flask shell i SSH-terminalen på Azure:
>> db.create_all()
- I CLI (Command Line Interface, dvs. i lokal terminal):
>> az webapp log tail
- Muntligt redovisa/demonstrera er laboration för en assistent (körning på Azure samt tester med coverage lokalt)
- Ladda upp söknings-svaren inkl. länkar (i README-fil), samt er kod (alla relevanta filer för labben) (gärna kontinuerligt) till ert gitlab-projekt
- Lägg till er assistent som Reporter på ert projekt
- Meddela er assistent att ni lagt upp koden genom att skicka ett mejl. Märk mejlet med TDDD80: Labb S3, och se till att det finns en länk till repot i mejlet. Skicka även med en länk till er Azure-applikation.
Få igång databasen
Håll koll på appen under körning
Resurser
Azure CLI commands
Tutorial: Deploy a Python (Django or Flask) web app with PostgreSQL in Azure
Quickstart: Deploy a Python (Django or Flask) web app to Azure App Service
Nå Azure direkt från VSCode
Använder du VSCode kan du direkt från IDE:n komma åt Azure. Du måste dock först ha installerat Azure Tools, som är en extension till VSCode.
Du kan då skapa ett Azure for students-konto, etc. direkt från VSCode.
När du väl är inloggad, har du direkttillgång till en Azure-panel.
Redovisa
Sidansvarig: Rita Kovordanyi
Senast uppdaterad: 2025-02-11