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.

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