# apt install -y mariadb-server
==== Sécurisation de MariaDB ====
# mysql_secure_installation
NOTE: RUNNING ALL PARTS OF THIS SCRIPT IS RECOMMENDED FOR ALL MariaDB
SERVERS IN PRODUCTION USE! PLEASE READ EACH STEP CAREFULLY!
In order to log into MariaDB to secure it, we'll need the current
password for the root user. If you've just installed MariaDB, and
you haven't set the root password yet, the password will be blank,
so you should just press enter here.
Enter current password for root (enter for none):
OK, successfully used password, moving on...
Setting the root password ensures that nobody can log into the MariaDB
root user without the proper authorisation.
Set root password? [Y/n] Y
New password:
Re-enter new password:
Password updated successfully!
Reloading privilege tables..
... Success!
By default, a MariaDB installation has an anonymous user, allowing anyone
to log into MariaDB without having to have a user account created for
them. This is intended only for testing, and to make the installation
go a bit smoother. You should remove them before moving into a
production environment.
Remove anonymous users? [Y/n] Y
... Success!
Normally, root should only be allowed to connect from 'localhost'. This
ensures that someone cannot guess at the root password from the network.
Disallow root login remotely? [Y/n] Y
... Success!
By default, MariaDB comes with a database named 'test' that anyone can
access. This is also intended only for testing, and should be removed
before moving into a production environment.
Remove test database and access to it? [Y/n] Y
- Dropping test database...
... Success!
- Removing privileges on test database...
... Success!
Reloading the privilege tables will ensure that all changes made so far
will take effect immediately.
Reload privilege tables now? [Y/n] Y
... Success!
Cleaning up...
All done! If you've completed all of the above steps, your MariaDB
installation should now be secure.
Thanks for using MariaDB!
===== Création de la BDD =====
# mysql -u"root" -p
CREATE DATABASE IF NOT EXISTS gitea CHARACTER SET utf8 COLLATE utf8_general_ci;
===== Création de l'utilisateur =====
CREATE USER 'gitea'@'%' IDENTIFIED BY 'gitea_PASSWORD_HERE';
GRANT ALL PRIVILEGES ON gitea.* TO 'gitea'@'%';
FLUSH PRIVILEGES;
===== Export/import de la base de données de gogs =====
# mysqldump gogs_EpaiPhe7 > gogs_EpaiPhe7.sql
# mysql gitea < gogs_EpaiPhe7.sql
Le reste de l'installation suit la procédure officielle (utilisateur git, droits, etc.). La configuration au niveau de merlin (nginx) reste inchangée (au port près).
===== Intégration de Gitea à LDAP =====
Type d'authentification : LDAP (via BindDN)
Protocole de sécurité : LDAPS
Hôte : leodagan.hadoly.fr
Port : 636
Bind DN : uid=gogs-account,ou=people,ou=service,dc=hadoly,dc=fr
Bind mot de passe : xxxxxxxxxxxxxxxxxxxxx
Utilisateur Search Base : dc=hadoly,dc=fr
Filtre utilisateur : (&(objectclass=person)(uid=%s)(memberof=cn=gogs_group,ou=groups,dc=hadoly,dc=fr))
Filtre administrateur : Vide
Attribut nom d'utilisateur : uid
Attribut du prénom : givenName
Attribut du nom de famille : sn
Attribut de l'e-mail : mail
[ ] Alllez chercher les attributs dans le contexte de liaison DN
[x] Ne pas vérifier TLS
[x] Authentification activée
====== Administration ======
===== Arborescence =====
* le fichier de configuration app.ini est placé dans le dossier /etc/gitea ;
* les fichiers (applicatif et dépôts) sont placé dans /var/lib/gitea :
root@juris:/var/lib/gitea# tree -L 2
.
├── custom
│ ├── conf
│ ├── public
│ └── templates
├── data
│ ├── attachments
│ ├── avatars
│ ├── indexers
│ └── sessions
├── gitea-1.6.4-linux-amd64
├── gitea-repositories
├── └── Dossiers des dépôts des utilisateurs
├── indexers
│ └── issues.bleve
├── log
│ ├── gitea.log
│ ├── gitea.log.2019-01-21.001
│ ├── hooks
│ ├── http.log
│ ├── serv.log
│ ├── xorm.log
│ ├── xorm.log.2019-01-20.001
│ └── xorm.log.2019-01-21.001
└── public
* le dossier "custom" contient les éléments de configuration "custom" (template de la page d'accueil notamment) ;
* le dossier "data" contient les pièces jointes des tickets (stockés en base de données) ainsi que les avatars des utilisateurs ;
* le dossier "gitea-repositories" contient l'ensemble des dépôts des utilisateurs (un dossier par utilisateur) ;
* le dossier "log" contient... les logs !
* un lien symbolique (/usr/loca/bin/gitea) pointe vers le fichier binaire "gitea-1.6.4-linux-amd64"
===== Gestion du service =====
Un service systemd gitea est disponible pour démarrer/arrêter/redémarrer le service.
# systemctl start/stop/restart gitea
===== Fichier de configuration app.ini =====
APP_NAME = Gitea
RUN_USER = git
RUN_MODE = prod
[database]
DB_TYPE = mysql
HOST = 127.0.0.1:3306
NAME = gitea
USER = gitea
PASSWD = xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
SSL_MODE = disable
#PATH = data/gitea.db
[repository]
ROOT = /var/lib/gitea/gitea-repositories
; Force every new repository to be private
FORCE_PRIVATE = true
[repository.upload]
; Maximum size of each file in MB
FILE_MAX_SIZE = 100
[release.attachment]
; Max size of each file. Defaults to 32MB
MAX_SIZE = 100
[attachment]
; Max size of each file. Defaults to 4MB
MAX_SIZE = 100
[server]
DOMAIN = git.hadoly.fr
HTTP_PORT = 3000
ROOT_URL = https://git.hadoly.fr/
DISABLE_SSH = false
SSH_PORT = 6900
SSH_DOMAIN = git-ssh.hadoly.fr
START_SSH_SERVER = false
OFFLINE_MODE = true
[mailer]
ENABLED = true
SUBJECT = Notification git.hadoly.fr
HOST = yvain.hadoly.fr:465
FROM = "Hadoly"
# ; Mailer user name and password
USER = noreply
PASSWD = xxxxxxxxxxxxxxxxxxxxxxxxx
[service]
REGISTER_EMAIL_CONFIRM = false
ENABLE_NOTIFY_MAIL = true
DISABLE_REGISTRATION = true
ENABLE_CAPTCHA = true
REQUIRE_SIGNIN_VIEW = false
[picture]
DISABLE_GRAVATAR = true
ENABLE_FEDERATED_AVATAR = false
[session]
PROVIDER = file
[log]
MODE = file
LEVEL = Info
ROOT_PATH = /var/lib/gitea/log
[security]
INSTALL_LOCK = true
SECRET_KEY = xxxxxxxxxxxxxxxxx
INTERNAL_TOKEN = xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
====== Procédure de mise à jour ======
* Arrêter le service :
# systemctl stop gitea
* Faire un backup de la base de données par sécurité :
# mysqldump gitea > gitea.sql
* Télécharger le dernier binaire en date depuis le site de gitea :
# cd /var/lib/gitea && wget https://dl.gitea.io/gitea/1.x.x/gitea-1.x.x-linux-amd64
* Changer les droits :
# chown git: gitea-1.x.x-linux-amd64 && chmod u+x gitea-1.x.x-linux-amd64
* Modifier le lien symbolique :
# cd /usr/local/bin && unlink gitea && ln -s /var/lib/gitea/gitea-1.x.x-linux-amd64 gitea
* Démarrer le service :
# systemctl start gitea
En cas de problème lors de la mise à jour, arrêter le service, restaurer la base de données et faire pointer le lien symbolique sur la version précédente du binaire.
**Penser à supprimer les version n-2**
====== Personnalisation ======
Le dossier d'installation de //Gitea// est ''%%/var/lib/gitea%%''.
C'est à partir de cet emplacement que le site peut être personnalisé et plus particulièrement en intervenant sur le dossier ''%%/var/lib/gitea/custom/%%''.
==== Page de garde ====
Il est possible de faire une page de garde personnalisée en créant le fichier ''%%gogs/custom/templates/home.tmpl%%'' (par défaut le fichier affiché est ''%%/var/lib/gitea/templates/home.tmpl%%'').
Il est également possible de personnaliser l'entête (''%%/var/lib/gitea/custom/templates/inject/head.tmpl%%'') et le bas de page (''%%/var/lib/gitea/custom/templates/inject/footer.tmpl%%'').
Il est ainsi possible d'appliquer un //CSS// personnalisé qu'on placera dans ''%%/var/lib/gitea/custom/public/css%%'' et qu'on incluera dans l'entête personnalisé (exemple : ''%%%%'').
==== Logo & favicon ====
2021 : la technique permettant de changer le logo ne marche plus. Corrigé en faisant un lien symbolique ''gitea-sm.png -> logo_hadoly.png'' dans /var/lib/gitea/custom/img
Afin de mettre le logo Hadoly dans le menu et en favicon, il suffit de remplacer le fichier ''%%/var/lib/gitea/custom/public/img/favicon.png%%''.
Concernant le logo de la page de garde, il faut modifier l'image pointée par la class //CSS// //"logo"// du fichier ''%%home.tmpl%%'' (par défaut utilise le //favicon//).
==== Liste des utilistateurs ====
Par défault, la liste des utilisateurs est publique, et visible y compris aux persononnes non authentifiées. (sur https://git.hadoly.fr/explore/users)
Ce n'est pas configurable pour le moment, cf [[https://github.com/go-gitea/gitea/issues/2908 | Issue 2908]]
Il est possible de passer REQUIRE_SIGNIN_VIEW à true, mais cela empêche alors d'avoir des dépots publics.
Pour masquer la liste des utilisateurs dans l'interface web, on crée le fichier ''%%/var/lib/gitea/custom/templates/explore/users.tmpl%%'' :
{{template "base/head" .}}
{{template "explore/navbar" .}}
La liste des utilisateurs n'est pas disponible.
{{template "base/footer" .}}
Il faut aussi bloquer le endpoint d'API ''api/v1/users/search'' qui permet de récupérer un beau json avec la liste des utilisateurs, (Login, Nom, Prénom, email, date de création, date dernier login...)
Pour tester: ''curl -X GET "https://git.hadoly.Fr/api/v1/users/search" -H "accept: application/json" | jq''
Pour bloquer cela, il n'existe pas de bonne sollution sans impacter le fonctionnement de l'appli. Bloquer tout users/search/ empeche d'ajouter des utilisateurs à sur un dépot. Et casse peut être d'autres choses...
Le comportement par default de l'API, si on fait une requète avec n'importe quoi sur ce endpoint est de retourner la liste complète des users. Ça rend quasiment impossible de bloquer correctement avec une regex et la logique nginx. (en tout cas je n'y suis pas arrivé).
Sollution très imparfaite qui bloque un petit peu, et laisse la recherche fonctionner du moment qu'on fournis au moins 3 lettres ou chiffres.
location ~ ^/api/v1/users/search/?$ {
if ($args ~* "^q?=?[a-z0-9]{0,3}$") {
return 403;
}