آیدین نصراله پور
آیدین نصراله پور
خواندن ۴ دقیقه·۳ سال پیش

انتقال سرور gitea

Gitea - Git with a cup of teat
Gitea - Git with a cup of teat

راحت ترین و بی دردسر ترین راه ایجاد git سرور شخصی، نصب gitea هست. از مزایای gitea میشه به سبک بودن، کراس پلت فرم بودن، نصب ساده و وجود افزونه gitea برای jenkins اشاره کرد. توی ویرگول چندین مقاله دیدم در رابطه با نصب gitea و به نظرم لازم نبود که برای نصب هم مطلب بنویسم(هر چند خیلی از مراحلی که توضیح میدم مشابهه).

جیزی که قراره توی این مطلب توضیح بدم نحوه انتقال سرور gitea و مهاجرت داده های اون هست. البته این کار شاید خیلی متداول نباشه ولی خوب برای من پیش اومد و میخوام تجربشو با شما به اشتراک بذارم.

پیش فرض ها :

1.سرور مبدا و مقصد از سیستم عامل لینوکس ( cent os) استفاده میکنند.

2.برای راه اندازی gitea از دیتابیس postgresql استفاده شده است.

3. همه کارها رو با یوزر root انجام میدیم

** از این به بعد به سرور مبدا A و به سرور مقصد B میگیم.**

اول از همه باید B رو آماده انتقال کنیم. این مراحل مشابه مراحل نصب میباشد. پس از طریق ssh وارد B میشیم و مراحل پایین رو طی میکنیم.

  1. نصب بودن git روی B رو بررسی میکنیم :
git --version

۱-۱. در صورتی که git نصب نبود، نصبش میکنیم :

yum install git

۲. یک یوزر جدید به نام git برای اجرا کننده gitea ایجاد میکنیم

useradd git passwd git

نکته ۱ : در صورتی که میخواهید اسم یوزری که اینجا تعریف کردید با یوزری که قبلا توی A داشتید متفاوت باشه پس از انجام مرحله ۳ انتقال، داخل فایل

/etc/gitea/app.ini

مقدار RUN_USER رو با username دلخواه جایگذاری کنید.

۳. دایرکتوری های مورد نیاز رو ایجاد میکنیم

mkdir -p /var/lib/gitea/{custom,data,log} chown -R git:git /var/lib/gitea/ chmod -R 750 /var/lib/gitea/ mkdir /etc/gitea chown root:git /etc/gitea chmod 770 /etc/gitea

۴.داخل /opt یه فولدر به نام gitea ایجاد میکنیم و فایل باینری رو دانلود میکنیم و فایل رو قابل جرا میکنیم :

cd /opt mkdir gitea cd gitea wget -O gitea https://dl.gitea.io/gitea/1.14.6/gitea-1.14.6-linux-amd64 chmod +x gitea

و در نهایت باینری دانلود شده رو در مسیر زیر کپی میکنیم

cp /opt/gitea/gitea /usr/local/bin/gitea

۵. دیتابیسمون (postgresql) رو روی B نصب میکنیم و سرویسش رو فعال میکنیم :

# Install the repository RPM: dnf install -y https://download.postgresql.org/pub/repos/yum/reporpms/EL-8-x86_64/pgdg-redhat-repo-latest.noarch.rpm # Disable the built-in PostgreSQL module: dnf -qy module disable postgresql # Install PostgreSQL: dnf install -y postgresql13-server # Optionally initialize the database and enable automatic start: /usr/pgsql-13/bin/postgresql-13-setup initdb systemctl enable postgresql-13 systemctl start postgresql-13

۶. سرویس gitea رو از طریق دستور زیر ایجاد میکنیم

vi /etc/systemd/system/gitea.service

و خطوط پایین رو داخل فایل کپی و ذخیره میکنیم

