您可以在 Docker 中同时使用 Django 和 InfluxDB。首先,创建一个项目和应用程序。
mkdir django-influxdb-example
cd django-influxdb-example
django-admin startproject project
cd project
django-admin startapp app
cd ..
创建虚拟环境并安装django、postgres和influxdb。
python3 -m venv venv
source venv/bin/activate
pip install django psycopg2 influxdb
pip install --upgrade pip
pip freeze > requirements.txt
现在,我的要求是这样的,
certifi==2018.8.24
chardet==3.0.4
Django==2.1.1
idna==2.7
influxdb==5.2.0
psycopg2==2.7.5
python-dateutil==2.7.3
pytz==2018.5
requests==2.19.1
six==1.11.0
urllib3==1.23
创建一个Dockerfile,
FROM python:3.6-alpine3.7
ENV PYTHONUNBUFFERED 1
RUN apk update \
&& apk add libpq postgresql-dev \
&& apk add build-base
WORKDIR /usr/src/app
COPY requirements.txt ./
RUN pip install -r requirements.txt
COPY project ./
创建一个docker-compose.yml 文件,
version: '3'
services:
db:
image: postgres
web:
build: .
command: python3 manage.py runserver 0.0.0.0:8000
volumes:
- ./project:/usr/web/app
ports:
- "8000:8000"
depends_on:
- db
- influxdb
links:
- influxdb
influxdb:
image: influxdb
ports:
- "8083:8083"
- "8086:8086"
我将以下内容添加到我的 Django settings.py,
INFLUXDB_HOST = 'influxdb'
INFLUXDB_PORT = 8086
INFLUXDB_USERNAME = None
INFLUXDB_PASSWORD = None
INFLUXDB_DATABASE = 'example'
INFLUXDB_TIMEOUT = 10
此时,您可以尝试构建整个东西,看看它是否会出现,
docker-compose build
docker-compose run web python3 manage.py makemigrations
docker-compose run web python3 manage.py migrate
docker-compose up
如果您访问 localhost:8000,那么您应该会看到默认的 Django 启动页面。如果你在 web 容器上打开一个交互式 Python 会话,你应该可以通过 Python influxdb 模块访问 InfluxDB,
docker-compose run web python3
Starting django-influxdb-example_db_1 ... done
Starting django-influxdb-example_influxdb_1 ... done
Python 3.6.6 (default, Sep 12 2018, 02:19:14)
[GCC 6.4.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> from influxdb import InfluxDBClient
>>> client = InfluxDBClient('influxdb', 8086)
>>> client.get_list_database()
[{'name': '_internal'}]
>>> client.create_database('example')
>>> client.get_list_database()
[{'name': '_internal'}, {'name': 'example'}]
现在一切都已连接并运行,您可以专注于编写代码以创建数据库并添加点。我查看了django-influxdb-metrics 的代码并找到了下面的代码,我把它放在我的app/ 目录中的utils.py 文件中。这将使用我们之前在 settings.py 文件中定义的常量创建一个 influxdb 客户端。
from django.conf import settings
from influxdb import InfluxDBClient
import logging
logger = logging.getLogger(__name__)
def get_influxdb_client():
"""Returns an ``InfluxDBClient`` instance."""
client = InfluxDBClient(
settings.INFLUXDB_HOST,
settings.INFLUXDB_PORT,
settings.INFLUXDB_USERNAME,
settings.INFLUXDB_PASSWORD,
settings.INFLUXDB_DATABASE,
timeout=getattr(settings, 'INFLUXDB_TIMEOUT', 10),
ssl=getattr(settings, 'INFLUXDB_SSL', False),
verify_ssl=getattr(settings, 'INFLUXDB_VERIFY_SSL', False),
)
return client
最后,我可以从这里创建数据库、添加点并通过客户端执行查询。