Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Python Flask with Nginx and uWSGI

License

NotificationsYou must be signed in to change notification settings

source-nerd/Python-flask-with-uwsgi-and-nginx

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

3 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

License

PYTHON FLASK WITH NGINX & UWSGI

CONTENTS

  1. app Folder
  2. uwsgi.ini
  3. nginx_config
  4. production_flask.service

USAGE

  1. app Folder - It contains you complete app and directories. Do initialize it as a virtual environment and installrequirements.txt included in that folder. (Hold on !!) We will be going through it in some time
  2. uwsgi.ini - UWSGI server configuration. Edit/Replace the following places:
    • my_app_folder: ReplacePROJECT_FOLDER_HERE With your Project app Path
    • my_user: ReplaceMY_USERNAME_HERE With your UserName; You can get your username using commandwhoami
  3. nginx_config - Contains the main nginx configuration. Edit/Replace the following to make it work properly:
    • uwsgi_pass: ReplacePROJECT_FOLDER_HERE With your Project Path
    • [OPTIONAL] listen: Port on which you want nginx to Listen
    • [OPTIONAL] server_name: Currently its0.0.0.0 . You can change it as per your needs.
  4. production_flask.service - A Systemd service file to ensure that the server restarts on failure and can be set to auto-start in case of server restart. Edit/Replace the following terms:
    • ReplaceUSER_NAME_HERE with your user-name.
    • ReplacePROJECT_FOLDER_HERE with your project app directory
    • Replaceuwsgi.ini_PATH_HERE withuwsgi.ini path

PREREQUISITES

  1. Clone this repository.

  2. A Stable Debian based Linux O.S, preferrably Ubuntu withsudo privileges configured. I have tried it on Ubuntu 18.04 and it worked flawlessly.

  3. We will me utilizing Virtual Env Wrapper for complete Flask Project.

  4. Before proceeding any further, Install the following packages:

    sudoapt-getupdatesudoapt-getinstallpython3python3-pipsudoapt-getinstallsystemdnginxsudopip3installvirtualenv
  5. Initializing Project Virtual Environment:

    cdPROJECT/APP_FOLDERvirtualenv-ppython3venvsourcevenv/bin/activatepip3install-rrequirements.txt
  6. Now, as this project is configured with a simple Hello World Application insideapp.py, we will be using it for deployment. You can also have your complete project inside the app folder with anapp.py file

INSTALLATION INSTRUCTIONS

Now comes the main dreaded and & feared (kiddin!) Installation part.Considering you have installed all the above steps successfully, will start with Nginx.

  1. You will need to place yournginx_config in/etc/nginx/sites-available/nginx_config. Then, to enable this nginx configuration, we will have to link it to the nginx sites-enabled directory using this command:

    sudo ln -s /etc/nginx/sites-available/nginx_config /etc/nginx/sites-enabled

    The above command will create a sym-link fornginx_config

  2. Restart Nginx:

    sudo service nginx restart
  3. Before starting up the main service, let make a folder for logs; the configuration for which is defined inuwsgi.ini

    sudo mkdir -p /var/log/uwsgisudo chown -R thetechfreak:thetechfreak /var/log/uwsgi

    Instead ofthetechfreak use your username.

  4. Now, we will have to configure systemd service & for that we placeproduction_flask.service in/etc/systemd/system/production_flask.service and then restart and enable the service to auto start after reboot.

    sudo systemctl start production_flask.servicesudo systemctlenable production_flask.service

    At this point, our service should successfully start and incase of any updates you can just restart the service using:

    sudo systemctl restart production_flask.service

After this step, your server should be up and running

LOGGING & MONITORING

In order to check the logs, you can navigate to the logs directors/var/log/uwsgi/

Monitoring the service is also very easy as you justneed to go inside yourPROJECT_DIR and run the following command:

uwsgitopstats.production_flask.sock

OR

If you want to monitor the logs of the application itself, you can make use ofjournalctl: Note: These logs are same as the one which are stared in/var/log/uwsgi/; So, unless you really want to have a real time log on your system, it's not required:

sudojournalctl-uproduction_flask.service-f

Serving Static Files Using Nginx

If your application requires static files to be served, you can add the following rule insidenginx_config file:

location /static {    root APP_DIR;}

ReplaceAPP_DIR with your application directory and as a result, all your static files located atAPP_DIR/static will be served by nginx

FINAL THOUGHTS

These are my final thoughts and some notes which are worth noting.

  1. UWSGI is configured inlazy-apps mode which is responsible for loading the application one time per worker. You can read more about ithere
  2. Only Basic configuration of nginx is used; however it is sufficient for most of the use cases. But still, if you want to tune it further you can read uphere
  3. If your app requires someparameters to be passed, you can make use ofCONFIGPARSERS but DO-NOT pass it via command line as uWSGI is the one responsible for invoking the app.
  4. In this app,Socket permission is given to everyone. You can adjust it as per your needs, but make sure that nginx and uWSGI can still talk to each other
  5. If something goes wrong, the first place to check is thelog files. By default, nginx writes error message to the file/var/log/nginx/errors.log

Contributions are very welcome.Do make PULL requests if you want to change anything, or post an ISSUE if you encounter any bugs.

Releases

No releases published

Packages

No packages published

Languages


[8]ページ先頭

©2009-2025 Movatter.jp