- Gitea
- Stap 1 - Maak een gebruiker en mappen aan
- Stap 2 - Download en installeer gitea binairy
- Stap 3 - Maak een database en gebruiker aan
- Stap 4 - Start gitea en trigger de installer
- Stap 5 - Plesk domein en proxy instellen
- Stap 6 - Poort 3000 uit de firewall regels halen
- Stap 7 - gitea als een service instellen
- Note - Waar gaan je git commits heen?
- Tip - Instellingen en aanpassen slogan
- Extra - Backup maken

Deze handleiding laat zien hoe je eenvoudig een eigen Git-platform (vergelijkbaar met GitHub) op je eigen server kunt hosten.
Het voorbeeld is gebaseerd op een installatie op een Dedicated Server (DS) of VPS met Plesk.
Er is bewust gekozen om geen Docker te gebruiken. Op deze manier blijft de installatie transparant en kun je eenvoudig back-ups maken via FTP en een SQL-dump, zonder afhankelijk te zijn van container-oplossingen.
Deze aanpak geeft je volledige controle over je data en configuratie, en is ideaal voor persoonlijk gebruik of kleine teams.
Daarnaast is de setup lichtgewicht, snel en eenvoudig te onderhouden, zonder onnodige complexiteit.
Gitea #

Website: https://about.gitea.com/
What is Gitea?
Gitea is a painless self-hosted all-in-one software development service, including Git hosting, code review, team collaboration, package registry and CI/CD. It’s open source under MIT license. It is designed to be lightweight, easy to use, and highly customizable, making it an ideal choice for both small teams and large organizations.
Stap 1 – Maak een gebruiker en mappen aan #
Maak user “git” aan met het volgende commando:
sudo adduser --system --group --home /home/git git
Maak de map aan en stel de rechten in met:
sudo mkdir -p /var/lib/gitea/{repositories,lfs,log}
sudo chown -R git:git /var/lib/gitea
voorbeeld output:
info: Selecteren van UID uit het bereik 100 - 999 ...
info: Selecteren GID tussen 100 en 999 ...
info: Toevoegen systeemgebruiker `git' (UID 115) ...
info: Toevoegen nieuwe groep `git' (GID 118) ...
info: Toevoegen nieuwe gebruiker `git' (UIDr 115) met groep `git' ...
info: Aanmaken persoonlijke map `/home/git' ...
Waarom die git user?
Gitea draait als service → en moet NIET als root draaien, daarom maak je een aparte gebruiker: git
Voordelen:
- veiliger (sandbox)
- juiste file-permissions
- standaard Gitea aanpak
Stap 2 – Download en installeer gitea binairy #
Gitea is een direct te gebruiken binairy, je kan de laatste versie downloaden met dit commando:
wget $(curl -s https://api.github.com/repos/go-gitea/gitea/releases/latest \
| grep browser_download_url \
| grep linux-amd64\" \
| cut -d '"' -f 4 \
| head -n 1)
Voorbeeld output:
--2026-03-28 19:20:01-- https://github.com/go-gitea/gitea/releases/download/v1.25.5/gitea-1.25.5-linux-amd64
Herleiden van github.com (github.com)... 140.82.121.4
Verbinding maken met github.com (github.com)|140.82.121.4|:443... verbonden.
HTTP-verzoek is verzonden; wachten op antwoord... 302 Found
...
...
HTTP-verzoek is verzonden; wachten op antwoord... 200 OK
Lengte: 114281728 (109M) [application/octet-stream]
Wordt opgeslagen als: ‘gitea-1.25.5-linux-amd64’
gitea-1.25.5-linux-amd64 100%[============================================================================>] 108,99M 11,2MB/s in 9,8s
2026-03-28 19:20:11 (11,2 MB/s) - '‘gitea-1.25.5-linux-amd64’' opgeslagen [114281728/114281728]
Zet de rechten goed en verplaats het bestand met het volgende:
chmod +x gitea-*-linux-amd64
sudo mv gitea-*-linux-amd64 /usr/local/bin/gitea
controleer of gitea gevonden wordt met het volgende:
gitea --version
Voorbeeld output:
gitea version 1.25.5 built with GNU Make 4.3, go1.25.8 : bindata, sqlite, sqlite_unlock_notify
Stap 3 – Maak een database en gebruiker aan #
MariaDB:
Database Type: MySQL
Host: 127.0.0.1:3306
User: gitea
Password: ***
Database Name: gitea
Zorg dat DB + user al bestaat:
CREATE DATABASE gitea;
CREATE USER 'gitea'@'localhost' IDENTIFIED BY 'password';
GRANT ALL PRIVILEGES ON gitea.* TO 'gitea'@'localhost';
FLUSH PRIVILEGES;
Of gewoon in PLESK zelf.
Stap 4 – Start gitea en trigger de installer #
Start gitea en trigger de installer met:
sudo -u git GITEA_WORK_DIR=/var/lib/gitea gitea web
Voorbeeld output:
2026/03/28 19:45:39 cmd/web.go:266:runWeb() [I] Starting Gitea on PID: 3861592
2026/03/28 19:45:39 cmd/web.go:114:showWebStartupMessage() [I] Gitea version: 1.25.5 built with GNU Make 4.3, go1.25.8 : bindata, sqlite, sqlite_unlock_notify
2026/03/28 19:45:39 cmd/web.go:115:showWebStartupMessage() [I] * RunMode: prod
2026/03/28 19:45:39 cmd/web.go:116:showWebStartupMessage() [I] * AppPath: /usr/local/bin/gitea
2026/03/28 19:45:39 cmd/web.go:117:showWebStartupMessage() [I] * WorkPath: /var/lib/gitea
2026/03/28 19:45:39 cmd/web.go:118:showWebStartupMessage() [I] * CustomPath: /var/lib/gitea/custom
2026/03/28 19:45:39 cmd/web.go:119:showWebStartupMessage() [I] * ConfigFile: /var/lib/gitea/custom/conf/app.ini
2026/03/28 19:45:39 cmd/web.go:120:showWebStartupMessage() [I] Prepare to run install page
2026/03/28 19:45:39 cmd/web.go:328:listen() [I] Listen: http://0.0.0.0:3000
2026/03/28 19:45:39 cmd/web.go:332:listen() [I] AppURL(ROOT_URL): http://localhost:3000/
2026/03/28 19:45:39 modules/graceful/server.go:50:NewServer() [I] Starting new Web server: tcp:0.0.0.0:3000 on PID: 3861592
Ga nu naar http://website.nl:3000, daar zie je nu de gitea installer:

Ps. krijg je een “ERR_CONNECTION_TIMED_OUT”, voeg dan tijdelijk poort 3000 toe aan de firewall instellingen in Plesk.
poort 3000 wordt alleen even gebruikt om gitea in te stellen!
De padnamen staan zo goed, gebruik je een subdomein? stel deze dan zo in:
Server domein = git.domoticx.net
Gitea base URL = https://git.domoticx.net/
Waarom geen :3000 als poort?, omdat we deze met reverse proxy (in Plesk ) gaan instellen!
Bij service instellingen
Lokale modus inschakelen: AAN laten
- blokkeert externe calls (veiliger)
- minder afhankelijkheden
Gravatar uitschakelen: AAN laten
- geen externe requests
- privacy
Zelfregistratie UIT: AAN laten
Dit betekent:
- alleen jij (admin) kan accounts maken
- niemand kan zich registreren
Wat je NIET nodig hebt
Federated avatars: UIT laten
Externe registratie: UIT laten
OpenID: UIT laten
Je kan verderop ook meteen je beheerderaccount instellen!
Na de installatie kom je in een nieuw browser venster:
http://website.nl:3000/user/login
Om daar in te loggen.
Stap 5 – Plesk domein en proxy instellen #
Het volgende is belangrijk om een handig subdomein te gebruiken zoals:
https://git.website.nl
in plaats van:
http://website.nl:3000
- Voeg in plesk een domein toe
- Ga naar de “Hosting en DNS” tab.
- Klik op Apache en Nginx
Vul hier extra configuratiegegevens in bij “Aanvullende opdrachten voor Apache” en vuil onderstaande in voor HTTP en bij HTTPS:
ProxyPreserveHost On
ProxyRequests off
AllowEncodedSlashes NoDecode
ProxyPass / http://127.0.0.1:3000/ nocanon
ProxyPassReverse / http://127.0.0.1:3000/
Dat ziet er zo uit:

Sla de instellingen op!
Wat doet NoDecode?
Normaal: %2F → / (Apache decodeert encoded slashes)
Met NoDecode laat apache zoals ze zijn
Waarom belangrijk voor Gitea?
Git paths kunnen bevatten: group%2Frepo.git
Zonder deze setting maakt apache er van “group/repo.git” en routing breekt!
Wat doet nocanon?
nocanon Zet URL canonicalization UIT
Normaal doet Apache:
- URL herschrijven
- encoding aanpassen
- dingen “netjes maken”
Met nocanon:
- URL wordt exact doorgegeven zoals de client hem stuurt
Waarom belangrijk voor Gitea?
Git gebruikt vaak: /repo.git/info/refs?service=git-upload-pack of encoded dingen zoals: %2F en %3A
Zonder nocanon kan Apache die aanpassen of verkeerd interpreteren, resultaat:
- git clone/push stuk
- rare 404 errors
De home screen kan je nu vinden op
http://git.website.nl

Stap 6 – Poort 3000 uit de firewall regels halen #
Verwijder je eventueel eerder aangebrachte poort instellingen voor poort 3000 in de Plesk firewall, deze poort is niet meer nodig (dat was alleen nodig om gitea te installeren).
Stap 7 – gitea als een service instellen #
De laatste stap is om gitea als een service op het systeem in te stellen, deze wordt dan ook automatisch gestart bij opnieuw opstaren van de server!
Maak een service bestand aan:
sudo nano /etc/systemd/system/gitea.service
Inhoud:
[Unit]
Description=Gitea
After=network.target
[Service]
User=git
Group=git
WorkingDirectory=/var/lib/gitea
ExecStart=/usr/local/bin/gitea web
Restart=always
RestartSec=2s
Environment=USER=git
Environment=HOME=/home/git
Environment=GITEA_WORK_DIR=/var/lib/gitea
# (optioneel maar netjes)
LimitNOFILE=65535
[Install]
WantedBy=multi-user.target
Zet de service aan en start deze met de volgende commando’s:
sudo systemctl daemon-reload
sudo systemctl enable gitea
sudo systemctl start gitea
Check het met:
systemctl status gitea
Note – Waar gaan je git commits heen? #
- NIET in de database
- Gewoon op de filesystem (zoals Git altijd werkt)
Locatie: /var/lib/gitea/repositories
Structuur:
/var/lib/gitea/repositories/
└── gebruiker/
└── repo.git/
├── objects/
├── refs/
├── HEAD
└── config
Wat zit daarin? Alles wat Git normaal opslaat:
- commits
- branches
- tags
- history
Dus:
- git clone …
- git push …
gaat rechtstreeks naar deze folder
Wat zit WEL in de database?
- users
- repositories (metadata)
- issues
- pull requests
- webhooks
- permissions
- settings
Tip – Instellingen en aanpassen slogan #
Het configuratie bestand van gitea staat nu hier:
/var/lib/gitea/custom/conf/app.ini
Om wat aan te passen, kan je nano gebruiken:
sudo nano /var/lib/gitea/custom/conf/app.ini
Daar kun je bijvoorbeeld bovenin aanpassen:
APP_NAME = Mijn eigen GIT
Extra – Backup maken #
Met onderstaand commando voorbeeld kan je eenvoudig backups in ZIP formaat maken van de bestanden en databases met behhulp van “gitea dump”, het laat de laatste 7 bestanden staan op de server en verwijderd oudere bestanden.
sudo -u git /usr/local/bin/gitea dump -c /var/lib/gitea/custom/conf/app.ini -f /pad/naar/backupfolder/gitea-backup-$(date +\%F_\%H-\%M-\%S).zip && ls -1t /pad/naar/backupfolder/gitea-backup-*.zip | tail -n +8 | xargs -r rm -f
Bovenstaand commando is geschikt voor een cronjob instelling in Plesk!

