برنامه نویسی

بازیابی پایگاه داده Postgresql در یک کانتینر Docker

معرفی

در این پست وبلاگ، ما در مورد چالش رایجی که بسیاری از توسعه دهندگان در هنگام راه اندازی و پیکربندی پایگاه داده PostgreSQL در یک ظرف داکر با آن مواجه هستند، بحث خواهیم کرد. مشکلی که با آن مواجه شدیم، نیاز به ایجاد یک پایگاه داده PostgreSQL با پسوند PostGIS فعال و وارد کردن داده ها از یک فایل پشتیبان SQL موجود بود. این فرآیند شامل یک سری مراحل است، مانند مقداردهی اولیه پایگاه داده، راه اندازی سرور PostgreSQL، ایجاد پایگاه داده، فعال کردن پسوند PostGIS و وارد کردن داده ها از فایل پشتیبان.

برای مقابله با این چالش، از Docker استفاده می‌کنیم، پلتفرمی که به ما امکان می‌دهد به راحتی برنامه‌ها را در کانتینر بسازیم، ارسال کنیم و اجرا کنیم. کانتینرها یک محیط ایزوله برای اجرای برنامه‌ها فراهم می‌کنند که به ساده‌سازی فرآیند توسعه و استقرار کمک می‌کند. در مورد ما، یک Docker Container با PostgreSQL، یک سیستم مدیریت پایگاه داده رابطه‌ای منبع باز قدرتمند و پرکاربرد ایجاد می‌کنیم. علاوه بر این، ما از پسوند PostGIS استفاده خواهیم کرد، که پشتیبانی از اشیاء جغرافیایی را اضافه می کند و امکان اجرای پرس و جوهای مکان را در SQL فراهم می کند.

در این پست وبلاگ، شما را در کل فرآیند ایجاد یک ظرف Docker با یک پایگاه داده PostgreSQL و پسوند PostGIS فعال کرده ایم. همچنین نحوه وارد کردن داده ها از یک فایل پشتیبان SQL موجود به پایگاه داده جدید ایجاد شده را نشان خواهیم داد. این آموزش به عنوان یک راهنمای جامع برای توسعه دهندگانی است که نیاز به راه اندازی پایگاه داده PostgreSQL با پسوند PostGIS در یک ظرف Docker و وارد کردن داده ها از یک فایل پشتیبان دارند.

راه اندازی کانتینر PostgreSQL Docker

در این بخش، شما را در فرآیند راه‌اندازی یک ظرف PostgreSQL Docker با فعال کردن پسوند PostGIS راهنمایی می‌کنیم. ما با ایجاد یک Dockerfile سفارشی شروع می کنیم، که دستورالعمل ها و تنظیمات لازم را برای ظرف ما تعریف می کند.

در اینجا Dockerfile ما برای ایجاد کانتینر PostgreSQL خود استفاده کردیم:

# Base image with PostgreSQL and PostGIS
FROM postgis/postgis

# Set up environment variables
ENV PGDATA=/var/pgdata
ENV POSTGRES_USER=postgres
ENV POSTGRES_PASSWORD=mysecretpassword
ENV POSTGRES_DB=mypostgresDB

# Create a directory to store PostgreSQL data and logs
RUN mkdir -p ${PGDATA} /tmp /var/log/postgresql && chown -R postgres:postgres ${PGDATA} /tmp /var/log/postgresql

WORKDIR /data

# Expose the PostgreSQL port
EXPOSE 5432

# Set the user to run the container
USER postgres

# Copy the entrypoint script to the container
COPY entrypoint.sh /entrypoint.sh
RUN chmod +x /entrypoint.sh

# Run the entrypoint script
CMD ["/entrypoint.sh"]

وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

در این Dockerfile، ما با تصویر پایه postgis/postgis شروع می کنیم، که از قبل شامل PostgreSQL و پسوند PostGIS است. سپس متغیرهای محیطی را برای دایرکتوری داده PostgreSQL، کاربر پیش‌فرض PostgreSQL، رمز عبور و نام پایگاه داده تنظیم می‌کنیم. این متغیرها بعداً در اسکریپت نقطه ورود ما استفاده خواهند شد.

ما دایرکتوری هایی را برای ذخیره داده ها و گزارش های PostgreSQL ایجاد می کنیم و اطمینان می دهیم که کاربر postgres مجوزهای لازم برای دسترسی به این فهرست ها را دارد. پورت PostgreSQL (5432) برای اجازه اتصال از خارج از کانتینر در معرض دید قرار گرفته است.

