Files
mkdocs/docs/Synology/dsm7/gitea.md
2023-11-14 20:35:51 +01:00

461 lines
11 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# Gitea
Le paquet [gitea-spk](https://github.com/flipswitchingmonkey/gitea-spk) a été mis à jour pour DSM7. Il est dispo chez [SynoCommunity](https://synocommunity.com/package/gitea).
Sinon, on peut installer Gitea d'après les [binaires](https://docs.gitea.io/en-us/install-from-binary/).
### Installation (paquet):
```bash
bruno@DS916:/var/packages/gitea/var $ l
total 1672
drwxr-xr-x 1 sc-gitea synocommunity 66 May 7 10:46 .
drwxr-xr-x 1 root root 648 May 6 16:26 ..
-rw------- 1 sc-gitea synocommunity 1790 May 7 10:47 conf.ini
drwxr-xr-x 1 sc-gitea synocommunity 150 May 8 17:14 data
-rw-r--r-- 1 sc-gitea synocommunity 1701804 May 8 19:23 gitea.log
-rw-r--r-- 1 sc-gitea synocommunity 5 May 7 10:47 gitea.pid
drwxr-xr-x 1 sc-gitea synocommunity 0 May 7 10:46 log
```
```bash
git push -u gitea916 master
💡 gp -u gitea916 master
Username for 'https://clicclac.synology.me:3000': bruno
Password for 'https://bruno@clicclac.synology.me:3000':
```
`git config credential.helper store`
Aide pour stocker les informations didentification sur disque (en clair)(seules les permissions du fichiers .git-credentials protègent)
https://techexpertise.medium.com/storing-git-credentials-with-git-credential-helper-33d22a6b5ce7
```bash
~ $ bat .git-credentials
File: .git-credentials
1 https://bruno:%yy%xxxxxxx%yyz@clicclac.synology.me%3a3000
```
Sur macOS, on peut stocker stocker les informations didentification dans la keychain (encrypté)
`git config --global credential.helper osxkeychain`
### Installation (binaires):
Créer un utilisateur `gitea`.
```bash
bruno@DS916:~ $ sudo su - gitea
gitea@DS916:~$
```
Déclarer le répertoire d'installation dans `.bashrc`:
```
export GITEA_WORK_DIR=/var/services/homes/gitea
```
Préparer les répertoires:
```bash
# dossier d'installation
mkdir -p $GITEA_WORK_DIR/{custom,data,log}
chown -R gitea:users $GITEA_WORK_DIR/
chmod -R 750 $GITEA_WORK_DIR/
# dossier de configuration
mkdir /etc/gitea
chown gitea:users /etc/gitea
chmod 770 /etc/gitea
```
Télécharger Gitea
```bash
wget -O gitea https://dl.gitea.io/gitea/1.16.6/gitea-1.16.6-linux-amd64
chmod +x gitea
mv gitea /usr/local/bin/
```
Lancer Gitea
```bash
gitea@DS916:~$ /usr/local/bin/gitea web -c /etc/gitea/app.ini
```
Erreur *'bind: address already in use'*:
```bash
$ netstat -tulpn
tcp6 0 0 :::3000 :::* LISTEN 9829/gitea
$ kill 9829
```
Configurer gitea:
http://192.168.2.7:3000
### Configuration:
#### Accéder au site:
http://localhost:3000 . Si Safari ne peut y accéder parce que la connexion n'est pas sécurisée (*HSTS Policy*):
1. `command + ,`
2. **Confidentialité** -> **Gérer les données de sites web**...
3. Chercher *localhost*
4. Clic **Supprimer**
DSM :material-arrow-right: Portail des applications :material-arrow-right: Proxy inversé
| | Source | Destination |
| ---------- | -------------------- | ----------- |
| Protocole | HTTPS | HTTP |
| Nom d'hôte | clicclac.synology.me | localhost |
| Port | 3001 | 3000 |
##### Configurer les Virtual Host:
```bash title="Apache"
<VirtualHost *:80>
ProxyPreserveHost On
ProxyRequests off
ProxyPass / http://localhost:3000/
ProxyPassReverse / http://localhost:3000/
</VirtualHost>
```
```bash title="Nginx"
server {
listen 80;
server_name git.example.com;
location / {
proxy_pass http://localhost:3000;
}
}
```
#### Configuration:
1. <u>Base:</u> sqlite3 (impossible de se connecter à mariadb)
2. <u>PATH:</u> `= /var/services/homes/bruno/gitea/data/gitea.db`
Une fois Gitea installé et configuré, on peut sécuriser le fichier de configuration:
```bash
chmod 750 /etc/gitea
chmod 640 /etc/gitea/app.ini
```
Les repos sont stockés ici:
```bash
ROOT = /var/services/homes/gitea/data/gitea-repositories
```
et les logs là:
```bash
ROOT_PATH = /var/services/homes/gitea/log
```
On peut lancer gitea depuis un script:
```bash
/usr/local/bin/gitea web -c /etc/gitea/app.ini
```
ou depuis un service.
### Service
A installer dans `/etc/systemd/system`:
```ini title="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 dependencies
###
#
#Wants=mysql.service
#After=mysql.service
#
#Wants=mariadb.service
#After=mariadb.service
#
#Wants=postgresql.service
#After=postgresql.service
#
#Wants=memcached.service
#After=memcached.service
#
#Wants=redis.service
#After=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=bruno
Group=users
WorkingDirectory=/var/services/homes/bruno/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=bruno HOME=/var/services/homes/bruno GITEA_WORK_DIR=/var/services/homes/bruno/gitea
# If you install Git to directory prefix other than default PATH (which happens
# for example if you install other versions of Git side-to-side with
# distribution version), uncomment below line and add that prefix to PATH
# Don't forget to place git-lfs binary on the PATH below if you want to enable
# Git LFS support
#Environment=PATH=/path/to/git/bin:/bin:/sbin:/usr/bin:/usr/sbin
# 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
```
```bash
bruno@DS916:/etc/gitea $ cd /etc/systemd/system
-rw-r--r-- 1 root root 2192 Oct 8 2021 gitea.service
```
```bash title="Activer le service gitea au démarrage"
sudo systemctl enable gitea
```
```bash title="Démarrer le service gitea"
sudo systemctl start gitea
```
```bash title="Status de gitea"
sudo systemctl status -l gitea
```
```bash title="Status de gitea"
ps auxw | grep gitea
bruno 8220 0.8 6.2 2038820 122672 ? Ssl 20:26 0:02 /usr/local/bin/gitea web --config /etc/gitea/app.ini
bruno 9790 0.0 0.0 2860 184 pts/1 D+ 20:32 0:00 grep gitea
```
```bash
gitea@DS916:~ $ systemctl status gitea.service
● gitea.service - Gitea (Git with a cup of tea)
Loaded: loaded (/etc/systemd/system/gitea.service; enabled; vendor preset: disabled)
Active: active (running) since Wed 2022-05-04 19:32:00 CEST; 15h ago
Main PID: 16222 (gitea)
Memory: 39.2M
CGroup: /system.slice/gitea.service
└─16222 /usr/local/bin/gitea web --config /etc/gitea/app.ini
```
### Mise-à-jour
Depuis un script:
```bash title="dsm7-gitea-update.sh"
#!/bin/bash
GITEA_BIN=`which gitea`
if [ "$GITEA_BIN" == "*gitea*" ]; then
echo "Gitea is not installed..."
exit 0
fi
GITEA_INSTALLED=`$GITEA_BIN --version | cut -d \ -f 3`
LATEST_URL=`curl -Ls -o /dev/null -w %{url_effective} https://github.com/go-gitea/gitea/releases/latest`
#https://github.com/go-gitea/gitea/releases/tag/v1.11.3
#echo LATEST_URL = ${LATEST_URL}
GITEA_VERSION=${LATEST_URL##*/v}
if [ "${GITEA_INSTALLED}" != "${GITEA_VERSION}" ]; then
echo "No Gitea update available..."
exit 0
else
echo "Installed: "${GITEA_INSTALLED}
echo "Latest: "${GITEA_VERSION}
a=$(echo -e "Do you wanna update Gitea to ${GITEA_VERSION} ? (y/n)")
read -p "$a" choice
if [ "$choice" == "y" ] || [ "$choice" == "Y" ]; then
rm -rf /tmp/gitea
mkdir /tmp/gitea
cd /tmp/gitea
sudo systemctl stop gitea
echo "Download latest Gitea..."
GITEA_ARCHIVE=gitea-${GITEA_VERSION}-linux-amd64.xz
#DOWNLOAD_URL=https://github.com/go-gitea/gitea/releases/download/v${GITEA_VERSION}/gitea-${GITEA_VERSION}-linux-amd64.xz
DOWNLOAD_URL=https://github.com/go-gitea/gitea/releases/download/v${GITEA_VERSION}/${GITEA_ARCHIVE}
echo ${DOWNLOAD_URL}
wget -P /tmp/gitea ${DOWNLOAD_URL}
# sudo opkg install xz
# sudo opkg install tar (sinon tar: unrecognized option '--exclude=INFO.in')
xz --decompress ${GITEA_ARCHIVE}
echo "Installing Gitea ${GITEA_VERSION}..."
filename="${GITEA_ARCHIVE%.*}"
if [[ "$filename" =~ gitea ]]; then
mv $filename gitea
sudo mv gitea `dirname "$GITEA_BIN"`
fi
sudo chmod +x ${GITEA_BIN}
sudo chown root:root ${GITEA_BIN}
sudo systemctl start gitea
sudo systemctl status gitea
fi
fi
exit 1
```
### Personnaliser:
https://docs.gitea.io/en-us/customizing-gitea/
```bash
$ gitea embedded list | grep 'login'
```
#### Ajouter un lien dans la barre de navigation:
```bash
# Ajouter un fichier extra_links.tmpl
$ nano /var/services/homes/gitea/custom/templates/custom/extra_links.tmpl
<a class="item" href="https://maboiteverte.fr">maboiteverte.fr</a>
# Redémarrer Gitea
$ sudo service gitea restart
```
#### Ajouter un lien dans la barre de navigation inférieure:
```bash
# Ajouter un fichier extra_links_footer.tmpl
$ nano /var/services/homes/gitea/custom/templates/custom/extra_links_footer.tmpl
<a class="item" href="{{AppSubUrl}}/privacy.html">Privacy Policy</a>
$ cd /var/lib/gitea/custom/public
privacy.html
# Redémarrer Gitea
$ sudo service gitea restart
```
### Backup
Pour sqlite:
```bash
bruno@DS916:/var/services/homes $zip -r gitea.zip gitea/
```
Les repos sont là `/var/services/homes/gitea/data/gitea-repositories`
Pour MySQL, sauvegarder la base en plus.
Gitea ajoute dans le `authorized_keys`:
```
#command="/usr/local/bin/gitea --config=/etc/gitea/app.ini serv key-1",no-port-forwarding,no-X11-forwarding,no-agent-forwarding,no-pty,no-user-rc,restrict ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAACAQC+V9iatTyPN/4prnbnRhUdP13RMTSPeajqvpyJzcNmVGUeGLOT6zCY4RQQAbd1ZCRWNZ3W/OmjiQ0a2r1yp26pxJlS9UWl8DUGc3D7StGAbHpP20ydZ++VvXCcqbAgpuPnScmWCzk/flPzcDiFOGwo2fh5bHGjO+XjOVaIhP608cMkw8UR2Dcg+BkOuBb5oX9SScvb2U5elosMbsDSR+Hghip4Wf8QFYyCJxpgZXjEucp0rm5fe19mKL/bF3PLS3OqUgN24WZv7jdDTK/QICz+cCHU8cG8+A4MYkdBaMZysXIJtdk5MzLbRhaD6yohP403MxA3BrMCGPXnk9cHi4JQ1meClP0OiyrPaC36iX7tvtszzFbnjmElHYmMTSWp0sstMfWt+7nIDJMbxOee3g5MUu1AbHrNyds4DiP4AKy25t9q8TMSYWPN8M84N5sUIKao9SUeHLLU7BoqiSJTpHuIS4967ETdkunu7OipKEueUXjxA4WK+qp3KCa+lGncTkog72DN6j8kR86H/rfW+b2KqKj4vQr9Covd+W9WoC2e558qHlqWKY8B1Wh/kt5oo+4paw7yBgkGS3hsHBdd+uzG0y5BL7DiUDdC45I71oSTsOqBosW9mtEA4d9cmeQjjrVFGlSWpfD6+46MGn9uyOp7W5ndpHJe1iorAmdl2nTcbw== Commentaire: ma clé sur le airbook
```