Do these 3 things before closing this tab:
1Repair Windows errors before they cause bigger problems2Scan for outdated or missing drivers - takes under a minute3Clear out junk files and repair common Windows errorsiTechGuides is reader-supported. When you buy through links on our site, we may earn an affiliate commission. As an Amazon Associate I earn from qualifying purchases. Learn more
Antihost offers Linux VPS plans with full root access, unlimited traffic on a 1 Gbps port and a 14-day free trial.
A production Falcon deployment on Ubuntu normally uses Falcon’s WSGI callable, Gunicorn as the application server, a systemd service and Unix socket, and Nginx as the public reverse proxy. The sequence is: install the app in an isolated virtual environment, run Gunicorn as a non-root account, let Nginx reach its socket, then add HTTPS, firewall rules, secrets handling, monitoring, and a rollback plan.
What the finished deployment looks like
A browser or API client connects to Nginx on ports 80 or 443. Nginx handles the public listener, TLS termination, request headers, and optional static files. It forwards dynamic requests over /run/gunicorn.sock to Gunicorn. Gunicorn imports the callable exposed by your Falcon project and dispatches each request to Falcon middleware and routes.
Falcon 4.4.0 supports CPython 3.9 and newer and installs with pip install falcon. Falcon conforms to WSGI, so a WSGI server such as Gunicorn can load it. Keep the source tree owned by a deployment account and execute the service with a separate runtime account that cannot modify the source. If an upload or process-restart vulnerability is ever found, removing source write access limits what that compromise can change.
Prerequisites and account separation
Install operating-system packages
Use an Ubuntu host with administrative access and a DNS name pointing to it. Install Python, virtual-environment support, and Nginx:
#1 Best Overall
- Powerful Turbo Fan:CAGIWIRU Electric Air Duster have reached speed up to 130000RPM,Can efficient remove dust and debris.With LED light and Three Adjustable Speed to meet with different cleaning tasks.
- With Attached USB C Fasting Charging cable.Charing 3 hours,Enjoy up to 240 minutes of use on the lowest setting, For third speed can use for 25mins.with four charging options to meet with your needs.
- Wide Application: attached 5 different nozzles,making it suitable for a variety of scenes, such as car,pet, pc, keyboards, and other electronic devices. It also serves for office and home clean duster.
- Handy Design & Portable:Cordless air duster electric nozzle is Light weight and small size, design and comfortable to hold and space saving, convenient to carry around. You can put it in your room or inside the car without taking up space.
- Economical &Reusable: Built durable materials with a long-lasting battery,our CAGIWIRU air duster it's a sustainable alternative to disposable air cans.
sudo apt update
sudo apt install python3 python3-venv python3-pip nginx
Check that the interpreter meets Falcon 4.4.0’s requirement:
python3 --version
Create deployment and runtime identities
The deployment account owns releases and installs dependencies. The runtime account only reads the application and runs Gunicorn:
What’s actually slowing this PC down?
Pick the symptom - the matching free tool is one click away.
sudo adduser --disabled-password --gecos '' deploy
sudo addgroup --system falconapp
sudo adduser --system --ingroup falconapp --no-create-home falconrun
sudo usermod -aG www-data falconrun
sudo mkdir -p /srv/falconapp
sudo chown deploy:falconapp /srv/falconapp
sudo chmod 750 /srv/falconapp
The falconapp group gives the service read and directory-traversal access without making falconrun the owner. The supplementary www-data membership lets the process and Nginx share a socket whose group is www-data. If your organization uses different identities, substitute them consistently in the file permissions and unit files.
Put the Falcon project in a virtual environment
Install code and dependencies
Copy or check out the project as deploy under /srv/falconapp. Create the environment and install the locked application dependencies:
sudo -u deploy python3 -m venv /srv/falconapp/venv
sudo -u deploy /srv/falconapp/venv/bin/python -m pip install --upgrade pip
sudo -u deploy /srv/falconapp/venv/bin/pip install falcon gunicorn
sudo -u deploy /srv/falconapp/venv/bin/pip install -r /srv/falconapp/requirements.txt
sudo chown -R deploy:falconapp /srv/falconapp
sudo chmod -R g+rX,o-rwx /srv/falconapp
Use a pinned requirements file for repeatable releases. The final permission command grants the runtime group read and execute access but no write access. Any directory that must be writable at runtime, such as a deliberately configured upload or cache directory, should be a separate path with its own ownership and size controls rather than making the whole source tree writable.
Expose an importable WSGI callable
Gunicorn needs a Python module and an object name. A minimal /srv/falconapp/wsgi.py could be:
import falcon
class HealthResource:
def on_get(self, req, resp):
resp.media = {'status': 'ok'}
application = falcon.App()
application.add_route('/health', HealthResource())
The target wsgi:application means “import application from wsgi.py.” If your module is named differently, change both the file path and Gunicorn target. Keep configuration and route construction import-safe: an import error should fail the service clearly rather than leaving a process that appears healthy but cannot serve requests.
Rank #2
- Screen Cleaner is Your Screen’s New Bestfriend! - EVEO is proud to present a screen cleaner that’s perfectly suited for your TV. Meet your new screen cleaner, computer screen cleaner, laptop cleaner, iPad cleaner, Macbook,tv cleaner or any other electronic device. Our screen cleaner spray and wipe along with the included plush microfiber cloth, easily removes dust, fingerprints & other smudges on the screen’s surface. Clean effectively for a streak-free screen
- Gentle on your Screens - Our screen cleaner spray and wipes is compatible to be used even for the most sensitive LCD, LED, CRT, and OLED screens in proper use. Be at ease knowing that this product is compatible with all the major brands: LG, SONY, Samsung, Sharp, iPad, iPhone, Android screens, Kindle, PC monitors - we’ve got you covered! Can be used as LCD screen cleaner, tv cleaner, smart tv screen cleaner, and more
- Premium Super Soft Plush Microfiber Cloth - Included in this efficient screen cleaning kit. This screen cleaner spray and wipe has our signature plush microfiber cloth specially designed to comply with screens and monitors and leave them streak-free. Has been shown to effectively absorbs stubborn stains, zero streaks, and no fiber shedding. Always use this together with our screen cleaner for the best results
- Easy-to-Use Screen Cleaner Kit + microfiber cleaning cloth - The EVEO Screen Cleaning Kit will easily be your new favorite tool when it comes to taking care of the things you love most, quick and easy solution for a streak-free screen. Simply screw on the sprayer gun on the screen cleaner bottle. Spray the cleaning liquid onto the microfiber cloth, then wipe the screen until desired cleanliness & shine is achieved.
- Quality Screen Care Kit Worth Purchasing - Enjoy a convenient Screen Cleaner anytime, anywhere you need it. Your satisfaction is our top priority. We stand behind the quality of our products and that’s why, you shouldn’t be worrying at all. We manufacture the Best Screen Cleaner. and can be used for laptop cleaning kit, laptop screen cleaner, tv screen cleaner for smart tv. MacBook screen cleaner, monitor cleaner or screen cleaner spray for electronic devices with microfiber cleaning cloth
Smoke-test Gunicorn before adding Nginx
Run the exact virtual-environment executable from the project directory:
cd /srv/falconapp
sudo -u falconrun /srv/falconapp/venv/bin/gunicorn --bind 127.0.0.1:8000 wsgi:application
In another shell, request the loopback endpoint:
curl -i http://127.0.0.1:8000/health
Gunicorn’s default bind is loopback port 8000; explicitly specifying it makes the test unambiguous and keeps the temporary listener off the public interface. Stop the foreground process with Ctrl-C. Resolve import errors, missing packages, and Falcon route exceptions here, before introducing systemd or Nginx.
Create systemd units for Gunicorn
A service unit gives Gunicorn supervision, restart behavior, a known working directory, and an explicit interpreter. A socket unit reserves the Unix-socket path and defines the permissions Nginx needs. Type=notify lets Gunicorn report readiness to systemd, so a start can be distinguished from a process that merely exists.
Gunicorn socket unit
Create /etc/systemd/system/gunicorn.socket:
[Unit]
Description=Falcon Gunicorn socket
[Socket]
ListenStream=/run/gunicorn.sock
SocketUser=falconrun
SocketGroup=www-data
SocketMode=0660
[Install]
WantedBy=sockets.target
The socket is owned by the runtime user and group-readable by Nginx. Mode 0660 avoids exposing the application socket to unrelated local users. If your Nginx worker runs under another account, use that account’s group instead of www-data.
Gunicorn service unit
Create /etc/systemd/system/gunicorn.service:
[Unit]
Description=Falcon Gunicorn service
Requires=gunicorn.socket
After=network.target
[Service]
Type=notify
User=falconrun
Group=falconapp
SupplementaryGroups=www-data
WorkingDirectory=/srv/falconapp
Environment=PATH=/srv/falconapp/venv/bin
ExecStart=/srv/falconapp/venv/bin/gunicorn --workers 3 --bind unix:/run/gunicorn.sock wsgi:application
ExecReload=/bin/kill -s HUP $MAINPID
KillMode=mixed
TimeoutStopSec=5
PrivateTmp=true
[Install]
WantedBy=multi-user.target
The three-worker value is an example configuration, not a universal capacity rule. Worker count, request timeout, and memory limits must be selected from your workload measurements. The important production properties here are the non-root identity, the virtual-environment executable, the project directory, the socket bind, and the matching callable name.
Load, enable, and inspect the units
-
Ask systemd to read the new files:
sudo systemctl daemon-reload -
Enable the socket at boot and start it now:
sudo systemctl enable --now gunicorn.socket -
Enable and start the service:
sudo systemctl enable gunicorn.service sudo systemctl start gunicorn.service -
Inspect both units and recent logs before exposing traffic:
sudo systemctl status gunicorn.socket gunicorn.service sudo journalctl -u gunicorn.service -e --no-pager -
Confirm the socket exists and has the expected owner and mode:
Recommended Free Tools
Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.Rank #3
SaleBladeHawks RGB Gaming Mouse Pad Extra Large Extended 31.5x12 Inch-Black | LED mouse pad with 14 lighting modes, covers keyboard & mouse, anti-slip rubber base, waterproof surface, USB powered- 【Large size】:Measuring 800 x 300 mm/ 31. 5×12 inches, which is wider and taller than others. Large mouse pad can perfectly fit your keyboard and mouse of any size, and there is also ample space for peripherals such as phones, tablets, etc.
- 【LED backlight mouse pad】:Blade Hawks RGB mouse pad provides 7 static modes and 7 dynamic modes will give you the options you are looking for. Power-off memory function remembers the last lighting mode you selected. The super glow fiber Chroma will give you a colorful gaming setup that you want.
- 【Anti-slip rubber base】:Made from Natural rubber, this gaming mousepad will firmly grip your desktop, allowing you to enjoy the ultimate precision in the games you are most passionate about. It also comes with a texture that enhances this ability even further.
- 【Smooth and waterproof surface】: Micro-textured cloth surface, for extremely precise mouse control and a smooth movement. When liquid splashes on the gaming mouse pad, it forms water droplets and slides down. Will not delay your work or gameplay.
- 【Plug and play】: This mouse and keyboard pad is powered by USB, plug and play, no driver required. One button control light modes. Press one time to change the lighting mode, press twice to change the brightness, press and hold about 3 seconds turn ON/OFF.
sudo stat /run/gunicorn.sock sudo ss -xl | grep gunicorn.sock
After a code or unit-file change, use sudo systemctl daemon-reload and then restart the service. A socket unit can remain active while the service is restarted, which lets Nginx keep a stable endpoint.
Configure Nginx as the reverse proxy
Create a server block
Create a site file such as /etc/nginx/sites-available/falconapp. Replace the example domain and static directory with your values:
server {
listen 80;
listen [::]:80;
server_name api.example.com;
location /static/ {
alias /srv/falconapp/static/;
}
location / {
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_pass http://unix:/run/gunicorn.sock;
}
}
Only use the /static/ location if the directory exists and contains files intended for direct serving. Otherwise remove it and let Falcon handle that path. The proxy headers preserve the original host, client address, and scheme for application logging and URL generation.
Enable and validate Nginx
-
Enable the site and remove the default site if it would catch the same hostname:
Quick wins for a faster PC:
Fix the driver behind crashes, sound loss and screen glitchesFind Drivers →Clear out junk files and repair common Windows errorsFree Scan →Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.sudo ln -s /etc/nginx/sites-available/falconapp /etc/nginx/sites-enabled/falconapp sudo rm -f /etc/nginx/sites-enabled/default -
Check syntax before reloading:
sudo nginx -t -
Enable Nginx at boot and start or reload it:
sudo systemctl enable --now nginx sudo systemctl reload nginx -
Request the public hostname and watch both logs:
curl -i http://api.example.com/health sudo journalctl -u nginx -e --no-pager sudo journalctl -u gunicorn.service -e --no-pager
A successful response proves the complete path—DNS, Nginx, socket permissions, Gunicorn import, and Falcon routing—rather than only a local application process.
Make the host production-ready
HTTPS and network exposure
Use a trusted certificate for the real hostname and redirect plain HTTP to HTTPS. Keep Gunicorn on the Unix socket (or loopback) rather than publishing port 8000. Permit only required ports in the host firewall; a typical policy allows SSH for administration and TCP 80 and 443 for web traffic, while denying direct access to internal application ports.
Secrets and configuration
Do not commit credentials, signing keys, or database passwords to the source tree. Store them in a root-controlled environment file or a secret manager and reference that configuration from the service. If you use an environment file, restrict it to the runtime account or its dedicated group and verify the permissions after every deployment. Avoid printing secret values in startup logs.
Rank #4
- 【Softer and More Comfortable】Vaydeer wrist rest has unique diamond pattern, which is the combination of softness and aesthetics. The materials of wrist rest are improved into higher quality memory foam and covered with silky smooth lycra. The computer wrist rest makes you as comfortable and cushiony as like rest your wrists on clouds.
- 【Ergonomic Wrist Saver】The wrist rests for keyboard and mouse comes with a 17.32×3.15×0.83 inch keyboard wrist pad and a 5.94×3.15×0.83 inch mouse wrist support. Based on ergonomic design, the unique concave shape is the perfect fit for your wrist joints. The wrist rest pad fits most computer keyboards and laptops, improve hand and wrist posture, release your wrist and arm stress.
- 【Non-Slip Rubber Bottom】Featuring an anti-skid silicone base on the bottom, this wrist keyboard support stays firmly in place on your desk, preventing the padding from sliding around, ensuring stable and consistent wrist support during extended computer sessions.
- 【Better Experience & Pain Relief】Our keyboard arm rest is beneficial to alleviate the soreness caused by direct contact and friction between your arm and a hard desk surface, reducing the risk of wrist fatigue or carpal tunnel. The soft texture of memory foam can evenly distribute the pressure around your wrists and provide good support with just enough give.
- 【Helpful in Multiple Scenarios】Whether you're working, studying, writing, typing, gaming, this keyboard and mouse rest combo is an essential accessory to add comfort and support to your hands and wrists. It’s also a great gift for men, women, family, friend, coworker, gamer, teacher, etc.
Logs, monitoring, and backups
-
Send access and error output to a centrally collected destination or configure rotation so an active service cannot fill the disk.
Free tools Windows power users keep installed
One-click scans. No signup required.
Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy. -
Monitor systemd service state, Nginx error rates, response latency, memory use, and the health endpoint. A process that is running but repeatedly returning application errors is not healthy.
-
Back up the data Falcon actually needs—database contents, uploaded objects, and configuration—not just a replaceable virtual environment.
-
Document who can deploy, who can read secrets, and how to restore the previous release.
The Falcon deployment guidance describes its snippets as starting points rather than a perfectly tuned or secure environment. Add TLS, access controls, secret management, rotation, monitoring, backups, and rollback procedures for your threat model and availability target.
Deploy updates and roll back safely
Use release directories
For repeatable updates, place each release in its own directory, for example /srv/falconapp/releases/2026-10-15-1200, create its virtual environment, install the pinned dependencies, and run the local smoke test against that directory. Point /srv/falconapp/current at the tested release and make WorkingDirectory and ExecStart reference stable paths that resolve through the link.
Restart and verify
-
Install the new release as
deployand apply read-only group permissions.Best Value
SaleUnder Desk Cable Management Tray No Drill, Metal Mesh Cable Management Under Desk with Clamp Mount, 2 Hole Cable Tray with Wire Management and Cord Organizer for Home Office Standing Desk- 【No Drill Mounted】Cable management tray can be assembled in as little as 3 minutes or less-simply. Side clips easily clampe the edge of desk, pass through the holes on the sides, and secure excess cables with baskets. Desk cable management supports inward or outward installation to meet your needs in different scenarios, and provides you with great convenience when collecting and organizing wires.
- 【Rubber Pad Protects Desk】Wire organizer under desk built-in soft rubber pads on the clamp protect your desk from scratches, so you will not damage your furniture or office.
- 【Sturdy and Beautiful】Cord management under desk is made of high-quality carbon steel and holds about 15 lbs. The wire basket has 2 holes on each side of the tray to enable your cables to pass freely. Cable baskets are suitable for desk thickness use from 0.4" to 2.4".
- 【Space Saving & Keep Organized】Desk cable management tray holds all your power cords, outlet strips, USB hubs and computer transformers hidden from your feet, and the data cables will not enter the vacuum cleaner to keep your desk clean and tidy. Desk wire organizer is also suitable for use in the kitchen and outdoors.
- 【Reduce Safety Risks】Cable tray under desk keeps all plugs away from your kids, no more worry about tripping. Using 2 holes wire tray saves extra space, helps you easily cabling and wire protection. The mesh design is not easy to accumulate dust, but avoids safety accidents caused by messy wires.
-
Run the same
wsgi:applicationsmoke test using the new environment. -
Switch the
currentlink atomically. -
Run
sudo systemctl restart gunicorn.serviceand wait for an active state.The Tool Desk
Outbyte PC Repair FREEClear out junk files and repair common Windows errorsFree Scan →Outbyte Driver Updater FREEFix the driver behind crashes, sound loss and screen glitchesFind Drivers →Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy. -
Call the health endpoint through Nginx and inspect Gunicorn and Nginx logs.
If validation fails, repoint current to the previous release, restart Gunicorn, and verify the endpoint again. Keep enough previous releases to cover the recovery window and remove old environments only after the new release has proved stable.
Choosing the deployment variant
| Decision | Recommended choice for this guide | When another choice fits |
|---|---|---|
| Application interface | WSGI with Falcon and Gunicorn | Use an ASGI stack only when the application and its middleware are designed for ASGI; do not point a WSGI callable at an ASGI-only server. |
| Gunicorn endpoint | Unix socket at /run/gunicorn.sock |
TCP loopback such as 127.0.0.1:8000 is simpler for diagnostics or a separately managed proxy, but it should not be opened publicly without a deliberate network policy. |
| Process supervision | systemd service plus socket unit | Manual foreground execution is useful for a smoke test, not for reboot recovery or long-term supervision. |
| Public-server duties | Nginx handles TLS, static files, and proxying | A different edge proxy can work if it supplies equivalent TLS, header, buffering, timeout, and access-control behavior. |
| Scaling model | One Ubuntu host with measured Gunicorn workers | Multiple hosts, shared state, health checks, and coordinated releases are needed for horizontal scaling and high availability. |
The Linux examples are a foundation that can evolve into a horizontally scalable design. Scaling out does not remove the need for immutable releases, externalized state, health checks, and a controlled deployment process.
Troubleshoot the failures you are most likely to see
| Symptom | Likely cause | Checks and fix |
|---|---|---|
| Nginx returns 502 Bad Gateway | Gunicorn is stopped, the socket path differs, or Nginx cannot access the socket. | Run systemctl status gunicorn.service gunicorn.socket, verify /run/gunicorn.sock, compare the proxy_pass path with --bind, and inspect journalctl -u nginx. Correct ownership or mode if access is denied. |
| Gunicorn exits immediately | Import error, missing dependency, invalid configuration, or an incorrect callable name. | Read journalctl -u gunicorn.service -e and run the exact virtual-environment Gunicorn command manually from /srv/falconapp. Fix the package, module path, or wsgi:application target. |
| Permission denied while importing code | A parent directory or file is not traversable/readable by falconrun. |
Use namei -l /srv/falconapp/wsgi.py and sudo -u falconrun test -r /srv/falconapp/wsgi.py. Restore group read and execute permissions without granting source write access. |
| Static files return 404 | The Nginx alias does not match the URL prefix or the directory is absent. | Confirm the file exists under the alias path, include the trailing slash in both location and alias, then run nginx -t and reload. |
| Changes are not visible | The service still uses an old working directory or was not restarted. | Check systemctl cat gunicorn.service, verify the release link, run daemon-reload after unit edits, and restart Gunicorn. |
| Nginx configuration test fails | Syntax error, duplicate server name, or a bad include. | Run sudo nginx -t; its error includes the file and line. Fix that line before reloading the running configuration. |
Worker count and capacity planning
There is no authoritative throughput or worker-count figure for every Falcon, Gunicorn, and Nginx deployment. CPU-bound handlers, blocking database calls, request size, response time, memory footprint, and traffic shape all change the result. Start with a conservative worker count, measure under a representative load, watch memory and tail latency, and adjust one variable at a time. Treat any value in an example unit file as a configuration starting point, never as a published performance guarantee.
Quick Recap
Product prices and availability are accurate as of the date/time indicated and are subject to change. Any price and availability information displayed on Amazon at the time of purchase will apply.