در نهایت، اسکریپت enterpoint.sh سفارشی خود را در کانتینر کپی می کنیم و آن را به عنوان دستوری تنظیم می کنیم که هنگام شروع کانتینر اجرا شود. اسکریپت entrypoint مسئول اولیه سازی دایرکتوری داده PostgreSQL، راه اندازی سرور PostgreSQL، ایجاد پایگاه داده با پسوند PostGIS و وارد کردن داده ها از فایل پشتیبان SQL است.

با استفاده از این Dockerfile، می‌توانیم یک کانتینر PostgreSQL سفارشی با پسوند PostGIS فعال، متناسب با نیازهای خاص خود ایجاد کنیم. این تنظیمات تضمین می کند که پایگاه داده ما پیکربندی شده و آماده استفاده است، به محض اینکه کانتینر شروع به کار می کند، با داده های لازم وارد شده است.

ایجاد اسکریپت enterpoint.sh

اسکریپت enterpoint.sh بخشی ضروری از راه‌اندازی کانتینر PostgreSQL Docker ما است، زیرا تنظیمات اولیه و پیکربندی پایگاه داده را انجام می‌دهد. در این بخش، شما را با محتویات اسکریپت enterpoint.sh آشنا می‌کنیم و هر مرحله را به تفصیل توضیح می‌دهیم.

در اینجا محتوای اسکریپت enterpoint.sh آمده است:

#!/bin/bash

# Initialize the PostgreSQL data directory
initdb -D ${PGDATA}

# Start PostgreSQL in the background
pg_ctl -D ${PGDATA} -l /var/log/postgresql/logfile start

# Wait for PostgreSQL to start
wait_postgresql() {
  while ! pg_isready -q; do
    echo "Waiting for PostgreSQL to start..."
    sleep 1
  done
}
wait_postgresql

# Create the Postgres database named "mypostgresDB" with the "template_postgis" template
createdb mypostgresDB --template=template_postgis

# Extract the schema and data from the backup file
pg_restore -f /tmp/schema_new.sql -s /data/mypostgresDB-backup.sql 2>&1 | tee /var/log/postgresql/schema_extract.log
pg_restore -f /tmp/new_data.sql -a /data/mypostgresDB-backup.sql 2>&1 | tee /var/log/postgresql/data_extract.log

# Import the schema and data into the new database
psql --dbname=mypostgresDB -f /tmp/schema_new.sql 2>&1 | tee /var/log/postgresql/schema_import.log
psql --dbname=mypostgresDB -f /tmp/new_data.sql 2>&1 | tee /var/log/postgresql/data_import.log

# Keep PostgreSQL running
tail -f /var/log/postgresql/logfile

وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

  1. دایرکتوری داده PostgreSQL را راه اندازی کنید: دستور initdb دایرکتوری داده ها را برای سرور PostgreSQL راه اندازی می کند و فایل ها و پوشه های لازم را تنظیم می کند.

  2. PostgreSQL را در پس زمینه شروع کنید: دستور pg_ctl سرور PostgreSQL را در پس‌زمینه راه‌اندازی می‌کند و لاگ‌ها در فایل لاگ مشخص شده نوشته می‌شوند.

  3. منتظر بمانید تا PostgreSQL شروع شود: تابع wait_postgresql بررسی می کند که آیا سرور PostgreSQL آماده پذیرش اتصالات است یا خیر. از دستور pg_isready برای استعلام وضعیت سرور استفاده می کند و منتظر می ماند تا سرور آماده شود.

  4. پایگاه داده PostgreSQL را ایجاد کنید: دستور createb یک پایگاه داده PostgreSQL جدید به نام mypostgresDB با استفاده از قالب template_postgis ایجاد می کند که شامل پسوند PostGIS است.

  5. طرح و داده ها را از فایل پشتیبان استخراج کنید: دستور pg_restore برای استخراج طرح و داده ها از فایل پشتیبان SQL استفاده می شود. ما دو فایل جداگانه ایجاد می کنیم: schema_new.sql برای schema و new_data.sql برای داده ها. گزارش‌های فرآیند استخراج در /var/log/postgresql/ نوشته می‌شوند.

  6. طرحواره و داده ها را به پایگاه داده جدید وارد کنید: دستور psql طرحواره و داده ها را از فایل های استخراج شده به پایگاه داده جدید mypostgresDB وارد می کند. گزارش‌های فرآیند واردات در /var/log/postgresql/ نوشته می‌شوند.

  7. PostgreSQL را در حال اجرا نگه دارید: دستور tail -f تضمین می کند که سرور PostgreSQL با نظارت مستمر بر فایل لاگ در حال اجرا است.

