Skip to content
This repository has been archived by the owner on Jul 1, 2024. It is now read-only.

Dockerització del Mailtoticket #196

Open
wants to merge 5 commits into
base: master
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
9 changes: 9 additions & 0 deletions .fetchmailrc
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
set logfile "/tmp/fetchmail.log"
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

En un contenidor de docker els logs han d'anar a stdout i stderr perquè el sistema de fitxers és efímer. Per tant crec que aquesta línia no hi hauria de ser.

Copy link
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

No tinc controlat el tema del logging en contenidors. Si treient l'entrada "set logfile" ja s'envien els errors per stdout, doncs es fàcil de solucionar.

poll imap.upc.edu protocol imap:

username "suport.unitat"
password "contrasenya"
folder "mailtoticket"
mda "/bin/sh -c 'cat | /usr/local/bin/python /mailtoticket/mailtoticket.py'"
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Per què caldria posar /bin/sh -c 'cat | ...' enlloc de cridar el python directament amb el mailtoticket com a argument, tal com indica la documentació del wiki?

Copy link
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Per alguna raó no em funcionava amb la info de la wiki i esbrinant exemples de configuració de fetchmail, aquesta opció em va funcionar. Puc tornar a provar per si va ser una falsa impressió.

ssl
nokeep
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Jo anomenaria l'exemple de configuració del fetchmail d'una altra manera que:

  • no comenci amb un punt perquè el fitxer no quedi ocult
  • el nom digui clarament que és un exemple, e.g. fetchmailrc.example

Copy link
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Tens raó, es millor així.

28 changes: 28 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -72,6 +72,34 @@ El comportament del programa és executar una sèrie de filtres sobre el correu
* **Nou Extern**
* Crea tiquets per adreces desconegudes amb un usuari predeterminat per configuració.
* És una extensió del filtre **Nou**.



Dockerització del MailToTicket
------------------------------
Dockerfile per la generació d'una imatge amb els components necessaris per el funcionament del Mailtoticket.
S'ha intentat que el contenidor resultant no demani cap configuració post "run"
Les proves de funcionament s'han fet amb la branca amb suport a l'APP rest d'identitat. No s'han provat altres versions.
Un cop aquesta branca es passi a master, s'haurà de modificar l'entrada del dockerfile corresponent.

L'imatge resultatnt inclou:
python packages
fetchmail
cron

Procediments del dockerfile
---------------------------
1- Copiar a la mateixa carpeta del dockerfile els fitxers:
settings_default.py - El fitxer de configuració del mailtoticket. Ha de tenir aquest nom
entrypoint.sh - Conté la configuració del crontab
.fetchmailrc - Configuració del fetchmail per a "descarregar" els mails de la carpeta mailtoticket del correu de suport

2- Modificar aquests arxius per afegir la informació necessària per la instància

3- En la mateixa carpeta del dockerfile, executar:

docker build . -t mailtoticket


Llicència
---------
Expand Down
20 changes: 20 additions & 0 deletions dockerfile
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
FROM python:2.7
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

En general s'acostuma a anomenar el fixer Dockerfile amb la D majúscula. Crec que seria bona idea canviar-li el nom, sobretot si volem que la gent del docker hub el trobin per fer imatges automàtiques.

Copy link
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Es fàcil de solucionar.

RUN git clone --single-branch --branch feature_api_rest_identitat https://github.com/UPC/mailtoticket.git
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Crec que és mala idea clonar el repositori durant la construcció de la imatge, sobretot si el motiu és generar la imatge amb el codi d'una branca concreta.

Copy link
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

La meva idea era generar una imatge out-of-the-box (mínim de passos), de cara a fer les proves m'anava bé.
Per adaptar el dockerfile en un context de branca master amb fetchmail inclòs, es pot canviar el git clone per un COPY de tot.
Llavors el procés seria:
1- Git clone
2- Modificar els settings de mailtoticket i fetchmail
3- Fer el build


WORKDIR /mailtoticket

COPY settings_default.py .
COPY entrypoint.sh .
COPY .fetchmailrc /root/

RUN apt-get update
RUN apt-get upgrade -y
RUN apt-get install -y fetchmail
RUN apt-get install -y cron
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Podem debatre si el fetchmail hauria d'estar dins el mateix contenidor que el mailtoticket (jo penso que haurien d'estar en contenidors separats) però el que segur que no té sentit és tenir un contenidor amb un cron només per executar el fetchmail.

Si el contenidor s'executa a un servidor, aquest ja tindrà un cron des del que es pot executar el contenidor amb docker run. Si el contenidor està a mycontainers, allà ja hi ha serveis de tipus cron que poden executar contenidors periòdicament. A més a més, el fetchmail té un mode dimoni que també podria ser interessant de valorar.

Com més senzill sigui el contenidor més fàcil serà de mantenir, debuggar, operar i escalar, per tant crec que el cron sobra.

Copy link
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

No et sabria dir quina configuració implicaria tenir el fetchmail i el mailtoticket en dockers separats per que la cosa funcioni. Jo apostaria per tenir els dos en el mateix docker, sigui tirant del dimoni de fetchmail o bé pensant en el temporitzador que teniu muntat en mycontainers. Tinc pendent demanar l'accés a aquest servei per a fer proves.

RUN pip install --no-cache-dir -r requirements.txt

RUN chmod 755 entrypoint.sh
RUN chmod 600 /root/.fetchmailrc


ENTRYPOINT /mailtoticket/entrypoint.sh
10 changes: 10 additions & 0 deletions entrypoint.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
#!/bin/bash
echo "Mailtoticket has been started"

# Setup a cron schedule
echo "[email protected]
*/5 * * * * /usr/bin/fetchmail --silent
# This extra line makes it a valid cron" > scheduler.txt

crontab scheduler.txt
cron -f