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.

843 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 / mailcow
  518. - un serveur =compose= est un serveur ayant des services géré par =compose= à
  519. backupper.
  520. - un serveur =mailcow= est un serveur faisant tourner l'installation =mailcow=.
  521. A faire depuis le serveur compose ou mailcow:
  522. #+begin_src sh
  523. vps install backup core-06.0k.io:10023
  524. #+end_src
  525. Ici =core-06.0k.io:10023= est le serveur cible d'archivage (à modifier
  526. si nécessaire).
  527. A la fin de l'opération, une commande est proposée pour ajouter
  528. facilement la nouvelle clé à l'hôte s'occupant de l'archivage.
  529. Cette commande doit être executée sur le serveur d'archivage et suivie
  530. d'un =compose up=. Plusieurs clés peuvent être ajoutée avant de
  531. redémarrer le service d'archivage du coté du serveur.
  532. Dans le cas d'un VPS sur installation compose, il s'agira également de
  533. relancer sur le =vps= lui-même, un =compose up= pour intégrer et
  534. lancer le nouveau container de backup.
  535. Une fois la clé enregistrée du coté du serveur d'archivage, un premier
  536. archivage peut être déclenché via:
  537. #+begin_quote
  538. vps backup
  539. #+end_quote
  540. Ceci permet de lancer le premier backup et de valider que tout fonctionne
  541. **** Installation du backup sur un host debian
  542. Cela fonctionnera sur tout host ayant une base debian.
  543. #+begin_src sh
  544. DOMAIN=mail.xxxx.fr
  545. BACKUP_SERVER=core-06.0k.io:10023
  546. cd /srv/charm-store/rsync-backup/
  547. ./hooks/install.d/60-install.sh
  548. #+end_src
  549. Note, il est possible de spécifier des exclusions pour chaque
  550. répértoire mirroré de telle façon:
  551. #+begin_src sh
  552. cat <<EOF >> /etc/mirror-dir/config.yml
  553. /home:
  554. exclude:
  555. - /*/.cache/
  556. - /*/.gvfs/
  557. - /*/.local/share/Trash/files/
  558. - /*/.Trash/
  559. - /*/.mozilla/firefox/*/Cache/
  560. - /*/.mozilla/firefox/*/storage/default/*/cache/
  561. /media/data:
  562. exclude:
  563. - /binary/games/_steam
  564. - /incoming
  565. - /.Trash*
  566. - /lost+found
  567. - /backup/device
  568. EOF
  569. #+end_src
  570. * Interventions avancées
  571. Description des process avancés d'intervention sur une installation existante.
  572. ** Modification du compose
  573. Y a un exemple en commentaire dans le =/opt/apps/myc-deploy/compose.yml=
  574. Petit exemple:
  575. #+BEGIN_SRC yaml
  576. odoo:
  577. ...
  578. docker-compose:
  579. ## Important to keep as a list: otherwise it'll overwrite charm's arguments.
  580. command:
  581. - "--log-level=debug"
  582. environment:
  583. TOTO: TUTU
  584. image: masuperimage
  585. #+END_SRC
  586. ** Troubleshooting
  587. S'il semble qu'il y ait un soucis, tu peux visualiser le =docker-compose.yml= qui est
  588. généré à la fin via l'ajout de =--debug= AVANT la commande:
  589. #+BEGIN_EXAMPLE
  590. compose --debug up odoo frontend
  591. #+END_EXAMPLE
  592. * Comment ça marche
  593. La surcouche =compose= est là pour créer un =docker-compose.yml= et le
  594. lancer tout a fait normalement. Le long du chemin, il peut aussi
  595. préparer des trucs utiles si c'est nécessaire.
  596. Il part du =compose.yml= et accède aux définitions en yaml des charms à déployer
  597. et qui sont dans /srv/charms ... (qui en fait sont dans =/opt/apps/0k-charms=).
  598. Chaque charm possède une définition générale (le =metadata.yml=) qui peut aussi
  599. injecter des trucs dans le =docker-compose.yml= final.
  600. Et puis il y a des =hooks=, qui sont juste des scripts bash qui sont
  601. lancés avec des infos dans des variables d'environment, qui vont généralement
  602. créer des trucs à l'init ou lors de liaison avec d'autres charms.