با استفاده از این اسکریپت enterpoint.sh، اطمینان حاصل می کنیم که ظرف PostgreSQL ما به طور کامل پیکربندی شده و آماده استفاده در هنگام شروع است، با داده های لازم وارد شده از فایل پشتیبان.

اجرای کانتینر Docker و نصب فایل پشتیبان

در این بخش، مراحل اجرای کانتینر Docker و مونت فایل پشتیبان را در طول فرآیند پوشش خواهیم داد. این اجازه می دهد تا اسکریپت enterpoint.sh به فایل پشتیبان دسترسی پیدا کند و عملیات مورد نیاز را برای بازیابی طرح و داده های پایگاه داده انجام دهد.

ابتدا با استفاده از Dockerfile ایجاد شده قبلی، تصویر Docker را بسازید. به دایرکتوری حاوی Dockerfile بروید و دستور زیر را اجرا کنید:

docker build -t postgres-postgis .

وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

این دستور یک تصویر داکر جدید با تگ postgres-postgis می سازد.

فایل پشتیبان SQL را دانلود کنید: قبل از اجرای کانتینر Docker، مطمئن شوید که فایل پشتیبان SQL را از سطل S3 در سیستم محلی خود دانلود کرده اید. این فایل به عنوان یک حجم در ظرف Docker برای بازیابی پایگاه داده نصب می شود.

ظرف Docker را اجرا کنید: برای اجرای کانتینر Docker و نصب فایل پشتیبان، از دستور زیر استفاده کنید:

docker run -d --name my-postgres -p 5432:5432 -v /path/to/your/local/backupfile.sql:/data/mypostgresDB-backup.sql postgres-postgis

وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

مسیر فایل پشتیبان دانلود شده SQL را در سیستم محلی خود جایگزین /path/to/your/local/backupfile.sql کنید. این دستور کارهای زیر را انجام می دهد:

  • ظرف Docker را در حالت جدا شده (-d) با نام my-postgres اجرا می کند.
  • پورت محلی 5432 را به درگاه 5432 کانتینر (-ص 5432:5432) نگاشت می‌کند و به شما امکان می‌دهد به سرور PostgreSQL در حال اجرا در داخل کانتینر متصل شوید.
  • فایل پشتیبان را به صورت حجم در کانتینر در /data/mypostgresDB.sql قرار می دهد. این اجازه می دهد تا اسکریپت enterpoint.sh به فایل پشتیبان در طول راه اندازی ظرف دسترسی پیدا کند.

هنگامی که کانتینر راه اندازی و اجرا می شود، اسکریپت enterpoint.sh سرور PostgreSQL را مقداردهی اولیه می کند، پایگاه داده را ایجاد می کند، طرح و داده ها را از فایل پشتیبان استخراج می کند و آنها را به پایگاه داده جدید وارد می کند. سپس می توانید با استفاده از سرویس گیرنده دلخواه خود به سرور PostgreSQL متصل شوید و بررسی کنید که پایگاه داده به درستی بازیابی شده است.

با دنبال کردن این مراحل، یک کانتینر Docker برای یک سرور PostgreSQL با پسوند PostGIS با موفقیت ایجاد کردید و یک پایگاه داده را با استفاده از یک فایل پشتیبان SQL بازیابی کردید.

نتیجه

در این پست وبلاگ، نحوه راه اندازی یک ظرف PostgreSQL Docker با پسوند PostGIS و بازیابی پایگاه داده با استفاده از یک فایل پشتیبان SQL را نشان داده ایم. ما در طول فرآیند ایجاد یک Dockerfile برای تعریف کانتینر، پیاده‌سازی یک اسکریپت enterpoint.sh برای مدیریت فرآیند بازیابی پایگاه داده و اجرای کانتینر Docker در حین نصب فایل پشتیبان، قدم زدیم.

با استفاده از Docker و PostgreSQL، ما یک راه حل به راحتی قابل استقرار و مقیاس پذیر برای مدیریت و بازیابی پایگاه داده های مکانی ایجاد کرده ایم. این رویکرد نه تنها فرآیند بازیابی پایگاه داده را ساده می کند، بلکه یک محیط سازگار را برای سرور پایگاه داده شما در مراحل مختلف توسعه، آزمایش و تولید تضمین می کند.

با این دانش، اکنون می توانید با اطمینان از Docker و PostgreSQL برای مدیریت پایگاه داده های مکانی خود استفاده کنید و در صورت نیاز آنها را از فایل های پشتیبان بازیابی کنید.

نوشته های مشابه

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

دکمه بازگشت به بالا