Python-Seledri di Windows dengan pengelolaan Docker

Untuk ' cukup ' men-debug Seledri dari bawah Windows, ada beberapa cara seperti:

> celery worker --app=demo_app.core --pool=solo --loglevel=INFO

Tetapi, pada kenyataannya, untuk pengembangan normal, Anda memerlukan sistem Unix. Jika Anda tidak memiliki kesempatan untuk menggunakannya sebagai penduduk asli, maka itu layak dipertimbangkan ...) Ya, jujur ​​saja, selalu ada jalan keluar dan ini adalah Docker, serta WSL. Jika Anda menggunakan IDE "keren" seperti PyCharm, maka semuanya menjadi lebih rumit, karena ketika menggunakan interpreter dengan sumber dari WSL, setelah menginstal paket melalui pip, Anda harus memperbarui kerangka proyek secara manual karena masalah pengindeksan.

Tetapi dengan Docker, semuanya berbeda. Untuk manajemen yang keren, kita akan memerlukan Windows 10 Pro, karena versi Home tidak mendukung virtualisasi.

Sekarang instal dan uji Docker . Setelah ini terjadi di baki, ikon yang sesuai akan muncul.

gambar

Selanjutnya, kami membuat dan menjalankan proyek di Django. Di sini saya menggunakan versi 2.2. Akan ada struktur yang mirip dengan ini:

gambar

Setelah kami menginstal Celery dan Redis sebagai broker.

Sekarang tambahkan beberapa kode untuk memeriksa:

# core/settings.py 
CELERY_BROKER_URL = 'redis://demo_app_redis:6379'
CELERY_ACCEPT_CONTENT = ['json'] 
CELERY_TASK_SERIALIZER = 'json'

# core/celery.py
from __future__ import absolute_import, unicode_literals
import os
from celery import Celery

os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'core.settings')
app = Celery('core')
app.config_from_object('django.conf:settings', namespace='CELERY')
app.autodiscover_tasks()

# core/__init__.py
from __future__ import absolute_import, unicode_literals
from .celery import app as celery_app

__all__ = ('celery_app',)

Tambahkan aplikasi Django baru di mana tugas kita akan dan menambahkan file baru:

# app/tasks.py
from celery.task import periodic_task
from datetime import timedelta

@periodic_task(run_every=(timedelta(seconds=5)), name='hello')
def hello():
    print("Hello there")

Selanjutnya, buat Dockerfile dan docker-compose.yml di root proyek:

# Dockerfile
FROM python:3.7
RUN pip install pipenv
RUN mkdir /code
WORKDIR /code
COPY Pipfile* /code/
RUN pipenv install --system --deploy --ignore-pipfile
ADD core /code/

# docker-compose.yml
version: '3'

services:
  redis:
    image: redis
    restart: always
    container_name: 'demo_app_redis'
    command: redis-server
    ports:
      - '6379:6379'
  web:
    build: .
    restart: always
    container_name: 'demo_app_django'
    command: python manage.py runserver 0.0.0.0:8000
    volumes:
      - .:/code
    ports:
      - '8000:8000'
  celery:
    build: .
    container_name: 'demo_app_celery'
    command: celery -A core worker -B
    volumes:
      - .:/code
    links:
      - redis
    depends_on:
      - web
      - redis

Dan mulai!

gambar

Kami menunggu instalasi semua dependensi di lingkungan pipenv. Pada akhirnya, Anda akan melihat sesuatu seperti ini:

gambar

Itu berarti semuanya keren ! Anda dapat mengontrol dari baris perintah:

gambar

gambar

Seperti yang Anda lihat, 2 gambar yang dibuat dari satu Dockerfile memiliki satu ID.

Tetapi Anda juga dapat mengelola wadah menggunakan GUI:

gambar

gambar

Dengan cara ini, Anda dapat dengan mudah menghidupkan / mematikan, memulai kembali, menghapus wadah.

gambar

All Articles