Dit document beschrijft stap voor stap hoe Gitea op git.arp-ict.nl is gebruikt om een eerste repository op te zetten voor versiebeheer, hoe de lokale Git-repository op de Mac is gekoppeld, hoe bestanden zijn toegevoegd, gecommit en gepusht, en welke keuzes daarbij zijn gemaakt.
De handleiding is gebaseerd op de uitgevoerde stappen in deze sessie en is geschreven als naslagdocument voor hergebruik.
Situatie in dit document:
https://git.arp-ict.nldannysynology-configcertificates/renew-cert-synology.shdocs/synology-certificaat-renew-nas-arp-ict-nl.mdGitea is in de praktijk een eigen Git-platform, vergelijkbaar met GitHub of GitLab, maar dan zelf gehost. Het is de webinterface bovenop Git.
Belangrijk onderscheid:
De normale werkwijze is:
add, commit en pushVoor dagelijks gebruik betekent dat dus:
Voor de eerste opzet is gekozen voor een repository:
synology-config
Het doel van deze repository is het bewaren van:
De eerste inhoud bestaat uit:
certificates/renew-cert-synology.sh
docs/synology-certificaat-renew-nas-arp-ict-nl.md
Dat is een logische eerste repo omdat:
De Gitea-omgeving draait op:
https://git.arp-ict.nl
Opmerking: in het certificaat voor jouw omgeving zit het subdomein git.arp-ict.nl als SAN opgenomen. Daarom is dat het juiste domein voor Gitea in jouw setup.
Tijdens deze sessie was het wachtwoord eerst vergeten en was er geen e-mailconfiguratie opgenomen voor reset. Dat is later handmatig opgelost. Daarna kon opnieuw worden ingelogd.
De vervolgstappen zijn uitgevoerd nadat toegang tot Gitea weer beschikbaar was.
Een SSH key in Gitea is handig zodat je later met SSH kunt werken in plaats van alleen met HTTPS. In deze sessie is gecontroleerd of er al een publieke sleutel op de Mac aanwezig was.
Op de Mac:
ls -la ~/.ssh
Daarna is de publieke sleutel bekeken:
cat ~/.ssh/*.pub
Uitkomst in deze sessie:
ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIEcL1+1K0yA18DH8805wpQKIgeYP0InsddxLcU//0/9f d.arpie@gmail.com
Er bleek in Gitea al een key voor de Mac aanwezig te zijn. Daarom hoefde er geen nieuwe SSH key te worden toegevoegd.
Opmerking: de eerste clone is in deze sessie toch via HTTPS gedaan, niet via SSH. Dat is prima voor een eerste opzet.
Na het inloggen is vanaf het dashboard een nieuwe repository aangemaakt.
De gekozen instellingen waren:
synology-configScripts en documentatie voor Synology beheerREADME.mdDe naam synology-config is goed omdat deze direct duidelijk maakt:
Door te initialiseren met een README ontstaat meteen een geldige repository die eenvoudig te clonen is.
De repository werd gecloned met deze URL:
https://git.arp-ict.nl/danny/synology-config.git
Op de Mac in Terminal:
git clone https://git.arp-ict.nl/danny/synology-config.git
Tijdens het clonen werd om gebruikersnaam en wachtwoord gevraagd:
dannyDe clone slaagde en de lokale map synology-config werd aangemaakt.
cd synology-config
ls -la
Uitkomst:
.gitREADME.mdDat bevestigde dat de repository lokaal correct aanwezig was.
Voor de inhoud is gekozen voor een nette mapstructuur met scheiding tussen scripts en documentatie.
mkdir -p certificates docs
Hiermee ontstonden:
certificates/docs/Deze opzet houdt de repo overzichtelijk:
certificates/ voor scripts en certificaat-gerelateerd beheerdocs/ voor naslagdocumentatieDit is een goede basis voor latere uitbreiding.
Denk bijvoorbeeld aan:
certificates/
docs/
docker/
gitea/
monitoring/
Het doel was om het werkende Synology renew-script in Git op te nemen.
Er is eerst geprobeerd om het script vanaf de NAS te kopiëren met scp. Dat mislukte omdat SSH vanaf de Mac naar de NAS op de gebruikte poorten geen verbinding kon maken.
Pogingen die mislukten:
scp root@nas.arp-ict.nl:/usr/local/bin/renew-cert-synology.sh ./certificates/
scp root@100.126.42.77:/usr/local/bin/renew-cert-synology.sh ./certificates/
scp -P 225 root@100.126.42.77:/usr/local/bin/renew-cert-synology.sh ./certificates/
De foutmelding was steeds in de lijn van:
Connection refused
scp: Connection closed
Omdat scp niet werkte, is het script lokaal direct aangemaakt in de repo met een heredoc.
Gebruikt commando:
cat > ./certificates/renew-cert-synology.sh <<'EOF'
#!/bin/sh
set -eu
ACME_HOME="/root/.acme.sh"
DOMAIN_DIR="$ACME_HOME/arp-ict.nl_ecc"
DOMAIN_NAME="arp-ict.nl"
LOGFILE="/var/log/acme-renew-synology.log"
DEFAULT_ID="$(cat /usr/syno/etc/certificate/_archive/DEFAULT)"
ARCHIVE_DIR="/usr/syno/etc/certificate/_archive/$DEFAULT_ID"
SYSTEM_DIR="/usr/syno/etc/certificate/system/default"
{
echo "===== $(date) ====="
echo "Starting renew for $DOMAIN_NAME"
"$ACME_HOME/acme.sh" --cron --home "$ACME_HOME"
echo "Copying certificate files to active Synology certificate locations"
cp "$DOMAIN_DIR/$DOMAIN_NAME.cer" "$ARCHIVE_DIR/cert.pem"
cp "$DOMAIN_DIR/fullchain.cer" "$ARCHIVE_DIR/fullchain.pem"
cp "$DOMAIN_DIR/$DOMAIN_NAME.key" "$ARCHIVE_DIR/privkey.pem"
cp "$DOMAIN_DIR/$DOMAIN_NAME.cer" "$SYSTEM_DIR/cert.pem"
cp "$DOMAIN_DIR/fullchain.cer" "$SYSTEM_DIR/fullchain.pem"
cp "$DOMAIN_DIR/$DOMAIN_NAME.key" "$SYSTEM_DIR/privkey.pem"
cp "$DOMAIN_DIR/$DOMAIN_NAME.key" "$SYSTEM_DIR/private.key"
echo "Restarting nginx"
synosystemctl restart nginx
echo "Currently served certificate:"
echo | openssl s_client -connect nas.arp-ict.nl:5443 -servername nas.arp-ict.nl 2>/dev/null | openssl x509 -noout -subject -issuer -dates
echo "Done"
echo
} >> "$LOGFILE" 2>&1
EOF
Daarna is het script uitvoerbaar gemaakt:
chmod +x ./certificates/renew-cert-synology.sh
Daarnaast is het eerder gemaakte Markdown-document vanaf een lokale opslagmap naar de repo gekopieerd.
Bronlocatie:
/Volumes/ExtraData/Projecten/synology/
Kopieercommando:
cp /Volumes/ExtraData/Projecten/synology/synology-certificaat-renew-nas-arp-ict-nl.md ./docs/
find . -maxdepth 2 -type f | sort
Resultaat:
./.git/config
./.git/description
./.git/HEAD
./.git/index
./.git/packed-refs
./certificates/renew-cert-synology.sh
./docs/synology-certificaat-renew-nas-arp-ict-nl.md
./README.md
Dit bevestigde dat de twee gewenste bestanden correct in de repositorystructuur stonden.
Voordat bestanden worden gecommit, is eerst de Git-status bekeken:
git status
Uitkomst:
On branch main
Your branch is up to date with 'origin/main'.
Untracked files:
(use "git add <file>..." to include in what will be committed)
certificates/
docs/
nothing added to commit but untracked files present (use "git add" to track)
Dit betekent:
git add certificates docs
git commit -m "Add Synology certificate renew script and documentation"
Uitkomst:
[main 15b17e5] Add Synology certificate renew script and documentation
Committer: Danny Arp <arpd@Mac.localdomain>
...
2 files changed, 992 insertions(+)
create mode 100755 certificates/renew-cert-synology.sh
create mode 100644 docs/synology-certificaat-renew-nas-arp-ict-nl.md
Git gaf de melding dat naam en e-mailadres automatisch waren afgeleid van username en hostname:
Committer: Danny Arp <arpd@Mac.localdomain>
Dat is niet fout, maar meestal wil je dat expliciet netter zetten.
Voor later kun je dat globaal instellen met:
git config --global user.name "Danny Arp"
git config --global user.email "d.arpie@gmail.com"
Als je daarna de laatste commit nog wilt corrigeren zodat de juiste auteur zichtbaar is, kan dat met:
git commit --amend --reset-author
Dat is een nette vervolgstap, maar niet noodzakelijk voor het functioneren van de repo.
git push
Uitkomst:
Enumerating objects: 7, done.
Counting objects: 100% (7/7), done.
Delta compression using up to 16 threads
Compressing objects: 100% (6/6), done.
Writing objects: 100% (6/6), 7.21 KiB | 7.21 MiB/s, done.
Total 6 (delta 0), reused 0 (delta 0), pack-reused 0 (from 0)
remote: . Processing 1 references
remote: Processed 1 references in total
To https://git.arp-ict.nl/danny/synology-config.git
cdf4ac1..15b17e5 main -> main
De push is gelukt. Dat betekent:
git.arp-ict.nl bevat nu het script en het documentNa deze sessie is het volgende bereikt:
Je hebt nu een functionerende repository op:
https://git.arp-ict.nl/danny/synology-config
De repository is lokaal gecloned op je Mac en gekoppeld aan de remote in Gitea.
De repo bevat nu:
Er is nu een eerste betekenisvolle commit met beschrijving:
Add Synology certificate renew script and documentation
Deze repository kan nu verder worden uitgebreid met bijvoorbeeld:
Hier zijn logische vervolgstappen voor deze repository en jouw Gitea-gebruik.
git config --global user.name "Danny Arp"
git config --global user.email "d.arpie@gmail.com"
Voeg in README.md kort toe:
.gitignore toevoegenBijvoorbeeld:
*.log
.env
.env.*
.DS_Store
*.pem
*.key
secrets/
Let op: in deze repo wil je geen echte privésleutels of geheime bestanden opnemen.
Omdat er al een SSH key aanwezig is in Gitea, kun je later ook overstappen van HTTPS naar SSH.
Dat maakt werken vaak prettiger omdat je niet telkens credentials hoeft in te voeren.
Logische volgende repositories voor jouw omgeving kunnen zijn:
sql-scriptspowershell-toolstrading-journalmac-automationsharepoint-publishNaast werken in Terminal kun je dezelfde repository ook prima beheren via de grafische Git-functies van VS Code. Voor veel dagelijks werk is dat erg prettig, omdat je dan bestanden, wijzigingen en commits visueel ziet.
Deze sectie beschrijft hoe je met de GUI van VS Code werkt voor jouw Gitea-repository.
Ga in Terminal naar je lokale repositorymap en open die in VS Code:
cd synology-config
code .
Als code nog niet werkt in Terminal, kun je de map ook handmatig openen vanuit VS Code via:
synology-configIn VS Code gebruik je vooral het Source Control paneel.
Dat open je via:
Shift + Command + G
In dat venster zie je onder andere:
Als je nieuwe bestanden toevoegt, zoals:
certificates/renew-cert-synology.shdocs/synology-certificaat-renew-nas-arp-ict-nl.mddan verschijnen die in Source Control onder de wijzigingen.
VS Code markeert bijvoorbeeld:
Zo zie je direct welke bestanden nog niet in Git zitten.
Je hoeft niet per se git add in Terminal te gebruiken.
In VS Code kun je bestanden stagen door:
Je kunt ook alles tegelijk stagen via:
... menu en dan Stage All ChangesNa het aanmaken van de mapstructuur en bestanden zou je in VS Code bijvoorbeeld zien:
certificates/renew-cert-synology.shdocs/synology-certificaat-renew-nas-arp-ict-nl.mdKlik dan per bestand op +, of kies meteen Stage All Changes.
Bovenin het Source Control venster staat een invoerveld voor de commit message.
Daar vul je bijvoorbeeld in:
Add Synology certificate renew script and documentation
Daarna kun je committen via:
Command + Enter vanuit het commit message veld... menuAls alles nog niet gestaged is, zal VS Code meestal vragen of het eerst alles moet stagen.
Na de commit kun je pushen via:
... menuVS Code zal dan de commit naar jouw Gitea remote sturen.
Bij jouw huidige setup met HTTPS kan VS Code om credentials vragen, afhankelijk van hoe credential storage op je Mac is ingesteld.
Als je later op een andere machine of op de webinterface wijzigingen maakt, kun je die ophalen in VS Code via:
Te vinden via:
... menu in Source ControlEen groot voordeel van de GUI is dat je verschillen per bestand heel mooi kunt bekijken.
Klik in Source Control op een gewijzigd bestand en VS Code opent automatisch een diff-weergave waarin je ziet:
Dat is vooral handig bij scripts en Markdown-documentatie.
Voor jouw repo is dat bijvoorbeeld ideaal om wijzigingen in:
renew-cert-synology.shsnel te reviewen voordat je commit.
Onderin VS Code zie je normaal de huidige branch, bijvoorbeeld:
main
Als je op de branchnaam klikt, kun je:
Voorbeeld: een nieuwe branch maken voor experimenten:
mainfeature/update-readme
Daarna kun je wijzigingen veilig in die branch doen.
Voor jouw dagelijkse werk is dit een prettige GUI-flow:
De beste praktijk is meestal: dagelijks vooral GUI, en Terminal als het specifieker of geavanceerder wordt.
De ingebouwde Git-ondersteuning van VS Code is vaak al genoeg. Later kun je eventueel uitbreiden met:
+ icoon bij Changes- icoon bij Staged ChangesIn deze sessie is via HTTPS gecloned. Dat is prima, maar je kunt later alsnog overstappen op SSH.
De HTTPS clone werkte goed met:
git clone https://git.arp-ict.nl/danny/synology-config.git
scp vanaf de NAS werkte nietBij pogingen om het script vanaf de NAS naar de Mac te halen, kwamen fouten zoals:
ssh: connect to host ... Connection refused
scp: Connection closed
Dit wijst erop dat SSH naar de NAS vanaf de Mac niet bereikbaar was op de gebruikte poort of hostroute.
Het script is daarom lokaal direct aangemaakt in de repo.
Controleer later:
Dat is normaal bij gebruik van HTTPS.
Bij SSH zou dit later anders gaan, mits je sleutel en config goed staan.
Bij commit kreeg je een melding dat naam en e-mail automatisch waren bepaald.
Stel dit expliciet in:
git config --global user.name "Danny Arp"
git config --global user.email "d.arpie@gmail.com"
Gebruik:
git status
Dit is een van de belangrijkste Git-commando’s in het dagelijks gebruik.
Je gebruikt het om te zien:
Gebruik:
find . -maxdepth 2 -type f | sort
Of simpeler:
ls -la
ls -la certificates
ls -la docs
Voor normale wijzigingen:
git status
git add .
git commit -m "duidelijke omschrijving van de wijziging"
git push
Voor veilig en overzichtelijk werken is dit de kern.
De uitgevoerde basisopzet was:
synology-config aanmakencertificates en docs aanmakengit addgit commitgit pushDaarmee is Gitea nu daadwerkelijk in gebruik voor jouw versiebeheer.
Je hebt nu een werkende eerste Git/Gitea-opzet op je eigen omgeving, met een echte repository en echte inhoud. Daarmee is de basis gelegd om voortaan scripts, documentatie en configuratie gestructureerd in versiebeheer te zetten op je eigen NAS-hosted Git-platform.