Pe această pagină
Salut tuturor!
Scriu acest articol ca să îți arăt rapid cum să self-hostezi Forgejo, forge-ul de Git, și cum să faci operațiunile obișnuite de întreținere.
Introducere
Forgejo este un forge de Git ușor, privat și ușor de operat. Îl poți privi ca pe propria ta instanță GitHub private, unde controlezi 100% din date.
Ca să self-hostezi Forgejo, singura dependență de care ai nevoie este Forgejo! Este un binar Golang independent care funcționează pur și simplu. Vine implicit cu SQLite și suportă și alte baze de date, precum MariaDB, MySQL și PostgreSQL.
Dacă ai mai puțin de 100 de utilizatori, cred că SQLite este suficient.
O problemă a Forgejo este lipsa interacțiunii între utilizatorii din instanțe diferite. Dacă tu găzduiești Forgejo, iar vecinul tău își găzduiește pe a lui, ca să îi placi repository-urile sau să îl urmărești, trebuie să îți creezi un cont pe instanța lui. Această problemă este rezolvată în prezent prin federare: 😱:
https://forgejo.org/2023-01-10-answering-forgejo-federation-questions/
În curând vei putea să federezi instanța ta cu alte instanțe, precum ale vecinilor, și asta îți va permite să vezi conturile, activitățile publice ale celorlalți și să interacționezi cu ei, toate din propria ta instanță.
Protocolul de federare se numește ForgeFed și este descris aici: https://forgefed.org/.
Self Hosting
Am creat un Ansible Playbook ca să automatizez procesul de self-hosting. Îl poți descărca de pe forge-ul meu:
Playbook-ul funcționează doar pe distribuții bazate pe RHEL, precum: Fedora, RockyLinux, CentOS, AlmaLinux, OpenSuse Thumbleweed, OpenSuse Leap.
Ca să rulezi playbook-ul trebuie să ai Ansible instalat; fie îl instalezi cu make install, fie rulezi
manual comenzile din Makefile.
install: sudo dnf install ansible ansible-galaxy collection install community.general ansible-galaxy collection install containers.podman ansible-galaxy collection install ansible.posixApoi actualizează inventory.ini cu adresa IP a serverului tău și cu utilizatorul sudo. Serverul pe care vei instala Forgejo. Ansible se va conecta la el prin SSH și va instala toate pachetele necesare.
# inventory.ini[nuculabs]host.example.com ansible_user=ansible[local]localhostUrmătorul pas: editează fișierul variables.yaml cu valorile tale:
# variables.yaml# Nu aș expune Forgejo direct la internet.# Dacă setup_firewall este true, vor fi deschise porturile în firewall-ul sistemului.setup_firewall: falseforgejo: # Aceasta este adresa de bază a instanței tale. base_url: forgejo.example.com # Portul HTTP al instanței tale, folosit pentru UI, API și clonare prin HTTP. http_port: 3000 # Portul SSH al instanței tale, folosit pentru clonare prin SSH. ssh_port: 3001 # Imaginea containerului. La momentul scrierii acestui articol, versiunea 12 este cea mai recentă. container_image: "codeberg.org/forgejo/forgejo:12" # Directorul de bază în care vor fi stocate datele Forgejo, al meu este în rădăcina /forgejo. base_directory: "/forgejo"Odată ce fișierul este editat, poți executa make run sau ansible-playbook -i inventory.ini playbook.yaml --ask-become-pass.
Ansible îți va cere acum parola sudo a utilizatorului ansible_user, apoi va începe să descarce și să configureze dependențele necesare.
Forgejo va rula ca un container quadlet gestionat de Systemd.
Configurarea Nginx
Acum trebuie să îl expui la internet; îți recomand să configurezi un reverse proxy Nginx în fața lui.
Sistemul tău are probabil nginx instalat; tot ce trebuie să faci este să creezi un fișier în directorul sites-available cu conținutul de mai jos, apoi să îl legi în directorul sites-enabled. Te rog să nu uiți să actualizezi domeniul.
# cat /etc/nginx/sites-available/forge# sudo ln -s /etc/nginx/sites-available/forge/etc/nginx/sites-enabled/server { server_name forge.nuculabs.dev; client_max_body_size 30M; location / { proxy_pass http://localhost:3000; # Redirecționează cererile către localhost:3000 proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; } # Opțional: pagini de eroare personalizate error_page 500 502 503 504 /50x.html; location = /50x.html { root /usr/share/nginx/html; }}server { if ($host = forge.nuculabs.dev) { return 301 https://$host$request_uri; } # managed by Certbot listen 80; server_name forge.nuculabs.dev;}Apoi rulează certbot --nginx și selectează forge.nuculabs.dev ca domeniu, ca să generezi certificatele HTTPS.
Configurare
După instalarea cu succes, va trebui să actualizezi fișierul app.ini aflat în
/forgejo/gitea/conf.
Aș configura câteva setări ale serverului, aș dezactiva înregistrarea utilizatorilor și setările de mail:
#api.iniAPP_NAME = NucuLabsRUN_MODE = prodAPP_SLOGAN = Programming, Cloud and Engineering!RUN_USER = gitWORK_PATH = /data/gitea[server]APP_DATA_PATH = /data/giteaDOMAIN = forge.nuculabs.devSSH_DOMAIN = forge.nuculabs.devROOT_URL = https://forge.nuculabs.dev/# ....[service]DISABLE_REGISTRATION = true# ...# ...[mailer]ENABLED = trueSMTP_ADDR = xxxSMTP_PORT = 587FROM = [email protected]USER = xxxPASSWD = xxx# ...Poți lăsa celelalte valori implicite, iar dacă vrei să personalizezi mai mult, Configuration Cheat Sheet explică toate opțiunile de configurare disponibile:
Ca Forgejo să preia modificările fișierelor, este important să îl repornești cu systemctl restart forgejo.
Dacă plănuiești să adaugi o bază de date la Forgejo, manualul are instrucțiuni bune și clare despre cum să o pregătești:
Poți, de asemenea, să protejezi instanța Forgejo cu Anubis, ca să descurajezi botii să o acceseze și s-o indexeze. Am scris un articol despre asta aici:
Întreținere
Acestea sunt operațiunile obișnuite de întreținere pe care le fac pe serverul meu.
Actualizarea versiunilor
Actualizarea versiunilor este foarte simplă. Conectează-te prin SSH la serverul de găzduire și trage (pull) cea mai recentă imagine Forgejo:
podman pull codeberg.org/forgejo/forgejo:12.
Editează fișierul systemd /etc/containers/systemd/forgejo.container și actualizează imaginea:
[Unit]Description=forgejo[Container]ContainerName=forgejoImage=codeberg.org/forgejo/forgejo:12#...Reîncarcă systemd și repornește Forgejo:
sudo systemctl daemon-reloadsystemctl restart forgejoModificarea utilizatorilor prin CLI
Dacă ai deja un cont de administrator, poți crea utilizatori noi din interfața de administrare a site-ului. Dacă nu, sau dacă îți pierzi parola, îți poți modifica utilizatorul sau îi poți reseta parola cu ajutorul forgejo-cli.
Află numele sau ID-ul containerului instanței Forgejo.
podman ps48f58cc872f0 codeberg.org/forgejo/forgejo:12 /usr/bin/s6-svsca... 4 minutes ago Up 4 minutes 0.0.0.0:3000->3000/tcp, forgejoDeschide un shell în container: podman exec -it forgejo bin/bash și treci la utilizatorul git cu su git.
Execută forgejo admin --help ca să vezi comenzile disponibile:
# $ forgejo admin --helpNAME: forgejo admin - Perform common administrative operationsUSAGE: forgejo admin [command [command options]] COMMANDS: user Modify users repo-sync-releases Synchronize repository releases with tags regenerate Regenerate specific files auth Modify external auth providers sendmail Send a message to all usersIar pentru comenzile legate de utilizatori:
# $ forgejo admin user --helpNAME: forgejo admin user - Modify usersUSAGE: forgejo admin user [command [command options]] COMMANDS: create Create a new user in database list List users change-password Change a user's password delete Delete specific user by id, name or email generate-access-token Generate an access token for a specific user must-change-password Set the must change password flag for the provided users or all users reset-mfa Remove all two-factor authentication configurations for a userConcluzie
Forgejo este ușor de self-hostat, are cerințe reduse de resurse, iar povara întreținerii este foarte mică. Posibilitatea de a alege stocarea SQLite este excelentă pentru instalări mici și medii și elimină nevoia de a instala și întreține o bază de date suplimentară.
Sper că ți-a plăcut acest articol! Mulțumesc că l-ai citit și ne vedem în următorul! 😄