You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

784 lines
20 KiB

  1. #+SETUPFILE: /home/vaab/dev/el/org-html-themes/setup/theme-readtheorg.setup
  2. #+PROPERTY: Effort_ALL 0 0:30 1:00 2:00 0.5d 1d 1.5d 2d 3d 4d 5d
  3. #+PROPERTY: Max_effort_ALL 0 0:30 1:00 2:00 0.5d 1d 1.5d 2d 3d 4d 5d
  4. #+PROPERTY: header-args:python :var filename=(buffer-file-name)
  5. #+PROPERTY: header-args:sh :var filename=(buffer-file-name)
  6. #+TODO: TODO WIP BLOCKED POSTPONED | DONE CANCELED
  7. #+LATEX_HEADER: \usepackage[margin=0.5in]{geometry}
  8. #+LaTeX_CLASS: article
  9. #+OPTIONS: H:8 ^:nil prop:("Effort" "Max_effort") tags:not-in-toc
  10. #+COLUMNS: %50ITEM %Effort(Min Effort) %Max_effort(Max Effort)
  11. #+begin_LaTeX
  12. \hypersetup{
  13. linkcolor=blue,
  14. pdfborder={0 0 0 0}
  15. }
  16. #+end_LaTeX
  17. #+TITLE: Architecture 0k.io
  18. #+LATEX: \pagebreak
  19. * Process de déploiement
  20. Description du process de déploiement pour une nouvelle installation
  21. ** Base myc
  22. *** Qu'est ce c'est ?
  23. A partir d'une debian 9, on peut installer la machine pour être prête
  24. à utiliser un déploiement myc.
  25. Une fois executé, la machine aura toute les deps pour lancer une
  26. commande compose qui fera peut-être appel à des registry de
  27. mycéliandre. Un compose de base est aussi proposé.
  28. *** Déploiement
  29. **** Hôte linux base debian 9
  30. #+BEGIN_SRC sh
  31. export WITHOUT_DOCKER_CLEAN=1 ## only if you want to remove docker clean from cron
  32. wget https://justodooit.myceliandre.fr/r/deploy -qO - | bash
  33. #+END_SRC
  34. If you want to setup odoo admin password and domain in one go:
  35. #+BEGIN_SRC sh
  36. export WITHOUT_DOCKER_CLEAN=1 ## only if you want to remove docker clean from cron
  37. export DOMAIN=myhost.com
  38. wget https://justodooit.myceliandre.fr/r/deploy -qO - | bash
  39. #+END_SRC
  40. **** Hôte macosx
  41. - install bash, docker
  42. - Uncheck "Securely store docker logins in macOS keychain"
  43. *** Ce que cela fait
  44. **** Mettre la machine en état charm-ready
  45. - installation du strict minimu pour lancer les =charms=
  46. - téléchargement de la dernière version des =0k-charms= (collection
  47. de recettes d'installation et de gestion de docker)
  48. **** Mettre la machine en état compose ready (notre docker qui va bien)
  49. via le lancement du charm =docker-host= qui installe:
  50. - docker, docker-compose, compose avec des versions qui vont bien
  51. - paquets maisons (kal-scripts, 0k-manage, 0k-pgm, lxc-scripts, 0k-docker)
  52. - accès pour le repository deb de kalysto.org
  53. - clé SSH pour repos git.kal.fr
  54. - login sur le docker registry docker.0k.io
  55. **** Commandes spécifique à myc
  56. - login sur le registry myc
  57. - téléchargement du compose de base dans =/opt/apps/myc-deploy=
  58. ** Modification du compose
  59. *** Qu'est-ce que c'est ?
  60. Il y a des update client à faire souvent sur le compose. Cette étape
  61. doit être externalisée au plus possible, sont consigné ici ce qu'il
  62. faut encore faire à la main.
  63. *** Commande
  64. **** Création de clé OVH pour letsencrypt/lexicon
  65. Ceci n'est nécessaire qu'en cas d'utilisation de la méthode DNS
  66. pour valider la possession du domaine auprès de letsencrypt.
  67. #+BEGIN_SRC shell
  68. APPLICATION_KEY=XXXXXXXXXXXXXXXXX
  69. REDIR_WEBSITE=https://0k.io
  70. req=$(cat <<EOF
  71. {
  72. "accessRules": [
  73. {
  74. "method": "GET",
  75. "path": "/*"
  76. },
  77. {
  78. "method": "POST",
  79. "path": "/*"
  80. },
  81. {
  82. "method": "PUT",
  83. "path": "/*"
  84. },
  85. {
  86. "method": "DELETE",
  87. "path": "/*"
  88. }
  89. ],
  90. "redirection":"$REDIR_WEBSITE"
  91. }
  92. EOF
  93. )
  94. res=$(curl -X POST \
  95. -H "X-Ovh-Application: ${APPLICATION_KEY}" \
  96. -H "Content-type: application/json" \
  97. https://eu.api.ovh.com/1.0/auth/credential \
  98. -d "$req")
  99. consumer_key=$(echo "$res" | jq -r .consumerKey)
  100. validation_url=$(echo "$res" | jq -r .validationUrl)
  101. echo "Visit: $validation_url"
  102. echo "ConsumerKey: $consumer_key"
  103. #+END_SRC
  104. Il s'agit alors de remplir le compose.yml
  105. #+BEGIN_SRC yaml
  106. ovh:
  107. ## see: https://api.ovh.com/g934.first_step_with_api
  108. entrypoint: ovh-eu
  109. application:
  110. key: XXXXXXXXXXXXXXXX
  111. secret: YYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYY
  112. consumer_key: ZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZ
  113. #+END_SRC
  114. Puis de valider que tout est ok:
  115. #+BEGIN_SRC shell
  116. check-compose-ovh-credentials compose.yml
  117. #+END_SRC
  118. ** Lancement/Deploy de service odoo
  119. *** Qu'est ce que c'est ?
  120. A partir d'une base myc, cette commande permet d'envoyer la
  121. construction et l'assemblage de tous les services décrit dans le
  122. =compose.yml= fourni par défaut.
  123. *** commandes
  124. #+BEGIN_SRC sh
  125. cd /opt/apps/myc-deploy
  126. compose --debug up odoo frontend
  127. #+END_SRC
  128. De manière générale:
  129. #+BEGIN_SRC sh
  130. compose [--debug] up [SERVICES...]
  131. #+END_SRC
  132. *** Ce que ça fait
  133. Les charms vont s'occuper de séparer la config des
  134. donnée, de tout stocker dans =/srv/datastore=, il vont
  135. s'occuper de la petite maintenance:
  136. - le charm postgres (qui est une dépendance du service odoo) va créer
  137. un mot de passe et le filer à odoo
  138. - le charm apache (qui implémente le service frontend)
  139. va créer les fichiers de conf apache pour déclarer un virtualhost
  140. et mettre les clés SSL s'il y a lieu.
  141. * Gestion
  142. Description des process de gestion d'une installation existante.
  143. ** Mise à jour de l'ensemble
  144. Pour mettre à jour un VPS:
  145. #+BEGIN_SRC sh
  146. myc-update
  147. #+END_SRC
  148. Cette commande va ré-appliquer l'installation du charm =docker-host=
  149. qui installe ou met à jour chaque composant.
  150. ** Gestion des dockers
  151. *** Relancement
  152. si on veut relancer parce que le compose a changé :
  153. on fait pareil qu'au lancement : lors du "up", docker-compose se
  154. rend compte que la définition des services a changé et relance les
  155. docker voulu.
  156. *** Arrêt
  157. #+BEGIN_SRC sh
  158. compose --debug down
  159. #+END_SRC
  160. *** Voir les logs
  161. #+BEGIN_SRC sh
  162. cd /opt/apps/myc-deploy
  163. compose --debug logs odoo
  164. #+END_SRC
  165. *** Obtenir les IPs des dockers
  166. #+BEGIN_SRC sh
  167. docker-ip
  168. #+END_SRC
  169. ** Par services
  170. *** odoo
  171. **** Backups
  172. ***** Backuping odoo account (filestore and database)
  173. There are still some quirks, so be sure:
  174. - to change your current directory to =/opt/apps/myc-deploy=
  175. - your odoo instance should be already up.
  176. - to have =admin-password= defined in your =compose.yml=, in your
  177. =odoo= service's =options=.
  178. #+BEGIN_SRC yaml
  179. odoo:
  180. options:
  181. admin-password: XXXXXX
  182. #+END_SRC
  183. #+BEGIN_SRC sh
  184. MYODOOSERVICENAME=odoo
  185. DBNAME="$MYODOOSERVICENAME"
  186. OUTPUTFILE=backup-odoo.zip
  187. cd /opt/apps/myc-deploy &&
  188. compose save "$MYODOOSERVICENAME" "$DBNAME" "$OUTPUT_FILE"
  189. #+END_SRC
  190. The backup file should be in the same directory.
  191. ***** Restoring odoo account (filestore and database)
  192. There are still some quirks, so be sure:
  193. - to change your current directory to =/opt/apps/myc-deploy=
  194. and put your backup file in the same directory
  195. - your odoo instance should be already up.
  196. - to have =admin-password= defined in your =compose.yml=, in your
  197. =odoo= service's =options=.
  198. #+BEGIN_SRC yaml
  199. odoo:
  200. options:
  201. admin-password: XXXXXX
  202. #+END_SRC
  203. *IMPORTANT* you might want to consider the usage of docker-cutoff if
  204. you are restoring a production odoo onto a dev or staging odoo that you
  205. don't want to allow to go mess around with sending mails or fetching mails.
  206. #+BEGIN_SRC yaml
  207. docker-cutoff 25 993 465
  208. #+END_SRC
  209. These are the normal loading instructions:
  210. #+BEGIN_SRC sh
  211. MYODOOSERVICENAME=odoo
  212. DBNAME="$MYODOOSERVICENAME"
  213. SOURCEFILE=backup-odoo.zip
  214. cd /opt/apps/myc-deploy &&
  215. compose load "$MYODOOSERVICENAME" "$SOURCEFIE" "$DBNAME"
  216. #+END_SRC
  217. ***** charger un dump SQL dans odoo
  218. Supporte *.dump ou sql (non compressé), *.gz ou *.bz2:
  219. #+BEGIN_SRC sh
  220. compose load-db odoo MONFICHIER.dump.bz2
  221. #+END_SRC
  222. ***** sauvegarder dump db de odoo
  223. Pour l'instant on passe par pgm
  224. #+BEGIN_SRC sh
  225. compose save-db odoo MONFICHIER.dump.bz2
  226. #+END_SRC
  227. **** Update de modules
  228. #+BEGIN_SRC sh
  229. compose update odoo MABASE [MODULE [MODULE ...]]
  230. #+END_SRC
  231. **** lancement d'une commande odoo
  232. Si l'ensemble n'est pas up:
  233. #+BEGIN_SRC sh
  234. compose --debug run odoo --help
  235. #+END_SRC
  236. **** Mod dev d'odoo
  237. Il est souhaitable de lancer odoo en mode dev avec un terminal prêt à
  238. accueillir un pdb par exemple, et pouvoir changer facilement la ligne de commande.
  239. On peut tout a fait lancer odoo directement, par exempe:
  240. #+BEGIN_SRC sh
  241. compose run --rm --use-aliases odoo --dev=wdb --config=/opt/odoo/auto/odoo.conf
  242. #+END_SRC
  243. On récupère ainsi tous les volumes et autres options (sauf ce qui est
  244. dans =command:=) défini dans =compose.yml=.
  245. Un problème cependant: si on utilise apache comme frontend, celui-ci
  246. ne pourra pas résoudre le nom =odoo= à cause de problèmes autour de
  247. =docker-compose= et/ou =docker network=. En effet, si on fait un =up=
  248. comme d'habitude, et qu'on souhaite simplement arrêter le service
  249. classique pour ensuite le remplacer par la commande au dessus, cela ne
  250. fonctionnera pas. En effet, l'alias réseau =odoo= n'est plus adjoignable
  251. (même avec les commandes =docker network {dis,}connect=), et même si
  252. le container original de odoo est détruit ou éjecté du réseau, ou que l'on
  253. essaye de connecter soi-même le nouveau container.
  254. Un moyen (bancal) de passer outre cependant:
  255. - =down= pour fermer le réseau
  256. - =create= sur le service apache, puis =restart=.
  257. - enfin, le =run= tel que décrit au dessus
  258. Soit:
  259. #+BEGIN_SRC sh
  260. compose down &&
  261. compose create apache &&
  262. compose restart apache &&
  263. compose run --rm --use-aliases odoo --dev=wdb --config=/opt/odoo/auto/odoo.conf
  264. #+END_SRC
  265. Le container odoo crée par la dernière ligne se retirera proprement des tables DNS
  266. interne, et donc peut tout a fait être relancée autant de fois que l'on souhaitera.
  267. *** letsencrypt
  268. Le service letsencrypt fourni des certificat SSL à la demande et les
  269. renouvelle automatiquement.
  270. **** configuration dans compose
  271. ***** Authentification HTTP
  272. Il n'y a besoin d'aucune option dans le service =letsencrypt=.
  273. Le charm =apache= doit trouver un service utilisant le charm =letsencrypt=, cette
  274. connection se fera automatiquement si un servce de type =letsencrypt= est lancé soit
  275. parce que directement mentionné dans la racine ou dans une relation explicite.
  276. La relation construite automatiquement (ou manuellement) d'un service
  277. =apache= vers un service =letsencrypt= s'appelle =cert-provider=.
  278. Une fois que ce service est relié à apache, on peut s'en servir comme clé dans
  279. la configuration =ssl= des relations =*-->web-proxy-->apache=.
  280. Par défaut, =apache= utilisera du ssl pour tout se virtual-host s'il trouve un
  281. =cert-provider= à disposition.
  282. Aussi la configuration suivante est suffisante pour avoir un site publié en SSL:
  283. #+BEGIN_SRC yaml
  284. www.mydomain.org:
  285. charm: odoo
  286. apache:
  287. letsencrypt:
  288. #+END_SRC
  289. Cela équivaut à :
  290. #+BEGIN_SRC yaml
  291. www.mydomain.org:
  292. charm: odoo
  293. relations:
  294. web-proxy:
  295. myapache:
  296. domain: www.mydomain.org
  297. ssl:
  298. myletsencrypt:
  299. challenge-type: http
  300. myapache:
  301. charm: apache
  302. myletsencrypt:
  303. charm: letsencrypt
  304. #+END_SRC
  305. ***** Authentification DNS
  306. ****** créer un nouveau jeu de clé OVH pour l'authentification DNS
  307. When =letsencrypt= is setup and running::
  308. #+BEGIN_SRC sh
  309. compose --debug add letsencrypt DOMAIN [DOMAIN...]
  310. #+END_SRC
  311. Exemple de setup (dans =compose.yml=):
  312. #+BEGIN_SRC yaml
  313. letsencrypt:
  314. options:
  315. email: admin@0k.io
  316. ovh:
  317. entrypoint: ovh-eu
  318. application:
  319. key: ZZZ
  320. secret: XXX
  321. consumer_key: YYYYY
  322. #+END_SRC
  323. Le résultat est dans =/srv/datastore/data/letsencrypt/etc/letsencrypt/live/DOMAIN1=
  324. Il apparaît entre 30sec et 1 minute après la demande.
  325. ****** Vérifier que le jeu de clé ovh est bon
  326. Cette commande prend le compose yml et va vérifier que les accès sont valides:
  327. #+BEGIN_SRC shell
  328. check-compose-ovh-credentials compose.yml
  329. #+END_SRC
  330. **** Utilisation manuelle
  331. On peut utiliser le service =letsencrypt= manuellement
  332. ***** creation d'un certificat http
  333. #+BEGIN_SRC shell
  334. compose crt letsencrypt create DOMAIN [DOMAIN...]
  335. #+END_SRC
  336. Cette action crée un certificat (et force le renouvellement si existant).
  337. On peut y injecter une configuration via =--add-compose-content= si nécessaire::
  338. #+BEGIN_SRC shell
  339. compose --add-compose-content='
  340. letsencrypt:
  341. ovh:
  342. ## see: https://api.ovh.com/g934.first_step_with_api
  343. entrypoint: ovh-eu
  344. application:
  345. key: XXX
  346. secret: YYY
  347. consumer_key: ZZZ
  348. challenge-type: dns
  349. #renew-before-expiry: 30' crt letsencrypt create DOMAIN [DOMAIN...]
  350. #+END_SRC
  351. ***** Renew de tous les certificats
  352. Cela renew uniquement les certificats dont la date de validité est inférieure à 30j
  353. #+BEGIN_SRC shell
  354. compose crt letsencrypt renew
  355. #+END_SRC
  356. ***** Liste des certificats gérés et infos connexes
  357. #+BEGIN_SRC shell
  358. compose run letsencrypt crt list
  359. #+END_SRC
  360. ***** suppression d'un certificat
  361. #+BEGIN_SRC shell
  362. compose run letsencrypt certbot delete --cert-name DOMAIN
  363. #+END_SRC
  364. *** apache
  365. **** Utiliser letsencrypt
  366. Pour ajouter la fonctionalité de génération automatique de certificat
  367. via le service =letsencrypt=, il faut:
  368. - déclarer un service =letsencrypt= si cela n'est pas déjà fait
  369. - le lier au charm apache via une relation =cert-provider=:
  370. #+BEGIN_SRC yaml
  371. frontend:
  372. charm: apache
  373. relations:
  374. cert-provider: letsencrypt
  375. letsencrypt:
  376. ...
  377. #+END_SRC
  378. Et l'on peut alors utiliser la valeur =letsencrypt= (le nom du service qui implémente
  379. qui est en relation =cert-provider= avec apache) dans le champ =ssl=::
  380. #+BEGIN_SRC yaml
  381. web-proxy:
  382. apache:
  383. ...
  384. ssl: letsencrypt
  385. #+END_SRC
  386. **** Changer les clés SSL
  387. Voici un exemple de ce qu'on peut mettre dans les options de la relation apache
  388. pour déclarer le certificat que l'on souhaite:
  389. #+BEGIN_SRC yaml
  390. ssl:
  391. ca-cert:
  392. -----BEGIN CERTIFICATE-----
  393. MIIF6TCCA9GgAwIBAgIQBeTcO5Q4qzuFl8umoZhQ4zANBgkqhkiG9w0BAQwFADCB
  394. iDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCk5ldyBKZXJzZXkxFDASBgNVBAcTC0pl
  395. ...
  396. m9T8bJUox04FB6b9HbwZ4ui3uRGKLXASUoWNjDNKD/yZkuBjcNqllEdjB+dYxzFf
  397. BT02Vf6Dsuimrdfp5gJ0iHRc2jTbkNJtUQoj1iM=
  398. -----END CERTIFICATE-----
  399. -----BEGIN CERTIFICATE-----
  400. MIIFdzCCBF+gAwIBAgIQE+oocFv07O0MNmMJgGFDNjANBgkqhkiG9w0BAQwFADBv
  401. MQswCQYDVQQGEwJTRTEUMBIGA1UEChMLQWRkVHJ1c3QgQUIxJjAkBgNVBAsTHUFk
  402. ...
  403. Le9Gclc1Bb+7RrtubTeZtv8jkpHGbkD4jylW6l/VXxRTrPBPYer3IsynVgviuDQf
  404. Jtl7GQVoP7o81DgGotPmjw7jtHFtQELFhLRAlSv0ZaBIefYdgWOWnU914Ph85I6p
  405. 0fKtirOMxyHNwu8=
  406. -----END CERTIFICATE-----
  407. cert: |
  408. -----BEGIN CERTIFICATE-----
  409. MIIF/TCCBOWgAwIBAgIRALUydpTpCApfYMuJchDJv5AwDQYJKoZIhvcNAQELBQAw
  410. XzELMAkGA1UEBhMCRlIxDjAMBgNVBAgTBVBhcmlzMQ4wDAYDVQQHEwVQYXJpczEO
  411. ...
  412. lIxY9HJanHrWvjiz7+eToxXpZJtAPXTx5hxzcJrtWROlq7IJCMIhzr/EVA37jTCk
  413. Xs5S6mr0T6Dqx6MQkPATSsEEJlLH5wq3DxXQcrMqnM/WHMRYUCkoTl37sXplflHe
  414. jw==
  415. -----END CERTIFICATE-----
  416. key: |
  417. -----BEGIN PRIVATE KEY-----
  418. MIIJRQIBADANBgkqhkiG9w0BAQEFAASCCS8wggkrAgEAAoICAQDONqqTCS4CiSi/
  419. XeNpp2nUsq1299spGc7mlRs+PDrXNHscB5lUB5/yo2yEetYXrJacQ8n4NV9hkID5
  420. ...
  421. 44eHDYsofcnRbidGR+QT8PQgiiDNCkbpi2u4QnLTs0w4oW+53ZTyHYEYF2rcLbIb
  422. vRt4kR4KG6ULXrmsRA4WQjBDJ9vZw2aK+w==
  423. -----END PRIVATE KEY-----
  424. #+END_SRC
  425. **** Ajouter des rêgles particulière de apache
  426. #+BEGIN_SRC yaml
  427. relations:
  428. web-proxy:
  429. apache:
  430. ...
  431. apache-custom-rules: |
  432. RewriteEngine On
  433. RewriteCond %{HTTPS} off
  434. RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [R=302,L,QSA]
  435. #+END_SRC
  436. **** Vérification des derniers logs de renouvellement automatique
  437. #+BEGIN_SRC shell
  438. tail -f /srv/datastore/data/cron/var/log/cron/letsencrypt-renew_script.log -n 200
  439. #+END_SRC
  440. *** postgres
  441. **** utilisation de pgm
  442. récupérer l'IP du docker postgres via =docker-ip=
  443. #+BEGIN_SRC sh
  444. PGHOST=172.19.0.2 PGUSER=postgres pgm ls
  445. #+END_SRC
  446. **** base corrompue, réparation
  447. Il s'agit de lancer un =pg_resetwal=, il faut veiller à plusieurs élément:
  448. - bien arréter tout process utilisant le répertoire de =data= du
  449. postgres en question, généralement un =compose stop postgres=
  450. suffit.
  451. - utiliser l'image du postgres via son nom (habituellement =myc_postgres=).
  452. - monter le répertoire data =directement=
  453. Le tout peut se faire ainsi dans une installation qui fait tourner un postgres
  454. actuellement:
  455. #+begin_src sh
  456. compose stop postgres &&
  457. docker run --rm --entrypoint pg_resetwal \
  458. -u postgres -v /srv/datastore/data/postgres/var/lib/postgresql/data:/var/lib/postgresql/data \
  459. myc_postgres \
  460. /var/lib/postgresql/data &&
  461. docker start myc_postgres_1
  462. #+end_src
  463. *** mysql
  464. **** sur installation mailcow
  465. Le script =mailcow-backup-install= fourni via =myc-manage= s'occupe
  466. de mettre en place le dump de =mysql=, et le système pour envoyer les
  467. backup régulièrement via rsync.
  468. **** docker sans compose
  469. #+begin_src sh
  470. export MYSQL_ROOT_PASSWORD=xxx
  471. export MYSQL_CONTAINER=mailcowdockerized_mysql-mailcow_1
  472. /srv/charm-store/mysql/hooks/install.d/60-backup.sh
  473. #+end_src
  474. *** rsync-backup
  475. **** Installation du backup via compose
  476. A faire depuis le serveur ayant des services géré par =compose= à
  477. backupper.
  478. #+begin_src sh
  479. DOMAIN=xxx.fr
  480. BACKUP_SERVER=core-06.0k.io:10023
  481. ssh-keygen -t rsa -N "" -f /root/.ssh/rsync_rsa -C "rsync@$DOMAIN"
  482. cat <<EOF >> /opt/apps/myc-deploy/compose.yml
  483. rsync-backup:
  484. options:
  485. ident: $DOMAIN
  486. target: $BACKUP_SERVER
  487. private-key: |
  488. $(cat /root/.ssh/rsync_rsa | sed -r 's/^/ /g')
  489. EOF
  490. dest="$BACKUP_SERVER"
  491. dest="${dest%/*}"
  492. dest="${dest%%:*}"
  493. echo "Contacting '$dest' host, to add key in authorized key:"
  494. ssh "root@${dest}" -- compose-add-rsync-key "\"$DOMAIN\"" "\"$(cat /root/.ssh/rsync_rsa.pub)\""
  495. compose build mongo ## force the build of the new mongo image with regular dumps
  496. #+end_src
  497. **** Installation du backup sur une installe mailcow
  498. Le script suivant va s'occuper de tout, il doit être lancé
  499. depuis l'hôte faisant tourner l'installation =mailcow=.
  500. #+begin_src sh
  501. mailcow-backup-install
  502. #+end_src
  503. **** Installation du backup sur un host debian
  504. Cela fonctionnera sur tout host ayant une base debian.
  505. #+begin_src sh
  506. export DOMAIN=mail.myceliandre.fr
  507. export BACKUP_SERVER=core-06.0k.io:10023
  508. /srv/charm-store/rsync-backup/hooks/install.d/60-install.sh
  509. #+end_src
  510. Note, il est possible de spécifier des exclusions pour chaque
  511. répértoire mirroré de telle façon:
  512. #+begin_src sh
  513. cat <<EOF > /etc/mirror-dir/config.yml
  514. /home:
  515. exclude:
  516. - /*/.cache/
  517. - /*/.gvfs/
  518. - /*/.local/share/Trash/files/
  519. - /*/.Trash/
  520. - /*/.mozilla/firefox/*/Cache/
  521. - /*/.mozilla/firefox/*/storage/default/*/cache/
  522. /media/data:
  523. exclude:
  524. - /binary/games/_steam
  525. - /incoming
  526. - /.Trash*
  527. - /lost+found
  528. - /backup/device
  529. EOF
  530. #+end_src
  531. * Interventions avancées
  532. Description des process avancés d'intervention sur une installation existante.
  533. ** Modification du compose
  534. Y a un exemple en commentaire dans le =/opt/apps/myc-deploy/compose.yml=
  535. Petit exemple:
  536. #+BEGIN_SRC yaml
  537. odoo:
  538. ...
  539. docker-compose:
  540. ## Important to keep as a list: otherwise it'll overwrite charm's arguments.
  541. command:
  542. - "--log-level=debug"
  543. environment:
  544. TOTO: TUTU
  545. image: masuperimage
  546. #+END_SRC
  547. ** Troubleshooting
  548. S'il semble qu'il y ait un soucis, tu peux visualiser le =docker-compose.yml= qui est
  549. généré à la fin via l'ajout de =--debug= AVANT la commande:
  550. #+BEGIN_EXAMPLE
  551. compose --debug up odoo frontend
  552. #+END_EXAMPLE
  553. * Comment ça marche
  554. La surcouche =compose= est là pour créer un =docker-compose.yml= et le
  555. lancer tout a fait normalement. Le long du chemin, il peut aussi
  556. préparer des trucs utiles si c'est nécessaire.
  557. Il part du =compose.yml= et accède aux définitions en yaml des charms à déployer
  558. et qui sont dans /srv/charms ... (qui en fait sont dans =/opt/apps/0k-charms=).
  559. Chaque charm possède une définition générale (le =metadata.yml=) qui peut aussi
  560. injecter des trucs dans le =docker-compose.yml= final.
  561. Et puis il y a des =hooks=, qui sont juste des scripts bash qui sont
  562. lancés avec des infos dans des variables d'environment, qui vont généralement
  563. créer des trucs à l'init ou lors de liaison avec d'autres charms.