انتقال سرور gitea

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 میشیم و مراحل پایین رو طی میکنیم.نصب بودن 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.targetAfter=network.target#### Don't forget to add the database service requirements#####Requires=mysql.service#Requires=mariadb.serviceRequires=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=65535RestartSec=2sType=simpleUser=gitGroup=gitWorkingDirectory=/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=giteaExecStart=/usr/local/bin/gitea web --config /etc/gitea/app.iniRestart=alwaysEnvironment=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 توی همین ویرگول پیداش کنید.سعی کردم تا جایی که میشه کامل و مبتدی توضیح بدم. اگه سوالی بود توی قسمت نظرات بپرسید حتما جواب میدم ;)موفق باشید.