[Unit]
Description=Gitea (Git with a cup of tea)
After=syslog.target
After=network.target
###
# Don't forget to add the database service requirements
###
#
#Requires=mysql.service
#Requires=mariadb.service
Requires=postgresql-13.service
#Requires=memcached.service
#Requires=redis.service
#
###
# If using socket activation for main http/s
###
#
#After=gitea.main.socket
#Requires=gitea.main.socket
#
###
# (You can also provide gitea an http fallback and/or ssh socket too)
#
# An example of /etc/systemd/system/gitea.main.socket
###
##
## [Unit]
## Description=Gitea Web Socket
## PartOf=gitea.service
##
## [Socket]
## Service=gitea.service
## ListenStream=<some_port>
## NoDelay=true
##
## [Install]
## WantedBy=sockets.target
##
###
[Service]
# Modify these two values and uncomment them if you have
# repos with lots of files and get an HTTP error 500 because
# of that
###
#LimitMEMLOCK=infinity
#LimitNOFILE=65535
RestartSec=2s
Type=simple
User=git
Group=git
WorkingDirectory=/var/lib/gitea/
# If using Unix socket: tells systemd to create the /run/gitea folder, which will contain the gitea.sock file
# (manually creating /run/gitea doesn't work, because it would not persist across reboots)
#RuntimeDirectory=gitea
ExecStart=/usr/local/bin/gitea web --config /etc/gitea/app.ini
Restart=always
Environment=USER=git HOME=/home/git GITEA_WORK_DIR=/var/lib/gitea
# If you want to bind Gitea to a port below 1024, uncomment
# the two values below, or use socket activation to pass Gitea its ports as above
###
#CapabilityBoundingSet=CAP_NET_BIND_SERVICE
#AmbientCapabilities=CAP_NET_BIND_SERVICE
###
[Install]
WantedBy=multi-user.target

و در نهایت

systemctl enable gitea

خوب تا اینجا تنظیمات اولیه B رو انجام دادیم (مراحل مشابه با مراحل نصب بود) و با دستور زیر میتونیم gitea رو اجرا کنیم :

systemctl enable gitea

اما میرسیم به اصل ماجرا یعنی انتقال اطلاعات A به B

برای اینکه کلیه اطلاعاتی که روی A داشتیم شامل یوزر ها دسترسی ها و ریپازیتوری ها رو به B منتقل کنیم باید سه کار انجام بدیم :

۱.انتقال دیتابیس

برای اینکار وارد A میشیم و از دیتابیس A بک آپ میگیریم :

pg_dumpall -U postgres > db.sql

خوب حالا باید فایل db.sql رو به B منتقل کنیم پس از طریق ssh وارد B میشیم و با کامند scp فایل بک آپ رو به B منتقل میکنیم :

scp root@A:/path/to/backup/db.sql /opt

دستور بالا میگه فایل بک رو از آدرس /path/to/backup/db.sql روی سرور A (به جای A از آی پی استفاده کنید) کپی کن و توی B در مسیر /opt قرار بده. بعد از وارد کردن دستور بالا از شما پسورد یوزر root در A خواسته میشود و بعد از وارد کردن پسورد فرایند انتقال آغاز میشود.

بعد از اتمام فرایند انتقال با استفاده از دستور زیر db.sql را وارد دیتابیس B میکنیم :

sql -U postgres -f /opt/db.sql postgres

۲.انتقال ریپازیتوری هایی که روی A ایجاد کرده بودیم

برای اینکار مجددا وارد A lمیشیم و به مسیر زیر که محل ذخیره ریپازیتوری ها بوده می رویم :

cd /home/git

سپس فولدر gitea-repositories را زیپ میکنیم

zip -r rep.zip gitea-repositories/

دوباره وارد B میشیم و برای انتقال ریپازیتوری ها مجدد از دستور scp استفاده میکنیم :

scp root@A:/home/git/rep.zip /home/git

سپس پسورد یوزر root در A را وارد میکنیم و پس از اتمام انتقال فایل rep.zip را از حالت فشرده خارج میکنیم

unzip /home/git/rep.zip

۳.میرسیم به مرجله پایانی یعنی کپی کردن فایل تنظیمات. دستور زیر رو توی B اجرا میکنیم تا تنظیماتمون رو از A به B منتقل کنیم

scp root@A:/etc/gitea/app.ini /etc/gitea/

و تامام...!

systemctl enable gitea

اجرای دستور بالا توی B اپلیکیشن gitea رو اجرا میکنه و از طریق پورتی که توی فایل تنظیمات (app.ini)قبلا تنظیم کرده بودیم میتونیم به وب اپیکیشن دسترسی داشته باشیم.

نکته : اگه از دیتابیس دیگه ای استفاده میکنید همه مراحل مشابه هستن فقط قسمت نصب و بک اپ/ری استور دیتابیس متفاوته و البته داخل فایل سرویس هم باید خط زیر رو کامنت کنید

Requires=postgresql-13.service

و به جاش سرویس مربوط به دیتابیس خودتون رو بذارید

فقط میمونه باز کردن پورت gitea روی B و احتمالا تنظیمات nginx که میتونید توی پست های مرتبط با نصب gitea توی همین ویرگول پیداش کنید.

سعی کردم تا جایی که میشه کامل و مبتدی توضیح بدم. اگه سوالی بود توی قسمت نظرات بپرسید حتما جواب میدم ;)
موفق باشید.

لینوکسgitبرنامه نویسی
برنامه نویس جاوا و علاقه مند به دنیای متن باز
شاید از این پست‌ها خوشتان بیاید