راحت ترین و بی دردسر ترین راه ایجاد git سرور شخصی، نصب gitea هست. از مزایای gitea میشه به سبک بودن، کراس پلت فرم بودن، نصب ساده و وجود افزونه gitea برای jenkins اشاره کرد. توی ویرگول چندین مقاله دیدم در رابطه با نصب gitea و به نظرم لازم نبود که برای نصب هم مطلب بنویسم(هر چند خیلی از مراحلی که توضیح میدم مشابهه).
جیزی که قراره توی این مطلب توضیح بدم نحوه انتقال سرور gitea و مهاجرت داده های اون هست. البته این کار شاید خیلی متداول نباشه ولی خوب برای من پیش اومد و میخوام تجربشو با شما به اشتراک بذارم.
پیش فرض ها :
1.سرور مبدا و مقصد از سیستم عامل لینوکس ( cent os) استفاده میکنند.
2.برای راه اندازی gitea از دیتابیس postgresql استفاده شده است.
3. همه کارها رو با یوزر root انجام میدیم
** از این به بعد به سرور مبدا A و به سرور مقصد B میگیم.**
اول از همه باید B رو آماده انتقال کنیم. این مراحل مشابه مراحل نصب میباشد. پس از طریق ssh وارد 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 توی همین ویرگول پیداش کنید.
سعی کردم تا جایی که میشه کامل و مبتدی توضیح بدم. اگه سوالی بود توی قسمت نظرات بپرسید حتما جواب میدم ;)
موفق باشید.