The Power of Celery with Django Rest Framework for Asynchronous Tasks – Part 2

In modern web applications, handling time-consuming tasks like sending emails, generating reports, or processing large datasets asynchronously is essential for maintaining performance and responsiveness. In this article, we’ll explore how to set up Celery with Django Rest Framework using Redis as the message broker.

This guide is a continuation of Part 1, where we covered the basic Celery integration. Here, we’ll focus on configuring Celery for a production environment, securing Redis, and running Celery in the background using Systemd—ensuring your Django application is both efficient and production-ready.

Related read: Mastering Asynchronous Tasks: Celery with Django Rest Framework – Part 1

Use the Following Process to Set Up Celery on Your Server Using Redis

1) If Redis is not installed on your server, install it using:

sudo apt update
sudo apt install redis-server

2) Then, check if Redis is running:

sudo systemctl status redis

3) Ensure Redis is set to start on boot:

sudo systemctl enable redis

If your redis server is on same server then you don’t need to modify your CELERY_BROKER_URL and CELERY_RESULT_BACKEND

Now Open a New Terminal to Test if Celery is Running
First, run the django project server, then in a new terminal, use the following command

Before that, make sure you are inside the project dict

celery -A yout_project_name  worker –loglevel=info

If Redis is on a Different Server (Recommended for Production):

Use the server’s IP address:

CELERY_BROKER_URL = 'redis://<your_redis_server_ip>:6379/0'

CELERY_RESULT_BACKEND = 'redis://<your_redis_server_ip>:6379/0'

For security, configure Redis to allow external connections:

Edit the Redis configuration file:

sudo nano /etc/redis/redis.conf
Find bind 127.0.0.1 and replace it with:

bind 0.0.0.0

Restart Redis:

sudo systemctl restart redis

Secure Redis (For External Connections)

If Redis is running on a separate server, secure it by:

Setting a password in /etc/redis/redis.conf:

requirepass your_secure_password
Updating the Django settings:

CELERY_BROKER_URL = 'redis://:your_secure_password@your_redis_server_ip:6379/0'

CELERY_RESULT_BACKEND = 'redis://:your_secure_password@your_redis_server_ip:6379/0'
Restarting Redis:

sudo systemctl restart redis

Running Celery in the Background (Production)

To keep Celery running after you close the terminal, use Supervisor or Systemd.

Using Systemd

1. Create a Systemd Service File for Celery

Run this command to create a new service file:

sudo nano /etc/systemd/system/celery.servic

2. Add the Following Configuration

Paste this inside the file (modify paths if necessary):

[Unit]
Description=Celery Service
After=network.target

[Service]
Type=simple
User=your_user_name
Group=your_user_name
WorkingDirectory=/home/your_user_name/Celery_demo/myproject
ExecStart=/home/your_user_name/Celery_demo/env/bin/celery -A myproject worker --loglevel=info
Restart=always
StandardOutput=append:/var/log/celery.log
StandardError=append:/var/log/celery_error.log

[Install]
WantedBy=multi-user.target

3 ) Save and Close the File

4) Reload and Restart Systemd

After editing, run:

sudo systemctl daemon-reload
sudo systemctl restart celery.service
sudo systemctl status celery.service

5. Check If It’s Running

If the service is still stopping, check for:

Redis connection issues
Run:

redis-cli ping

If it doesn’t return PONG, Redis isn’t running. Start it:

sudo systemctl start redis

Your Celery setup is now ready for production use.

coma

Conclusion

Setting up Celery with Django Rest Framework using Redis allows you to handle background tasks efficiently and scale your application for production. By securing your Redis server, configuring environment-specific settings, and running Celery as a background service with Systemd, you ensure your application remains robust and reliable.

With this setup in place, you’re now equipped to build high-performance Django APIs that can handle complex asynchronous workflows with ease.

Keep Reading

Keep Reading

  • Service
  • Career
  • Let's create something together!

  • We’re looking for the best. Are you in?