在docker-compose.yml中为服务创建单位文件

时间:2020-07-17 20:11:53

标签: docker redis docker-compose celery systemd

下面是我的docker-compose.yml文件中的代码

 version: '2'
services:
  postgres:
    image: 'postgres:9.5'
    env_file:
      - '.env'
    volumes:
      - 'postgres:/var/lib/postgresql/data'
    ports:
      - '5432:5432'

  redis:
    image: 'redis:3.0-alpine'
    command: redis-server --requirepass XXXXXXXXXXXXX
    volumes:
      - 'redis:/var/lib/redis/data'
    ports:
      - '6379:6379'

  website:
    build: .
    command: >
      gunicorn -c "python:config.gunicorn" --reload "whs.app:create_app()"
    env_file:
      - '.env'
    volumes:
      - '.:/whs'
    ports:
      - '8000:8000'

  celery:
    build:
    command: celery worker -B -l info -A whs.blueprints.contact.tasks   
    env_file:
      - '.env'
    volumes:
      - '.:/whs'

volumes:
  postgres:
  redis:

celery.service单位文件中的代码

[Unit]
Description=Run %p
Requires=docker.service redis.service
After=docker.service redis.service

[Service]
Restart=always
ExecStartPre=-/usr/bin/docker kill %p
ExecStartPre=-/usr/bin/docker rm -f %p
ExecStart=/usr/bin/docker run --rm --name %p \
  --network whs \
  -v /var/lib/%p/data:/data %p:4.0.2
ExecStop=/usr/bin/docker stop %p

[Install]
WantedBy=multi-user.target
  1. 不确定此命令是否在哪里包括:celery worker -B -l info -A whs.blueprints.contact.tasks ,音量:文件

  2. 以上单位文件运行正常,但celery未连接到Redis,因为它无法更新默认的BROKER_URL ENVIRONMENT变量。下面是它尝试连接的地方

-------------- celery @ 2435cb584127 v4.0.2(潜在呼叫)

---- **** -----                                                                                    
--- * ***  * -- Linux-4.19.0-9-amd64-x86_64-with-debian-8.8 2020-07-17 19:21:16                    
-- * - **** ---                                                                                    
- ** ---------- [config]                                                                           
- ** ---------- .> app:         default:0x7f06bd860ba8 (.default.Loader)                           
- ** ---------- .> transport:   amqp://guest:**@rabbit:5672//                                      
- ** ---------- .> results:     disabled://                                                        
- *** --- * --- .> concurrency: 1 (prefork)                                                        
-- ******* ---- .> task events: OFF (enable -E to monitor tasks in this worker)                    
--- ***** -----                                                                                    
 -------------- [queues]                                                                           
                .> celery           exchange=celery(direct) key=celery

在我的app.py中的以下代码应更新celery配置

celery = Celery(app.import_name, broker=app.config['CELERY_BROKER_URL'],
                    include=CELERY_TASK_LIST)
    celery.conf.update(app.config)

使用 docker-compose up 在我的本地系统上运行时,该应用程序运行正常。唯一的区别是远程服务器正在使用systemd单位文件来提供这些服务。

如果有的话,这将是非常有用的帮助。谢谢。

0 个答案:

没有答案