{"id":4051,"date":"2021-03-17T08:40:23","date_gmt":"2021-03-17T07:40:23","guid":{"rendered":"https:\/\/esferas.org\/msqlu\/?p=4051"},"modified":"2021-05-07T07:38:55","modified_gmt":"2021-05-07T05:38:55","slug":"finanzas-home","status":"publish","type":"post","link":"https:\/\/esferas.org\/msqlu\/2021\/03\/17\/finanzas-home\/","title":{"rendered":"finanzas.home"},"content":{"rendered":"<div class='__iawmlf-post-loop-links' style='display:none;' data-iawmlf-post-links='[{&quot;id&quot;:168,&quot;href&quot;:&quot;https:\\\/\\\/github.com\\\/firefly-iii\\\/firefly-iii&quot;,&quot;archived_href&quot;:&quot;https:\\\/\\\/web-wp.archive.org\\\/web\\\/20260415104957\\\/https:\\\/\\\/github.com\\\/firefly-iii\\\/firefly-iii&quot;,&quot;redirect_href&quot;:&quot;&quot;,&quot;checks&quot;:[{&quot;date&quot;:&quot;2026-04-21 10:54:46&quot;,&quot;http_code&quot;:206}],&quot;broken&quot;:false,&quot;last_checked&quot;:{&quot;date&quot;:&quot;2026-04-21 10:54:46&quot;,&quot;http_code&quot;:206},&quot;process&quot;:&quot;done&quot;},{&quot;id&quot;:169,&quot;href&quot;:&quot;https:\\\/\\\/docs.firefly-iii.org\\\/firefly-iii\\\/installation\\\/docker&quot;,&quot;archived_href&quot;:&quot;https:\\\/\\\/web-wp.archive.org\\\/web\\\/20231130020221\\\/https:\\\/\\\/docs.firefly-iii.org\\\/firefly-iii\\\/installation\\\/docker\\\/&quot;,&quot;redirect_href&quot;:&quot;&quot;,&quot;checks&quot;:[{&quot;date&quot;:&quot;2026-04-15 10:47:22&quot;,&quot;http_code&quot;:404},{&quot;date&quot;:&quot;2026-04-21 10:54:46&quot;,&quot;http_code&quot;:404}],&quot;broken&quot;:false,&quot;last_checked&quot;:{&quot;date&quot;:&quot;2026-04-21 10:54:46&quot;,&quot;http_code&quot;:404},&quot;process&quot;:&quot;done&quot;},{&quot;id&quot;:170,&quot;href&quot;:&quot;https:\\\/\\\/docs.firefly-iii.org\\\/firefly-iii\\\/advanced-installation\\\/backup&quot;,&quot;archived_href&quot;:&quot;&quot;,&quot;redirect_href&quot;:&quot;&quot;,&quot;checks&quot;:[],&quot;broken&quot;:false,&quot;last_checked&quot;:null,&quot;process&quot;:&quot;done&quot;},{&quot;id&quot;:171,&quot;href&quot;:&quot;https:\\\/\\\/git.astillas.net\\\/firefly-tools.git&quot;,&quot;archived_href&quot;:&quot;&quot;,&quot;redirect_href&quot;:&quot;&quot;,&quot;checks&quot;:[],&quot;broken&quot;:false,&quot;last_checked&quot;:null,&quot;process&quot;:&quot;done&quot;},{&quot;id&quot;:172,&quot;href&quot;:&quot;https:\\\/\\\/www.atareao.es\\\/podcast\\\/se-el-dueno-de-tu-economia-con-firefly\\\/#&quot;,&quot;archived_href&quot;:&quot;https:\\\/\\\/web-wp.archive.org\\\/web\\\/20260415105057\\\/https:\\\/\\\/atareao.es\\\/podcast\\\/se-el-dueno-de-tu-economia-con-firefly\\\/&quot;,&quot;redirect_href&quot;:&quot;https:\\\/\\\/atareao.es\\\/podcast\\\/se-el-dueno-de-tu-economia-con-firefly\\\/&quot;,&quot;checks&quot;:[{&quot;date&quot;:&quot;2026-04-21 10:54:49&quot;,&quot;http_code&quot;:200}],&quot;broken&quot;:false,&quot;last_checked&quot;:{&quot;date&quot;:&quot;2026-04-21 10:54:49&quot;,&quot;http_code&quot;:200},&quot;process&quot;:&quot;done&quot;},{&quot;id&quot;:173,&quot;href&quot;:&quot;https:\\\/\\\/medium.com\\\/swlh\\\/docker-and-systemd-381dfd7e4628&quot;,&quot;archived_href&quot;:&quot;&quot;,&quot;redirect_href&quot;:&quot;&quot;,&quot;checks&quot;:[],&quot;broken&quot;:false,&quot;last_checked&quot;:null,&quot;process&quot;:&quot;done&quot;},{&quot;id&quot;:174,&quot;href&quot;:&quot;https:\\\/\\\/blog.container-solutions.com\\\/running-docker-containers-with-systemd&quot;,&quot;archived_href&quot;:&quot;https:\\\/\\\/web-wp.archive.org\\\/web\\\/20260410195222\\\/https:\\\/\\\/blog.container-solutions.com\\\/running-docker-containers-with-systemd&quot;,&quot;redirect_href&quot;:&quot;&quot;,&quot;checks&quot;:[{&quot;date&quot;:&quot;2026-04-15 10:47:54&quot;,&quot;http_code&quot;:200},{&quot;date&quot;:&quot;2026-04-21 10:54:48&quot;,&quot;http_code&quot;:200}],&quot;broken&quot;:false,&quot;last_checked&quot;:{&quot;date&quot;:&quot;2026-04-21 10:54:48&quot;,&quot;http_code&quot;:200},&quot;process&quot;:&quot;done&quot;}]'><\/div>\n<p>Las cuentas de casa, en casa. <\/p>\n\n\n\n<!--more-->\n\n\n\n<p>Tiempo hac\u00eda que le ten\u00eda ganas al programa. Y tiempo hac\u00eda que hab\u00eda intentado instalarlo medio en serio, medio en pruebas, pero que abandonaba porque hay aplicaciones que necesitan un entorno m\u00e1s complejo de lo que uno pensaba. <\/p>\n\n\n\n<p>Pero un art\u00edculo en el blog de El atareao me ha hecho pensar en que pod\u00eda hacerlo de manera <em>sencilla<\/em>. Y a ello me he puesto, a ver si al menos consigo ponerlo en marcha. <\/p>\n\n\n\n<p>\u00bf El programa ? Ah, se llama <a rel=\"noreferrer noopener\" href=\"https:\/\/github.com\/firefly-iii\/firefly-iii\/\" target=\"_blank\">Firefly III<\/a>, y est\u00e1 hecho por James Cole muy a su manera. Manera que coincide con la m\u00eda y por eso le ten\u00eda tantas ganas. <\/p>\n\n\n\n<h4 class=\"wp-block-heading\">Instalaci\u00f3n<\/h4>\n\n\n\n<p>He optado por la instalaci\u00f3n v\u00eda <em>docker<\/em> porque el programa est\u00e1 hecho en PHP y requiere la versi\u00f3n 7.4 que, obviamente, a\u00fan no est\u00e1 en Debian. Empiezo a estar mosqueado con lo de los contenedores porque a la m\u00ednima la situaci\u00f3n se desmadra y lo que parece f\u00e1cil se convierte en infernal. Y eso que todo el mundo te dice, machaconamente, que levantas el contenedor en cinco segundos. T\u00e9cnicamente tienen raz\u00f3n, son segundos escasos, pero no te cuentan el resto, que es lo que m\u00e1s tiempo y m\u00e1s frustraci\u00f3n se acumula. <\/p>\n\n\n\n<p>Los ajustes que he realizado en la red de casa son:<\/p>\n\n\n\n<ul class=\"wp-block-list\"><li>DNS: crear una entrada para el servidor virtual: <em>finanzas.home<\/em>. <\/li><li>Dependencias:<ul><li>Docker<\/li><li>PostgreSQL (porque el programa puede)<\/li><li>Apache2 con funciones de proxy<\/li><\/ul><\/li><li>Instalaci\u00f3n del contenedor <\/li><li>Instalaci\u00f3n del motor de base de datos: incluyendo base de datos para el programa, usuario y credenciales de acceso<\/li><li>Creaci\u00f3n de servidor virtual para http:\/\/finanzas.home (de momento sin conexi\u00f3n cifrada)<\/li><li>Puesta en marcha del tinglado<\/li><\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">Detalles a tener en cuenta<\/h3>\n\n\n\n<p>Como todo contenedor, \u00e9ste debe ser ef\u00edmero. Cualquier informaci\u00f3n que quiera ser conservada o bien est\u00e1 en un servidor al que tenga que acceder (de base de datos o de lo que sea) o hay que emplear vol\u00famenes y el mecanismo de docker para enlazarlos con el contenedor. <\/p>\n\n\n\n<p>En el caso de Firefly III los vol\u00famenes que conviene crear son los siguientes:<\/p>\n\n\n\n<ul class=\"wp-block-list\"><li>upload: \/var\/www\/html\/storage\/upload<\/li><li>export: \/var\/www\/html\/storage\/export<\/li><\/ul>\n\n\n\n<p>El resto est\u00e1 muy bien descrito en la documentaci\u00f3n del programa <a href=\"https:\/\/docs.firefly-iii.org\/firefly-iii\/installation\/docker\/\" target=\"_blank\" rel=\"noreferrer noopener\">empleando docker<\/a>, incluyendo qu\u00e9 hay que hacer para<a href=\"https:\/\/docs.firefly-iii.org\/firefly-iii\/advanced-installation\/backup\/\" target=\"_blank\" rel=\"noreferrer noopener\"> crear copias<\/a>, por lo que no voy a a\u00f1adir si acaso alg\u00fan detalle.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Gestionando el contenedor <\/h3>\n\n\n\n<p>Se supone que los contenedores est\u00e1n hechos para que hagan una \u00fanica cosa. En el momento en el que tienes varios actuando juntos o que se necesitan para un todo es mejor emplear cosas como docker-compose. En caso contrario y dados los problemas que tiene docker para act\u00faar conjuntamente con systemd (existe incluso un software puente expreso) llegas a la conclusi\u00f3n de que es mejor un peque\u00f1o <em>script<\/em> hecho en <em>bash<\/em> para ponerlo en marcha y detenerlo. <\/p>\n\n\n\n<p>Una versi\u00f3n de este script la mantengo actualizada en mi repositorio: <a href=\"https:\/\/git.astillas.net\/firefly-tools.git\" target=\"_blank\" rel=\"noreferrer noopener\">https:\/\/git.astillas.net\/firefly-tools.git<\/a><\/p>\n\n\n\n<pre title=\"\/usr\/bin\/firefly-ctl\" class=\"wp-block-code\"><code lang=\"bash\" class=\"language-bash\">#!\/usr\/bin\/env bash\n\n# Variables\nVERSION=0.2\nOPERATION=${1:-status}\nENVFILE=${2:-\/etc\/firefly_iii\/environment}\n\n# Par\u00e1metros para docker\nfirefly_name=\"firefly\"\nfirefly_image=\"jc5x\/firefly-iii:latest\"\nfirefly_ports=\"-p 8080:8080\"\nfirefly_volumes=\"-v firefly_iii_upload:\/var\/www\/html\/storage\/upload \\\n -v firefly_iii_export:\/var\/www\/html\/storage\/export\"\nfirefly_env=${ENVFILE}\n\n# Funciones \n_log() {\n local msg=\"$*\"\n echo \"${msg}\"\n}\n_die() {\n local msg=\"$*\"\n echo \"$(basename $0): ERROR ${msg}\" &gt;&amp;2\n exit 1\n}\n_docker_run() {\n local op=$1\n case ${op} in \n start)\n docker run --env-file ${firefly_env} --name ${firefly_name} \\\n --rm true \\\n ${firefly_volumes} \\\n ${firefly_ports} \\\n ${firefly_image}\n if [ $? -ne 0 ]; then\n _die \"no he podido poner en marcha el contenedor ${firefly_image}\"\n fi\n ;;\n stop)\n docker stop --name ${firefly}\n if [ $? -ne 0 ]; then\n _die \"no he podido detener el contenedor ${firefly_image}\"\n fi\n ;;\n esac\n}\n_docker_status() {\n running=$(docker ps -q | egrep ${firefly_name})\n if [ -z \"${running}\" ]; then \n return 1\n else\n return 0 \n fi\n}\n_check_volumes() {\n upload=$(docker volume ls -q | egrep firefly_iii_upload)\n if [ -z \"${upload}\" ]; then \n docker volume create firefly_iii_upload || \\\n _die \"no puedo crear el volumen firefly_iii_upload\"\n fi\n exports=$(docker volume ls -q | egrep firefly_iii_exports)\n if [ -z \"${exports}\" ]; then \n docker volume create firefly_iii_exports || \\\n _die \"no puedo crear el volumen firefly_iii_exports\"\n fi\n}\n\n# Comprobamos el archivo de configuraci\u00f3n\nif [ -z \"${ENVFILE}\" ]; then \n _die \"el archivo de configuraci\u00f3n en est\u00e1 definido\"\nfi\nif [ ! -r \"${ENVFILE}\" ]; then \n _die \"no tengo acceso al archivo de configuraci\u00f3n ${ENVFILE}\"\nfi\n\n# Seg\u00fan la operaci\u00f3n \ncase ${OPERATION} in \nstart)\n _check_volumes\n _docker_run \"start\"\n ;;\nstop)\n _docker_status\n if [ $? -eq 0 ]; then\n _docker_run \"stop\"\n else\n _die \"${firefly_name} is not running\"\n fi\n ;;\nstatus)\n _docker_status\n if [ $? -ne 0 ]; then \n _log \"${firefly_name} is not running\"\n else\n _log \"${firefly_name} is running\" \n fi\n ;;\n*)\n _die \"${OPERATION} no es una operaci\u00f3n reconocida\"\n ;;\nesac<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">Servidor virtual en apache2<\/h3>\n\n\n\n<p>Se emplea el m\u00f3dulo proxy de apache y la configuraci\u00f3n, sin certificado digital porque estoy en una red dom\u00e9stica, ser\u00eda la siguiente:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code lang=\"apacheconf\" class=\"language-apacheconf\">&lt;VirtualHost    *:80&gt;\n        ServerName      finanzas.home\n        ServerAdmin     root@home\n\n       LogLevel info\n       ErrorLog        \/var\/log\/apache2\/finanzas.home\/error.log\n       CustomLog       \/var\/log\/apache2\/finanzas.home\/access.log combined\n\n        ProxyPreserveHost On \n        ProxyPass \/ http:\/\/localhost:8080\/\n        ProxyPassReverse \/ http:\/\/localhost:8080\/\n&lt;\/VirtualHost&gt;\n<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">Y ahora a emplearlo <\/h3>\n\n\n\n<p>He visto que existe una aplicaci\u00f3n para Android que es capaz de conectarse (incluyendo certificados autofirmados) y un buen pu\u00f1ado de p\u00e1ginas de referencia de uso. Cuando empiece a usarlo en serio volver\u00e9 a escribir sobre ello. <\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Referencias<\/h3>\n\n\n\n<ul class=\"wp-block-list\"><li><a rel=\"noreferrer noopener\" href=\"https:\/\/www.atareao.es\/podcast\/se-el-dueno-de-tu-economia-con-firefly\/#\" target=\"_blank\">261 &#8211; Se el due\u00f1o de tu econom\u00eda con Firefly<\/a><\/li><li><a rel=\"noreferrer noopener\" href=\"https:\/\/docs.firefly-iii.org\/firefly-iii\/installation\/docker\/\" target=\"_blank\">Instalaci\u00f3n de Firefly III con docker<\/a><\/li><li><a rel=\"noreferrer noopener\" href=\"https:\/\/medium.com\/swlh\/docker-and-systemd-381dfd7e4628\" target=\"_blank\">Docker y systemd<\/a><\/li><li><a href=\"https:\/\/blog.container-solutions.com\/running-docker-containers-with-systemd\" data-type=\"URL\" data-id=\"https:\/\/blog.container-solutions.com\/running-docker-containers-with-systemd\" target=\"_blank\" rel=\"noreferrer noopener\">Running Docker Containers with Systemd<\/a><\/li><\/ul>\n","protected":false},"excerpt":{"rendered":"<p>Las cuentas de casa, en casa.<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_import_markdown_pro_load_document_selector":0,"_import_markdown_pro_submit_text_textarea":"","webmentions_disabled_pings":false,"webmentions_disabled":false,"footnotes":""},"categories":[2],"tags":[75,579,898,1092,980,180,1093,1003],"class_list":["post-4051","post","type-post","status-publish","format-standard","hentry","category-software","tag-apache","tag-contabilidad","tag-docker","tag-firefly-iii","tag-postgresql","tag-proxy-inverso","tag-red-casera","tag-servidor-casero"],"_links":{"self":[{"href":"https:\/\/esferas.org\/msqlu\/wp-json\/wp\/v2\/posts\/4051","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/esferas.org\/msqlu\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/esferas.org\/msqlu\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/esferas.org\/msqlu\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/esferas.org\/msqlu\/wp-json\/wp\/v2\/comments?post=4051"}],"version-history":[{"count":8,"href":"https:\/\/esferas.org\/msqlu\/wp-json\/wp\/v2\/posts\/4051\/revisions"}],"predecessor-version":[{"id":4062,"href":"https:\/\/esferas.org\/msqlu\/wp-json\/wp\/v2\/posts\/4051\/revisions\/4062"}],"wp:attachment":[{"href":"https:\/\/esferas.org\/msqlu\/wp-json\/wp\/v2\/media?parent=4051"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/esferas.org\/msqlu\/wp-json\/wp\/v2\/categories?post=4051"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/esferas.org\/msqlu\/wp-json\/wp\/v2\/tags?post=4051"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}