{"id":231,"date":"2025-12-11T13:55:06","date_gmt":"2025-12-11T12:55:06","guid":{"rendered":"https:\/\/blog.ctr24.co.pl\/?p=231"},"modified":"2026-01-15T09:25:24","modified_gmt":"2026-01-15T08:25:24","slug":"dodawanie-aplikacji-flask-gunicornsystemd-nginx-ssl","status":"publish","type":"post","link":"https:\/\/blog.ctr24.co.pl\/?p=231","title":{"rendered":"Dodawanie aplikacji \ud83d\udcbbFLASK -> \ud83e\udd84GUNICORN (systemd)-> \ud83d\ude80NGINX + \ud83d\udd12SSL -> (\u25cf&#8217;\u25e1&#8217;\u25cf)"},"content":{"rendered":"\n<p><a href=\"https:\/\/copilot.microsoft.com\/chats\/a95gZGfn7bRTDwd2uQPzE\">https:\/\/copilot.microsoft.com\/chats\/a95gZGfn7bRTDwd2uQPzE<\/a><\/p>\n\n\n\n<h1 class=\"wp-block-heading\">Przygotowanie pliku uruchamiaj\u0105cego aplikacje wsgi.py umieszczonego w katalogu aplikacji:<\/h1>\n\n\n<div style=\"margin-bottom:50px\" class=\"wp-block-cblocks-coder-block\"><pre class=\"im-coder-block\" data-mode=\"sh\" data-theme=\"twilight\" data-fontsize=\"14\" data-lines=\"Infinity\" data-showlines=\"true\">#sudo nano \/var\/www\/apps\/aplikacja\/wsgi.py\nfrom app import app<\/pre><\/div>\n\n<div style=\"margin-bottom:50px\" class=\"wp-block-cblocks-coder-block\"><pre class=\"im-coder-block\" data-mode=\"sh\" data-theme=\"twilight\" data-fontsize=\"14\" data-lines=\"Infinity\" data-showlines=\"true\">\/var\/www\/apps\/aplikacja\n\u251c\u2500\u2500 wsgi.py\n\u251c\u2500\u2500 required.txt\n\u251c\u2500\u2500 app\n\u2502\u00a0\u00a0 \u251c\u2500\u2500 blueprints\n\u2502\u00a0\u00a0 \u251c\u2500\u2500 static\n\u2502\u00a0\u00a0 \u251c\u2500\u2500 templates\n\u2502\u00a0\u00a0 \u2514\u2500\u2500 app.py\n\u2514\u2500\u2500 venv<\/pre><\/div>\n\n\n<h2 class=\"wp-block-heading\">Zmiana uprawnie\u0144 do katalogu z aplikacj\u0105<\/h2>\n\n\n<div style=\"margin-bottom:50px\" class=\"wp-block-cblocks-coder-block\"><pre class=\"im-coder-block\" data-mode=\"sh\" data-theme=\"twilight\" data-fontsize=\"14\" data-lines=\"Infinity\" data-showlines=\"true\">sudo chown -R www-data:www-data \/var\/www\/apps\/aplikacja\/<\/pre><\/div>\n\n\n<h1 class=\"wp-block-heading\">Przygotowanie serwisu Gunicorn<\/h1>\n\n\n<div style=\"margin-bottom:50px\" class=\"wp-block-cblocks-coder-block\"><pre class=\"im-coder-block\" data-mode=\"sh\" data-theme=\"twilight\" data-fontsize=\"14\" data-lines=\"Infinity\" data-showlines=\"true\">#sudo nano \/etc\/systemd\/system\/aplikacja.service\n\n[Unit]\nDescription=Gunicorn dla Aplikacji\nAfter=network.target\n\n[Service]\nUser=www-data\nGroup=www-data\nWorkingDirectory=\/var\/www\/apps\/aplikacja\nEnvironment=\"PATH=\/var\/www\/apps\/aplikacja\/venv\/bin\"\nExecStart=\/var\/www\/apps\/aplikacja\/venv\/bin\/gunicorn -w 4 -b 127.0.0.1:8002 --access-logfile - --error-logfile - wsgi:app \n\nRestart=always\nRestartSec=3\n\n[Install]\nWantedBy=multi-user.target\n<\/pre><\/div>\n\n\n<p>Wpis <code>wsgi:app<\/code> wskazuje na nazw\u0119 pliku i aplikacj\u0119 kt\u00f3r\u0105 on uruchamia.<br>Po zapisaniu pliku nale\u017cy od\u015bwie\u017cy\u0107 serwisy i uruchomi\u0107 serwis dla aplikacji<\/p>\n\n\n<div style=\"margin-bottom:50px\" class=\"wp-block-cblocks-coder-block\"><pre class=\"im-coder-block\" data-mode=\"sh\" data-theme=\"twilight\" data-fontsize=\"14\" data-lines=\"Infinity\" data-showlines=\"true\">sudo systemctl daemon-reload\nsudo systemctl enable aplikacja.service\nsudo systemctl start aplikacja.service\nsudo systemctl status aplikacja.service<\/pre><\/div>\n\n\n<p>W przypadku problem\u00f3w sprawdzi\u0107 logi systemctl dla aplikacji.<\/p>\n\n\n<div style=\"margin-bottom:50px\" class=\"wp-block-cblocks-coder-block\"><pre class=\"im-coder-block\" data-mode=\"sh\" data-theme=\"twilight\" data-fontsize=\"14\" data-lines=\"Infinity\" data-showlines=\"true\">sudo journalctl -xeu aplikacja.service<\/pre><\/div>\n\n\n<h1 class=\"wp-block-heading\">Przygotowanie NGINX<\/h1>\n\n\n\n<h2 class=\"wp-block-heading\">Instalacja nginx:<\/h2>\n\n\n\n<pre class=\"wp-block-code\"><code>sudo apt install nginx<\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\">Zmiana port\u00f3w nas\u0142uchowych<\/h2>\n\n\n\n<p>Domy\u015blne porty nas\u0142uchowe (80) zdefiniowane s\u0105 w pliku<code>\/etc\/nginx\/sites-enabled<\/code>\/<code>default<\/code>.<\/p>\n\n\n\n<p><\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>server {\n    listen 81;\n}\n<\/code><\/pre>\n\n\n\n<p>Po zapisaniu restart nginx<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>sudo service nginx start\nlub\nsudo systemctl restart nginx<\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\">Przygotowanie konfiguracji dla NGINX<\/h2>\n\n\n<div style=\"margin-bottom:50px\" class=\"wp-block-cblocks-coder-block\"><pre class=\"im-coder-block\" data-mode=\"sh\" data-theme=\"twilight\" data-fontsize=\"14\" data-lines=\"Infinity\" data-showlines=\"true\">#sudo nano \/etc\/nginx\/sites-available\/aplikacja\nserver {\n        server_name aplikacja.domena.pl, www.aplikacja.domena.pl; # adres aplikacji w internecie. Moze by\u0107 ich kilka rozdzielonych przecinkami\n\n        location \/ {\n        proxy_pass http:\/\/127.0.0.1:8002; #zgodnie z ustawieniami w GUNICORN dla opcji --bind lub -b\n        proxy_set_header Host $host;\n        proxy_set_header X-Real-IP $remote_addr;\n        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;\n        proxy_set_header X-Forwarded-Proto $scheme;\n        proxy_read_timeout 60s;\n    }\n\n}\n<\/pre><\/div>\n\n\n<p>Przygotowanie linku symbolicznego dla konfiguracji do uruchomienienia przez NGINX, test linku oraz prze\u0142adowanie konfiguracji NGINX<\/p>\n\n\n<div style=\"margin-bottom:50px\" class=\"wp-block-cblocks-coder-block\"><pre class=\"im-coder-block\" data-mode=\"sh\" data-theme=\"twilight\" data-fontsize=\"14\" data-lines=\"Infinity\" data-showlines=\"true\"># przygotowanie linku\nsudo ln -s \/etc\/nginx\/sites-available\/aplikacja \/etc\/nginx\/sites-enabled\/\n\n# test poprawnosci \nsudo nginx -t\n\n# prze\u0142adowanie konfiguracji NGINX\nsudo systemctl reload nginx\n\n# sprawdzenie poprawnosci dzia\u0142ania NGINX\nsudo systemctl status nginx\n<\/pre><\/div>\n\n\n<h2 class=\"wp-block-heading\">Dodanie certyfikatu SSL za pomoc\u0105 CERTBOT<\/h2>\n\n\n<div style=\"margin-bottom:50px\" class=\"wp-block-cblocks-coder-block\"><pre class=\"im-coder-block\" data-mode=\"sh\" data-theme=\"twilight\" data-fontsize=\"14\" data-lines=\"Infinity\" data-showlines=\"true\">sudo certbot --nginx<\/pre><\/div>\n\n\n<h2 class=\"wp-block-heading\">DODATKI:<\/h2>\n\n\n\n<p>Je\u017celi aplikacja potrzebuje wi\u0119cej czasu dodaj do konfiguracji serwisu czas (timeout) w sekundach <\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>#sudo nano  \/etc\/systemd\/system\/aplikacja.service\n--timeout 300<\/code><\/pre>\n\n\n\n<p>oraz w ustawieniach nignx <\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>#sudo nano \/etc\/nginx\/sites-available\/aplikacja\n\nlocation \/ {\n    ...\n    proxy_read_timeout 300;\n    proxy_connect_timeout 300;\n    proxy_send_timeout 300;\n}<\/code><\/pre>\n\n\n\n<p>Nast\u0119pnie prze\u0142aduj serwis i nginx<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>systemctl deamon-reload\nsystemctl restart aplikacja.service\n\nsystemctl reload nginx <\/code><\/pre>\n\n\n\n<p>Dodatkowe informacje:<br><a href=\"https:\/\/copilot.microsoft.com\/chats\/TCYfvRNkVMZhGjNAC6bT7\">https:\/\/copilot.microsoft.com\/chats\/TCYfvRNkVMZhGjNAC6bT7<\/a> : Unix Socket vs 127.0.0.1:port<\/p>\n","protected":false},"excerpt":{"rendered":"<p>https:\/\/copilot.microsoft.com\/chats\/a95gZGfn7bRTDwd2uQPzE Przygotowanie pliku uruchamiaj\u0105cego aplikacje wsgi.py umieszczonego w katalogu aplikacji: Zmiana uprawnie\u0144 do katalogu z aplikacj\u0105 Przygotowanie serwisu Gunicorn Wpis<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[1],"tags":[],"class_list":["post-231","post","type-post","status-publish","format-standard","hentry","category-bez-kategorii"],"_links":{"self":[{"href":"https:\/\/blog.ctr24.co.pl\/index.php?rest_route=\/wp\/v2\/posts\/231","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/blog.ctr24.co.pl\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/blog.ctr24.co.pl\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/blog.ctr24.co.pl\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/blog.ctr24.co.pl\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=231"}],"version-history":[{"count":27,"href":"https:\/\/blog.ctr24.co.pl\/index.php?rest_route=\/wp\/v2\/posts\/231\/revisions"}],"predecessor-version":[{"id":323,"href":"https:\/\/blog.ctr24.co.pl\/index.php?rest_route=\/wp\/v2\/posts\/231\/revisions\/323"}],"wp:attachment":[{"href":"https:\/\/blog.ctr24.co.pl\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=231"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blog.ctr24.co.pl\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=231"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blog.ctr24.co.pl\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=231"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}