کانفیگ سرویس گانیکارن برای یک پروژه django روی Centos

ایجاد سرویس در لینوکس با یک فایل کانفیگ با پسوند service امکان پذیره. الان میخوایم یه سرویس برای گانیکارن ایجاد کنیم.

۱- یه فایل به نام gunicorn.service در مسیر system به صورت زیر ایجاد می کنیم.

nano /etc/systemd/system/gunicorn.service

۲- فایل های سرویس شامل یک سری بلوک هستند که هر بلوک تنظیماتی رو برای سرویس ما نگه داری میکنه. اولین بلوک Unit هستش که بصورت زیر نوشته میشه:

[Unit]
Descripttion=gunicorn daemon
After=network.target

۳- بلوک دوم Service هستش که بصورت زیر نوشته میشه

[Service]
User=unixusername
Group=nginx
WorkingDirectory=/home/unixusername/django_application
ExecStart=/home/unixusername/django_application/venv/bin/gunicorn -b 127.0.0.1:9001 --access-logfile '-' -w 1 django_application.wsgi &

تو بلوک سرویس ابتدا کاربر و گروهی که قراره پروسس اپلیکیشن رو برای ما انجام بدن و دسترسی به دایرکتوری پروژه رو داشته باشه معرفی می کنیم.

بعد از اون برای پارامتر WorkingDirectory آدرس دایرکتوری پروژه رو به سرویس میدیم. این آدرس مسیری هستش که فایل mange.py توش قرار گرفته.

و در انتها برای پارامتر ExecStart کامند اجرای Gunicorn با پارامترهای مد نظر خودمون رو قرار میدیم. توضیحات پارامترهای Gunicorn رو می تونید از داکیومنتش بخونید.

۴- بلوک آخر Install هستش که به systemd لینوکس میگه که اگر سرویس enable شد چه زمانی باید اجرا بشه. که ما بهش میگم هر وقت multi-user بوت شد و در حال اجرا بود سرویس ما رو هم ران کن. دقیقا به صورت زیر بنویسید:

[Install]
WantedBy=multi-user.target

در نهایت فایل gunicorn.service بصورت زیر میشه:

[Unit]
Descripttion=gunicorn daemon
After=network.target

[Service]
User=unixusername
Group=nginx
WorkingDirectory=/home/unixusername/django_application
ExecStart=/home/unixusername/django_application/venv/bin/gunicorn -b 127.0.0.1:9001 --access-logfile '-' -w 1 django_application.wsgi &

[Install]
WantedBy=multi-user.target

۵- با دستو زیر می تونید سرویس رو استارت کنید

systemctl start gunicorn

۶- و با دستور زیر سرویس رو فعال کنید که بعد از ریبوت سیستم عامل بتونه مجدد اجرا بشه

systemctl enable gunicorn

۷- با استارت سرویس gunicron باید اپلیکیشن django روی پورت مورد نظر(تو این مثال 9001) در دسترس باشه. یکبار برای اطمینان از عملکرد صحیح سرویسی که ایجاد کردید سیستم عامل رو ریبوت کنید.

آپگرید PostgreSQL 9.2 به 9.6 در CentOS 7

نسخه ۹.۶ دیتابیس postgresql ویژگی های مفیدی داره که احتمالا مورد نیازتون باشه. آپگرید نسخه ۹.۲ به ۹.۶ کار پیچیده ایی نیست به شرطی که به درستی و طبق مراحل زیر پیش برید:

#0 : قبل از نصب

ابتدا چک کنید ورژن postgresql دقیقا چی هستش الان. با دستور زیر

psql --version

با یوزر postgres که به کل دیتابیس ها دسترسی داره لاگین کنید و یه بک آپ کامل از کل دیتای فعلی بگیرید و به یه جای امن منتقل کنید:

su - postgres
pg_dumpall > backup_all_postgresql_data.sql

وقتی که این آموزش رو دارم می نویسم آخرین نسخه ۹.۶ هستش. شما می تونید هر ورژنی بالاتر از ورژن ۹.۶ رو نصب کنید با همین روندی که در ادامه هست. فقط جاهایی که لازمه تو دستورات ورژن رو باید تغییر بدید.

#1 : مرحله اول نصب postgresql 9.6

# download last package from official postgresql website
cd /tmp
wget https://yum.postgresql.org/9.6/redhat/rhel-7.4-x86_64/pgdg-centos96-9.6-3.noarch.rpm

# install postgresql9.6
rpm -ivh pgdg-centos96-9.6-3.noarch.rpm
yum install postgresql96-server postgresql96-contrib

# initial 
/usr/pgsql-9.6/bin/postgresql96-setup initdb

mv /usr/bin/pg_ctl{,-orig}
echo '#!/bin/bash' > /usr/bin/pg_ctl
echo '"$0"-orig "${@/unix_socket_directory/unix_socket_directories}"' >> /usr/bin/pg_ctl
chmod +x /usr/bin/pg_ctl

#2 : آپدیت/ایمپورت دیتای موجود روی ورژن قبل به ورژن جدید

systemctl stop postgresql
# At this point both servers are stoped

# As Postgres user
su postgres
cd ~
/usr/pgsql-9.6/bin/pg_upgrade -v -b /usr/bin/ -B /usr/pgsql-9.6/bin/ -d /var/lib/pgsql/data/ -D /var/lib/pgsql/9.6/data/
exit

# Back to root user
 # Rollback pg_ctl
 mv -f /usr/bin/pg_ctl{-orig,}

#### APPLY OLD postgresql config params to postgresql-9.6 (pg_hba.conf, postgresql.conf) (manually), maybe use pgtune for postgresql.conf...

#3 : استارت سروریس جدید (نسخه ۹.۶) و غیر فعال کردن نسخه قبل

systemctl start postgresql-9.6
 systemctl enable postgresql-9.6
 systemctl disable postgresql

# temporary
 ln -s /usr/pgsql-9.6/bin/psql /usr/bin/psql --force
 ln -s /usr/pgsql-9.6/bin/pg_dump /usr/bin/pg_dump --force

# Postgres user
 su postgres
 cd ~
 ./analyze_new_cluster.sh
 exit

# back as root
 # remove old postgresql
 yum remove postgresql

# Export new path
 echo 'export PATH=$PATH:/usr/pgsql-9.6/bin' >> /etc/bashrc

در نهایت می تونید فولدر دیتای ورژن قبل رو به اختیار حذف کنید یا نگه دارید.