flet
flet copied to clipboard
[Help] Self Hosting Website with AWS
Description I am trying to self host a web application with AWS EC2 and the flet server instantiates but then closes the connection immediately, have i configured something wrong?
Code example to reproduce the issue:
import secrets
import flet as ft
import firebase_admin
from firebase_admin import credentials, db
# Variables
p_width = 200
current = 1
p_height = 100
cred = credentials.Certificate("assets/all/creds.json")
firebase_admin.initialize_app(
cred, {
'databaseURL': 'DB_URL_HERE
}
)
def main(page: ft.Page):
global current
def get_question(idx):
return db.reference(f'/db/quiz/{idx}/question').get()
# Page Configurations
page.title = "Dobby Club"
page.window_always_on_top = True
page.theme_mode = "dark"
page.window_min_width = 1920
page.window_min_height = 1080
page.window_bgcolor = ft.colors.BLACK
page.window_icon = "assets/favicon.png"
# Theming
page.fonts = {
"Bebas": "assets/all/BebasNeue-Regular.ttf",
}
page.theme = ft.Theme(font_family="Bebas")
# Prizes UI
p_count = db.reference('/db/quiz/default_prizes').get()
p_images = ['all/prize.png' for _ in range(int(p_count))]
prizes = [ft.Image(src=i, fit=ft.ImageFit.CONTAIN, width=p_width, height=p_height) for i in p_images]
prizes_column = ft.Column(prizes, alignment=ft.MainAxisAlignment.SPACE_EVENLY)
# Question UI
question_control = ft.Text(
get_question(1),
size=40,
style=ft.TextThemeStyle.TITLE_LARGE,
color=ft.colors.WHITE,
bgcolor='#FF0098',
weight=ft.FontWeight.BOLD,
italic=True,
text_align=ft.TextAlign.CENTER,
)
# Winning meme UI
meme_column = ft.Column(
controls=[],
horizontal_alignment=ft.CrossAxisAlignment.CENTER,
)
question_column = ft.Container(question_control, alignment=ft.alignment.center)
# Prize List UI
prize_list_column = ft.Column(
[],
spacing=10,
horizontal_alignment=ft.CrossAxisAlignment.CENTER,
)
def play_again():
prize_list_column.controls.append(
ft.Container(
ft.CupertinoButton(
content=ft.Text(
"Play Again?",
color=ft.colors.WHITE,
size=20,
weight=ft.FontWeight.BOLD,
text_align=ft.TextAlign.CENTER,
font_family="Bebas",
),
bgcolor='#FF0098',
alignment=ft.alignment.top_left,
border_radius=ft.border_radius.all(15),
opacity_on_click=0.5,
on_click=lambda e: main(page),
),
alignment=ft.alignment.center,
)
)
incorrect_button.visible = False
correct_button.visible = False
page.update()
# Bank UI with Prizes
bank_column = ft.Container(
content=ft.Column(
[
ft.Row(
[
ft.Image(src='all/bank.png', width=100, height=100),
],
),
prize_list_column
],
spacing=10,
horizontal_alignment=ft.CrossAxisAlignment.CENTER,
),
padding=ft.Padding(10, 10, 10, 10),
)
def correct_answer(e):
global current
question_control.value = get_question(current + 1)
question_control.update()
index = len(prizes) - current
if index < len(prizes):
prizes[index].src = 'all/correct.png'
prizes[index].update()
prize_to_bank(current)
current += 1
if current > len(prizes):
question_control.value = db.reference('/db/prompts/win').get()
question_control.update()
meme_column.controls.append(
ft.Container(
ft.Image(
src='all/win.png',
width=400,
height=200,
),
alignment=ft.alignment.center,
)
)
play_again()
def incorrect_answer(e):
global current
for p in prizes:
if p.src != 'all/correct.png':
p.src = 'all/incorrect.png'
p.update()
if current < 2:
question_control.value = db.reference('/db/prompts/first_question_fail').get()
meme_column.controls.append(
ft.Container(
ft.Image(
src='all/first_question_fail.png',
width=400,
height=200,
),
alignment=ft.alignment.center,
)
)
prize_list_column.controls.append(
ft.Text(
f"Game Over : 0 Prizes Won",
size=20,
color=ft.colors.WHITE,
bgcolor=ft.colors.RED_900,
text_align=ft.TextAlign.CENTER,
)
)
play_again()
return
question_control.value = db.reference('/db/prompts/fail').get()
meme_column.controls.append(
ft.Container(
ft.Image(
src='all/wrong_answer_meme.png',
width=400,
height=200,
),
alignment=ft.alignment.center,
)
)
play_again()
def prize_to_bank(idx: int):
prize_emoji = secrets.choice(['🎁', '💰', '🌟', '🏆', '🎖️', '🔥'])
response = db.reference(f'/db/quiz/{idx}/prize').get()
prize_list_column.controls.append(
ft.Text(
f'{prize_emoji} Prize {current} : {response} ✔️',
size=20,
color=ft.colors.WHITE,
bgcolor=ft.colors.GREEN,
)
)
prize_list_column.update()
incorrect_button = ft.IconButton(
icon=ft.icons.CLOSE,
icon_color=ft.colors.RED,
on_click=incorrect_answer,
icon_size=50,
)
correct_button = ft.IconButton(
icon=ft.icons.CHECK,
icon_color=ft.colors.GREEN,
on_click=correct_answer,
icon_size=50,
)
# Main UI layout
main_content = ft.Row(
[
prizes_column,
ft.Container(
ft.Column(
[
meme_column,
question_column,
ft.Row(
[
incorrect_button,
correct_button,
],
alignment=ft.MainAxisAlignment.CENTER,
),
ft.Divider(opacity=0),
ft.Divider(opacity=0),
ft.Divider(opacity=0),
],
scroll=ft.ScrollMode.HIDDEN,
),
expand=True,
alignment=ft.alignment.bottom_center,
),
bank_column,
ft.VerticalDivider(opacity=0),
],
expand=True,
)
main_body = ft.Container(
main_content,
expand=True,
image_src='all/bg.png',
image_fit=ft.ImageFit.COVER,
image_opacity=0.8,
border_radius=ft.BorderRadius(5, 5, 5, 5),
)
current = 1
page.views[0].controls.clear()
page.views[0].controls.append(main_body)
page.update()
app = ft.app(target=main, assets_dir='assets', export_asgi_app=True, port=8502)
Describe the results you received:
This is my NGINX file saved inside of sites-available/default
This is my flet.service file saved inside /etc/systemd/system/flet.service
The AWS Instance accepts incoming requests to port 80 & No firewall is configured.
When trying to access the external IPV4 host address provided from AWS i receive a 502 Gateway error which when investigating the logs shows:
/dobby_club/myenv/bin# cat /var/log/nginx/error.log 2024/03/11 21:43:48 [notice] 3063#3063: using inherited sockets from "6;7;" 2024/03/11 21:47:59 [emerg] 3185#3185: "location" directive is not allowed here in /etc/nginx/sites-enabled/default:1 2024/03/12 14:26:16 [emerg] 12799#12799: "location" directive is not allowed here in /etc/nginx/sites-enabled/default:1 2024/03/12 17:27:32 [error] 433#433: *1 connect() failed (111: Unknown error) while connecting to upstream, client: 86.17.161.211, server: , request: "GET / HTTP/1.1", upstream: "http://127.0.0.1:8502/", host: "18.134.180.153" 2024/03/12 17:27:33 [error] 433#433: *1 connect() failed (111: Unknown error) while connecting to upstream, client: 86.17.161.211, server: , request: "GET /favicon.ico HTTP/1.1", upstream: "http://127.0.0.1:8502/favicon.ico", host: "18.134.180.153", referrer: "http://18.134.180.153/" 2024/03/12 17:27:56 [error] 433#433: *1 connect() failed (111: Unknown error) while connecting to upstream, client: 86.17.161.211, server: , request: "GET / HTTP/1.1", upstream: "http://127.0.0.1:8502/", host: "18.134.180.153" 2024/03/12 17:27:56 [error] 433#433: *1 connect() failed (111: Unknown error) while connecting to upstream, client: 86.17.161.211, server: , request: "GET /favicon.ico HTTP/1.1", upstream: "http://127.0.0.1:8502/favicon.ico", host: "18.134.180.153", referrer: "http://18.134.180.153/" 2024/03/12 18:11:52 [error] 431#431: *1 connect() failed (111: Unknown error) while connecting to upstream, client: 198.235.24.5, server: , request: "GET / HTTP/1.0", upstream: "http://127.0.0.1:8502/" 2024/03/12 18:29:42 [error] 431#431: *3 connect() failed (111: Unknown error) while connecting to upstream, client: 103.183.121.87, server: , request: "GET / HTTP/1.1", upstream: "http://127.0.0.1:8502/", host: "18.134.180.153:80" 2024/03/12 18:37:48 [error] 431#431: *5 connect() failed (111: Unknown error) while connecting to upstream, client: 86.17.161.211, server: , request: "GET / HTTP/1.1", upstream: "http://127.0.0.1:8502/", host: "18.134.180.153" 2024/03/12 18:37:48 [error] 431#431: *5 connect() failed (111: Unknown error) while connecting to upstream, client: 86.17.161.211, server: , request: "GET /favicon.ico HTTP/1.1", upstream: "http://127.0.0.1:8502/favicon.ico", host: "18.134.180.153", referrer: "http://18.134.180.153/" 2024/03/12 18:42:33 [error] 431#431: *9 connect() failed (111: Unknown error) while connecting to upstream, client: 212.70.149.134, server: , request: "GET / HTTP/1.0", upstream: "http://127.0.0.1:8502/" 2024/03/12 18:44:45 [error] 431#431: *12 connect() failed (111: Unknown error) while connecting to upstream, client: 86.17.161.211, server: , request: "GET / HTTP/1.1", upstream: "http://127.0.0.1:8502/", host: "18.134.180.153" 2024/03/12 18:44:45 [error] 431#431: *12 connect() failed (111: Unknown error) while connecting to upstream, client: 86.17.161.211, server: , request: "GET /favicon.ico HTTP/1.1", upstream: "http://127.0.0.1:8502/favicon.ico", host: "18.134.180.153", referrer: "http://18.134.180.153/" 2024/03/12 18:47:46 [error] 431#431: *16 connect() failed (111: Unknown error) while connecting to upstream, client: 185.254.196.173, server: , request: "GET /.env HTTP/1.1", upstream: "http://127.0.0.1:8502/.env", host: "18.134.180.153"
Describe the results you expected:
Additional information you deem important (e.g. issue happens only occasionally):
Flet version (pip show flet
):
Name: flet
Version: 0.21.1
Summary: Flet for Python - easily build interactive multi-platform apps in Python
Home-page:
Author: Appveyor Systems Inc.
Author-email: [email protected]
License: Apache-2.0
Location: C:\Users\kbaker\Desktop\dobby_club\.venv\Lib\site-packages
Requires: cookiecutter, fastapi, flet-runtime, packaging, qrcode, uvicorn, watchdog
Give your requirements.txt
file (don't pip freeze
, instead give direct packages):
flet
uvicorn
firebase-admin
Operating system:
Additional environment details: