نحوه راه اندازی CouchDB – فروشگاه اسناد JSON #
CouchDB یک پایگاه داده متنباز مبتنی بر سند است که دادهها را به صورت اسناد JSON ذخیره میکند. این پایگاه داده یک API HTTP RESTful برای تمام عملیات پایگاه داده، تکثیر داخلی و کنترل همزمانی چند نسخهای ارائه میدهد. طراحی بدون طرحواره CouchDB آن را برای ذخیرهسازی لاگ در جایی که ساختارهای سند ممکن است متفاوت باشند، ایدهآل میکند و رابط مبتنی بر HTTP آن، ادغام با ابزارهای جمعآوری لاگ را ساده میکند.
در این مقاله، شما CouchDB را با استفاده از Docker Compose مستقر خواهید کرد، ذخیرهسازی پایدار را برای فایلهای پایگاه داده پیکربندی خواهید کرد و Traefik را به عنوان یک پروکسی معکوس برای دسترسی ایمن به نمونه CouchDB خود تنظیم خواهید کرد.
پیش نیازها #
قبل از شروع نیاز دارید به:
- به عنوان یک کاربر غیر ریشه با امتیازات sudo به یک سرور مبتنی بر اوبونتو ۲۴.۰۴ دسترسی داشته باشید.
- داکر و داکر کامپوز را نصب کنید.
- یک رکورد دامنه A که به آدرس IP سرور شما اشاره میکند پیکربندی کنید (برای مثال،
couchdb.example.com).
تنظیم ساختار دایرکتوری و متغیرهای محیطی #
در این بخش، ساختار دایرکتوری مورد نیاز برای CouchDB را آماده میکنید و متغیرهای محیطی را در یک فایل .env تعریف میکنید.
- ساختار دایرکتوری برای CouchDB را ایجاد کنید.console
$ mkdir -p ~/couchdb-logging/couchdb-dataاین دایرکتوری فایلهای پایگاه داده، نماها و تنظیمات پیکربندی را ذخیره میکند.
- به دایرکتوری
couchdb-loggingبروید.console$ cd ~/couchdb-logging
- مالکیت صحیح را برای دایرکتوری دادههای CouchDB تنظیم کنید. CouchDB به عنوان کاربر couchdb (UID 5984) درون کانتینر اجرا میشود.console
$ sudo chown -R ۵۹۸۴:۵۹۸۴ couchdb-data
- یک فایل
.envایجاد کنید.console$ nano .envمتغیرهای زیر را اضافه کنید:
iniDOMAIN=couchdb.example.com LETSENCRYPT_EMAIL=admin@example.com COUCHDB_USER=admin COUCHDB_PASSWORD=changeme
جایگزین کردن:
couchdb.example.comبا دامنه شما.admin@example.comبا ایمیل شما.changemeبا یک رمز عبور قوی.
فایل را ذخیره کنید و ببندید.
راه اندازی با Docker Compose #
در این بخش، شما پشته Docker Compose را که CouchDB را پشت Traefik اجرا میکند، ایجاد و مستقر میکنید. Docker Compose هر دو کانتینر را مدیریت میکند، متغیرهای محیطی را از فایل .env شما اعمال میکند و به طور خودکار مسیریابی HTTPS را از طریق Traefik پیکربندی میکند.
- یک مانیفست جدید Docker Compose ایجاد کنید.console
$ nano docker-compose.yaml - محتوای زیر را اضافه کنید.yaml
services: traefik: image: traefik:v3.6 container_name: traefik command: - "--providers.docker=true" - "--providers.docker.exposedbydefault=false" - "--entrypoints.web.address=:80" - "--entrypoints.websecure.address=:443" - "--entrypoints.web.http.redirections.entrypoint.to=websecure" - "--entrypoints.web.http.redirections.entrypoint.scheme=https" - "--certificatesresolvers.letsencrypt.acme.httpchallenge=true" - "--certificatesresolvers.letsencrypt.acme.httpchallenge.entrypoint=web" - "--certificatesresolvers.letsencrypt.acme.email=${LETSENCRYPT_EMAIL}" - "--certificatesresolvers.letsencrypt.acme.storage=/letsencrypt/acme.json" ports: - "۸۰:۸۰" - "۴۴۳:۴۴۳" volumes: - "letsencrypt:/letsencrypt" - "/var/run/docker.sock:/var/run/docker.sock:ro" restart: unless-stopped couchdb: image: couchdb:latest container_name: couchdb hostname: couchdb expose: - "۵۹۸۴" volumes: - "./couchdb-data:/opt/couchdb/data" environment: - COUCHDB_USER=${COUCHDB_USER} - COUCHDB_PASSWORD=${COUCHDB_PASSWORD} labels: - "traefik.enable=true" - "traefik.http.routers.couchdb.rule=Host(`${DOMAIN}`)" - "traefik.http.routers.couchdb.entrypoints=websecure" - "traefik.http.routers.couchdb.tls.certresolver=letsencrypt" - "traefik.http.services.couchdb.loadbalancer.server.port=5984" restart: unless-stopped volumes: letsencrypt:
فایل را ذخیره کنید و ببندید.
این پیکربندی شامل موارد زیر است:
- services: دو کانتینر برای ارائه پشته پایگاه داده با هم همکاری میکنند:
- traefik: به عنوان روتر لبه عمل میکند، گواهینامههای SSL را دریافت میکند و ترافیک HTTPS را به پایگاه داده هدایت میکند.
- couchdb: میزبان موتور پایگاه داده NoSQL است و به API و رابط وب RESTful سرویس میدهد.
- image: تصاویر رسمی کانتینر را از ناشران تأیید شده Docker Hub دریافت میکند.
- container_name: از نامهای استاتیک توصیفی برای عملیات ساده کانتینر استفاده میکند.
- command (Traefik): کشف سرویس مبتنی بر داکر را فعال میکند، شنوندههای HTTP (80) و HTTPS (443) را باز میکند، تمام HTTP را به طور خودکار به HTTPS هدایت میکند و کلاینت Let’s Encrypt ACME را با روش چالش HTTP-01 پیکربندی میکند.
- ports (Traefik): پورتهای وب سرویس ۸۰ و ۴۴۳ را برای دسترسی عمومی در اختیار سیستم میزبان قرار میدهد.
- expose (CouchDB): پورت ۵۹۸۴ را فقط برای ارتباطات بین کانتینرها باز میکند و اتصالات مستقیم خارجی را مسدود میکند.
- volumes:
- دستور Bind mount (
./couchdb-data) فایلها و اسناد پایگاه داده را در طول راهاندازیهای مجدد حفظ میکند. - درایو نامگذاری شده
letsencryptبه طور مستقل از ذخیره سازی گواهی SSL پشتیبانی میکند. - دسترسی فقط خواندنی به سوکت داکر(
/var/run/docker.sock:ro) امکان تشخیص پویای کانتینر را فراهم میکند.
- دستور Bind mount (
- environment (CouchDB): اطلاعات احراز هویت مدیر را از فایل .env دریافت میکند.
- labels (CouchDB): حاشیهنویسیهای پیکربندی که به Traefik دستور میدهند درخواستها را پروکسی کند، بر اساس نام دامنه مسیریابی کند، گواهیهای SSL را ضمیمه کند و پورت سرویس backend را مشخص کند.
- restart: unless-stopped: تضمین میکند که کانتینرها پس از خرابی، به استثنای توقفهای دستی، به طور خودکار به کار خود ادامه میدهند.
- services: دو کانتینر برای ارائه پشته پایگاه داده با هم همکاری میکنند:
- سرویسها را ایجاد و شروع کنید.console
$ docker compose up -d - تأیید کنید که سرویسها در حال اجرا هستند.console
$ docker compose psخروجی:
NAME IMAGE COMMAND SERVICE CREATED STATUS PORTS couchdb couchdb:latest "tini -- /docker-ent…" couchdb 18 seconds ago Up 17 seconds 5984/tcp traefik traefik:v3.6 "/entrypoint.sh --pr…" traefik 18 seconds ago Up 17 seconds 0.0.0.0:80->80/tcp, [::]:80->80/tcp, 0.0.0.0:443->443/tcp, [::]:443->443/tcpهر دو کانتینر عملیاتی هستند. CouchDB درخواستهای پایگاه داده را میپذیرد در حالی که Traefik اتصالات روی پورتهای
۸۰و۴۴۳.را مدیریت میکند. - مشاهده لاگهای سرویسهاconsole
$ docker compose logsبرای اطلاعات بیشتر در مورد مدیریت پشته Docker Compose، به مقاله نحوه استفاده از Docker Compose مراجعه کنید.
دسترسی به CouchDB #
این بخش نحوه تأیید نصب CouchDB خود را با دسترسی به کنسول وب Fauxton و اجرای عملیات اساسی پایگاه داده از طریق رابط RESTful HTTP نشان میدهد.
- رابط وب CouchDB را در مرورگر خود باز کنید.
https://couchdb.example.com/_utils - با استفاده از اطلاعات کاربری که در فایل
.envپیکربندی کردهاید، وارد سیستم شوید:- Username: مقداری که برای
COUCHDB_USERتنظیم کردهاید (پیشفرض:admin) - Password: مقداری که برای
COUCHDB_PASSWORDتنظیم کردهاید
- Username: مقداری که برای
- رابط کاربری فاکستون نمایش داده میشود. این کنسول مدیریتی مبتنی بر وب به شما امکان میدهد پایگاههای داده، اسناد و تنظیمات تکثیر را مدیریت کنید.
- با استفاده از خط فرمان، تأیید کنید که CouchDB پاسخ میدهد.console
$ curl https://couchdb.example.comخروجی:
{ "couchdb": "Welcome", "version": "3.5.1", "git_sha": "44f6a43d8", "uuid": "92800b247a331df27afce9ad744a370b", "features": [ "access-ready", "partitioned", "pluggable-storage-engines", "reshard", "scheduler" ], "vendor": { "name": "The Apache Software Foundation" } } - یک پایگاه داده آزمایشی ایجاد کنید.console
$ curl -X PUT https://admin:changeme@couchdb.example.com/logsبه جای
admin:changeme، اطلاعات کاربری واقعی خود را وارد کنید..خروجی:
{"ok":true} - یک سند گزارش نمونه وارد کنید.console
$ curl -X POST https://admin:changeme@couchdb.example.com/logs \ -H "Content-Type: application/json" \ -d '{ "timestamp": "2025-12-01T20:47:23Z", "level": "INFO", "message": "Application started successfully", "service": "web-server" }'
خروجی شامل شناسه سند و نسخه آن است:
{"ok":true,"id":"f234689e3359a8a43434713cb20008a5","rev":"1-6a43114e6467b83a73137f1112b9db8e"} - بازیابی تمام اسناد از پایگاه داده.console
$ curl https://admin:changeme@couchdb.example.com/logs/_all_docsپاسخ تأیید میکند که سند شما با موفقیت ذخیره شده است.
نتیجه گیری #
شما با موفقیت CouchDB را برای مدیریت لاگ با رمزگذاری HTTPS مستقر کردهاید. معماری کانتینر شده، پایگاه داده اسناد را با مدیریت خودکار گواهینامه جفت میکند و از پایداری دادهها در طول راهاندازی مجدد سرویس از طریق والیومهای bind-mounted اطمینان حاصل میکند. Traefik خاتمه SSL و مسیریابی درخواست را مدیریت میکند در حالی که Let’s Encrypt گواهینامههای معتبر را فراهم میکند. استقرار CouchDB شما اکنون میتواند اسناد لاگ JSON را از طریق رابط RESTful خود بپذیرد، از تکثیر بلادرنگ در سراسر گرهها پشتیبانی کند و تجزیه و تحلیل پیشرفته لاگ را از طریق کوئریهای MapReduce و کنسول وب Fauxton فعال کند.