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.

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