<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Koffer. </title>
    <description>The latest articles on DEV Community by Koffer.  (@koffer).</description>
    <link>https://dev.to/koffer</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F685806%2Fe60c0cec-1641-4886-9496-02e35ddb6a2d.jpg</url>
      <title>DEV Community: Koffer. </title>
      <link>https://dev.to/koffer</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/koffer"/>
    <language>en</language>
    <item>
      <title>AKKY, DIGITAL OCEAN DNS, AND letsencrypt CERTIFICATES.</title>
      <dc:creator>Koffer. </dc:creator>
      <pubDate>Thu, 25 Sep 2025 16:27:19 +0000</pubDate>
      <link>https://dev.to/koffer/akky-digital-ocean-dns-and-letsencrypt-certificates-4o66</link>
      <guid>https://dev.to/koffer/akky-digital-ocean-dns-and-letsencrypt-certificates-4o66</guid>
      <description>&lt;p&gt;The LetSenCrypt certificate for a .com.mx domain hosted on Digital Ocean (on a droplet) expired, and I couldn't re-register it. I was getting the error "DNSSEC: DNSKEY Missing" and that IPv6 wasn't configured. Below I'll go through what I discovered step by step:&lt;/p&gt;

&lt;p&gt;1- First I added some AAAA records and configured the IPv6 address for the droplet to work, but it didn't work (although this helped later).&lt;br&gt;
2- I discovered that in the domain configuration at AKKY (the Mexican company that manages MX domains), they had added an option called REGISTRO DS (Delegation Signer), which adds the data for a KSK key, which adds security to the domain registration. The problem is that this option, which appears to be the same as DNSSEC, is not compatible with Digital Ocean's DNS, so I had to delete that record.&lt;br&gt;
3- Checking the DNS connection on a site called DNSViz, it indicated that it was already configured. The DNS issue was resolved.&lt;br&gt;
4- The certificate still wasn't generated, but the error changed to one indicating that IPv6 was not authorized. All I did was add IPv6 to the NGINX server definition so it would use IPv6 along with IPv4.&lt;/p&gt;

&lt;p&gt;&lt;code&gt;server {&lt;br&gt;
listen 443 ssl http2;&lt;br&gt;
listen [::]:443 ssl http2; # Listen on all available IPv6 addresses on port 443&lt;br&gt;
server_name your_domain.com www.your_domain.com;&lt;br&gt;
 ... other configurations&lt;br&gt;
}&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;With that, the certificate renewal worked, and the domain was visible again.&lt;/p&gt;

&lt;h1&gt;
  
  
  Spanish version AKKY, DIGITAL OCEAN Y CERTIFICADOS letsencrypt.
&lt;/h1&gt;

&lt;p&gt;A un dominio .com.mx hospedado en digital ocean (en un droplet) se le venció el certificado de letsencrypt y no podia volver a registrarlo me marcaba el error :DNSSEC: DNSKEY Missing" y que ipv6 no estaba configurado. a continuación voy por pasos lo que fui descubriendo:&lt;/p&gt;

&lt;p&gt;1- agregue unos records AAAA y configure la dirección ipv6 para que funcionara el droplet, pero no funciono (aun que mas adelante esto me sirvio).&lt;br&gt;
2- Descubri que en al configuración del dominio en AKKY (la empresa mexicana que administra los dominios mx) agregaron una opción que se llama REGISTRO DS (Delegation Signer) y que agrega los datos de una llave ksk que agrega seguridad a el registro del dominio. El problema es que esta opción que parece ser lo mismo que DNSSEC, no es compatible con el DNS de Digital ocean asi que tuve que borrar ese registro.&lt;br&gt;
3- Revisando la conexion de dns en un sitio que se llama DNSViz me indicaba que ya estaba resuelto el problema del DNS.&lt;br&gt;
4- El certificado de todas manera no se generaba, pero cambio el error a uno en el que me indicaba que la ipv6 no esta autorizada. Lo unico que hice fue agregar en la definición del servidor NGINX para que usara ipv6 junto con ipv4&lt;/p&gt;

&lt;p&gt;&lt;code&gt;server {&lt;br&gt;
    listen 443 ssl http2;&lt;br&gt;
    listen [::]:443 ssl http2; # Listen on all available IPv6 addresses on port 443&lt;br&gt;
    server_name your_domain.com www.your_domain.com;&lt;br&gt;
     ... other configurations&lt;br&gt;
}&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;con eso ya funciono la renovación de certificado y el dominio se volvio a ver.&lt;/p&gt;

</description>
      <category>letsencrypt</category>
      <category>dnssec</category>
      <category>akky</category>
      <category>droplet</category>
    </item>
    <item>
      <title>How to configure akky email with Digital ocean hosting</title>
      <dc:creator>Koffer. </dc:creator>
      <pubDate>Sun, 21 Jul 2024 22:50:51 +0000</pubDate>
      <link>https://dev.to/koffer/how-to-configure-akky-email-with-digital-ocean-hosting-456h</link>
      <guid>https://dev.to/koffer/how-to-configure-akky-email-with-digital-ocean-hosting-456h</guid>
      <description>&lt;p&gt;Sometimes you have to connect service from a Mexican Domain Registrar with a US web histoing company and some problems arise. Let's be clear, the problem is that &lt;a href="https://www.akky.mx" rel="noopener noreferrer"&gt;AKKY&lt;/a&gt;'s domain and email administration is a bit confusing, which is why I am writing this text, so This is a brief documentation.&lt;/p&gt;

&lt;p&gt;The basic idea is that you change the Akky DNS server to the &lt;a href="https://www.digitalocean.com" rel="noopener noreferrer"&gt;Digital Ocean&lt;/a&gt; servers and from that side you configure the email with the data provided by AKKY.&lt;/p&gt;

&lt;p&gt;the values should remain as&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;ns1.digitalocean.com&lt;/li&gt;
&lt;li&gt;ns2.digitalocean.com&lt;/li&gt;
&lt;li&gt;ns3.digitalocean.com&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Steps to follow
&lt;/h2&gt;

&lt;p&gt;1- The first thing is to have a DOMAIN purchased in AKKY, generally it will be a &lt;strong&gt;.com.mx&lt;/strong&gt; or &lt;strong&gt;.mx&lt;/strong&gt; domain, this is almost a prerequisite.&lt;/p&gt;

&lt;p&gt;2 The next step is to buy an email address in AKKY and follow the steps to configure it, in that part it is not complicated, there is a page with documentation&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.akky.mx/ayuda/temas-de-ayuda?tema=E-mail" rel="noopener noreferrer"&gt;AKKY Email Documentation in spanish&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;AKKY assumes that the domain is hosted at least with the DNS addresses in AKKY and not with another hosting provider, but on that same documentation page it indicates which values ​​will be used in digital ocean.&lt;/p&gt;

&lt;p&gt;EMAIL records:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;&lt;/th&gt;
&lt;th&gt;&lt;/th&gt;
&lt;th&gt;&lt;/th&gt;
&lt;th&gt;&lt;/th&gt;
&lt;th&gt;&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Nombre/Host/Alias&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;TTL&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;Tipo&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;Prioridad&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;Valor/Destino&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;@ o dejar en blanco&lt;/td&gt;
&lt;td&gt;3600 o 1 hora&lt;/td&gt;
&lt;td&gt;MX&lt;/td&gt;
&lt;td&gt;10&lt;/td&gt;
&lt;td&gt;mx001.cloudus.xion.oxcs.net&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;@ o dejar en blanco&lt;/td&gt;
&lt;td&gt;3600 o 1 hora&lt;/td&gt;
&lt;td&gt;MX&lt;/td&gt;
&lt;td&gt;10&lt;/td&gt;
&lt;td&gt;mx002.cloudus.xion.oxcs.net&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;@ o dejar en blanco&lt;/td&gt;
&lt;td&gt;3600 o 1 hora&lt;/td&gt;
&lt;td&gt;MX&lt;/td&gt;
&lt;td&gt;10&lt;/td&gt;
&lt;td&gt;mx003.cloudus.xion.oxcs.net&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;@ o dejar en blanco&lt;/td&gt;
&lt;td&gt;3600 o 1 hora&lt;/td&gt;
&lt;td&gt;MX&lt;/td&gt;
&lt;td&gt;10&lt;/td&gt;
&lt;td&gt;mx004.cloudus.xion.oxcs.net&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;&lt;/th&gt;
&lt;th&gt;&lt;/th&gt;
&lt;th&gt;&lt;/th&gt;
&lt;th&gt;&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Nombre/Host/Alias&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;TTL&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;Tipo&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;Valor/Destino&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;@ o dejar en blanco&lt;/td&gt;
&lt;td&gt;3600 o 1 hora&lt;/td&gt;
&lt;td&gt;TXT&lt;/td&gt;
&lt;td&gt;v=spf1 include:spf.cloudus.xion.oxcs.net ~all&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;These values ​​may change and it is best to review the values ​​in the AKKY documentation.&lt;/p&gt;

&lt;p&gt;3- In the administration of the domain in digital ocean, the MX records must be created with the values ​​above and the A records are left with the values ​​of digital ocean. In this way, the email has been configured with AKKY and the site in digital ocean.&lt;/p&gt;

&lt;p&gt;It is important not to get confused with the advanced DNS section that appears in the AKKY administration where it seems that everything can be configured, that section only works if you want to continue using all the services in akky and only add a record.&lt;/p&gt;

&lt;h3&gt;
  
  
  Version en español
&lt;/h3&gt;

&lt;h1&gt;
  
  
  Como configurar el correo de akky con el hospedaje de Digital ocean
&lt;/h1&gt;

&lt;p&gt;Algunas veces se tiene que conectar servicio de una compañia mexicana con una compañia de hospedaje web de USA y surgen algunos problemas. En realdiad seamos claro el problema esta en que la administración de dominios y correo de AKKY es un poco confusa, preo en parte por eso escribo este texto, para que quede una breve documentación.&lt;/p&gt;

&lt;p&gt;La idea basica es que se cambian el servidor de DNS de akky a los servidores de digital ocean y de ese lado se configura el correo con los datos que da AKKY.&lt;/p&gt;

&lt;p&gt;deben quedar como&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;ns1.digitalocean.com&lt;/li&gt;
&lt;li&gt;ns2.digitalocean.com&lt;/li&gt;
&lt;li&gt;ns3.digitalocean.com&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Pasos a seguir
&lt;/h2&gt;

&lt;p&gt;1- Lo primero es tener un DOMINIO comprado en AKKY, generalmente sera un dominio &lt;strong&gt;.com.mx&lt;/strong&gt; o &lt;strong&gt;.mx&lt;/strong&gt; esto es casi un prerequisito.&lt;/p&gt;

&lt;p&gt;2 El siguiente paso es contratar una dirección de correo en AKKY y seguir los pasos para configurarlo, en esa parte no es complicado existe una pagina con documentación&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.akky.mx/ayuda/temas-de-ayuda?tema=E-mail" rel="noopener noreferrer"&gt;Documentación email AKKY&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;AKKY asume que el dominio esta alojado por lo menos con las direcciones DNS en AKKY y no con otro proveedor de hospedaje, pero en esa misma pagina de documentación indica cuales son los valores que se usaran en digital ocean.&lt;/p&gt;

&lt;p&gt;Son estos:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;&lt;/th&gt;
&lt;th&gt;&lt;/th&gt;
&lt;th&gt;&lt;/th&gt;
&lt;th&gt;&lt;/th&gt;
&lt;th&gt;&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Nombre/Host/Alias&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;TTL&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;Tipo&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;Prioridad&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;Valor/Destino&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;@ o dejar en blanco&lt;/td&gt;
&lt;td&gt;3600 o 1 hora&lt;/td&gt;
&lt;td&gt;MX&lt;/td&gt;
&lt;td&gt;10&lt;/td&gt;
&lt;td&gt;mx001.cloudus.xion.oxcs.net&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;@ o dejar en blanco&lt;/td&gt;
&lt;td&gt;3600 o 1 hora&lt;/td&gt;
&lt;td&gt;MX&lt;/td&gt;
&lt;td&gt;10&lt;/td&gt;
&lt;td&gt;mx002.cloudus.xion.oxcs.net&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;@ o dejar en blanco&lt;/td&gt;
&lt;td&gt;3600 o 1 hora&lt;/td&gt;
&lt;td&gt;MX&lt;/td&gt;
&lt;td&gt;10&lt;/td&gt;
&lt;td&gt;mx003.cloudus.xion.oxcs.net&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;@ o dejar en blanco&lt;/td&gt;
&lt;td&gt;3600 o 1 hora&lt;/td&gt;
&lt;td&gt;MX&lt;/td&gt;
&lt;td&gt;10&lt;/td&gt;
&lt;td&gt;mx004.cloudus.xion.oxcs.net&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;&lt;/th&gt;
&lt;th&gt;&lt;/th&gt;
&lt;th&gt;&lt;/th&gt;
&lt;th&gt;&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Nombre/Host/Alias&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;TTL&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;Tipo&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;Valor/Destino&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;@ o dejar en blanco&lt;/td&gt;
&lt;td&gt;3600 o 1 hora&lt;/td&gt;
&lt;td&gt;TXT&lt;/td&gt;
&lt;td&gt;v=spf1 include:spf.cloudus.xion.oxcs.net ~all&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Estos valores pueden cambiar y lo mejor es irse a revisar los valores en la documentación de AKKY.&lt;/p&gt;

&lt;p&gt;3- En la administración de el dominio en Digital Ocean se tienen que crear los records MX con los valores de arriba y los records A se quedan con los valores de digial ocean de esta manera se tienen configurado el correo con AKKY y el sitio en digital ocean.&lt;/p&gt;

&lt;p&gt;Es importante no confundirse con la sección de DNS avanzado que aparece en la adminsitración de AKKY donde pareciera que se puede configurar todo, eso solo sirve si se quiere seguir usando todos los servicios en AKKY y solo agregar algun record adicional.&lt;/p&gt;



</description>
      <category>dns</category>
      <category>mx</category>
    </item>
    <item>
      <title>local installation of Open Journal Systems (OJS) with DDEV</title>
      <dc:creator>Koffer. </dc:creator>
      <pubDate>Sun, 08 Oct 2023 00:55:55 +0000</pubDate>
      <link>https://dev.to/koffer/local-installation-of-open-journal-systems-ojs-with-ddev-178j</link>
      <guid>https://dev.to/koffer/local-installation-of-open-journal-systems-ojs-with-ddev-178j</guid>
      <description>&lt;p&gt;Like some know DDEV is an open source tool for launching local web development environments. DDev work by default to install Drupal sites, Wordpress, Typo3 and Laravel (and other cms projects) but OJS is not in the list. OJS is a specialized CMS to publish scientific journals.&lt;/p&gt;

&lt;p&gt;To get a local installation this is the steps:&lt;br&gt;
1-Get OJS 3.4 program for the &lt;a href="https://pkp.sfu.ca/software/ojs/download/" rel="noopener noreferrer"&gt;pkp site&lt;/a&gt;.&lt;br&gt;
2-Locally create a directory and get there all OJS files, this is the directory where you will run the ddev project.&lt;br&gt;
Actually go inside it using terminal &lt;/p&gt;

&lt;p&gt;3- Follow the &lt;a href="https://ddev.readthedocs.io/en/latest/users/project/" rel="noopener noreferrer"&gt;DDEV instructions&lt;/a&gt; to begin with a PHP project&lt;/p&gt;

&lt;p&gt;3.1 Write the command: &lt;code&gt;ddev config&lt;/code&gt; to begin the project. DDEV will give you the kind of project you can begin with it.&lt;br&gt;
Choose (write) PHP. DDev will ask for another information like project name etc. DDEV begin downloading and creating docker images to run the project.&lt;br&gt;
3.2 Type the command: &lt;code&gt;CD .ddev&lt;/code&gt; to go inside the ddev project folder.&lt;br&gt;
Then type the command: &lt;code&gt;nano config.yaml&lt;/code&gt; (or vim or the editor you like to use) to change the configuration of project.&lt;br&gt;
3.3 You need to change the php, web server and database the project use, to get the closer you can, to OJS requirements. This is the configuration I use:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;name: ojs&lt;br&gt;
type: php&lt;br&gt;
docroot: ""&lt;br&gt;
php_version: "8.0"&lt;br&gt;
webserver_type: apache-fpm&lt;br&gt;
xdebug_enabled: false&lt;br&gt;
additional_hostnames: []&lt;br&gt;
additional_fqdns: []&lt;br&gt;
database:&lt;br&gt;
    type: postgres&lt;br&gt;
    version: "10"&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Check your configuration very carefully before copying this config. The most important part is to get a php 8.0, apache-fpm and postgres 10.&lt;/p&gt;

&lt;p&gt;do the change and save configuration file.&lt;br&gt;
Return to main directory (where you copy ojs files)&lt;/p&gt;

&lt;p&gt;Dont modify any other information insde conf file.&lt;/p&gt;

&lt;p&gt;4- Type the command: &lt;code&gt;ddev start&lt;/code&gt; to run DDEV. If all the configuration change are correct you will get a OJS ready to install.&lt;br&gt;
Type the command: &lt;code&gt;ddev launch&lt;/code&gt;to open the browser and get the OJS installation page.&lt;/p&gt;

&lt;p&gt;5- The OJS installation page will ask for all the information require to install, like a username and a password and database information.&lt;br&gt;
The basic problem I get to install OJS was to get all the requirements needed, many of the version of database OJS ask for are old. I try but cant install the program with mysql, but I get a installation with postgress.&lt;br&gt;
It is important to get database information to not get frustrated. The fast answer is DDEV create a database with name &lt;code&gt;DB&lt;/code&gt; a user &lt;code&gt;DB&lt;/code&gt; with a password &lt;code&gt;DB&lt;/code&gt; and dont write &lt;code&gt;localhost&lt;/code&gt; to find the database, type &lt;code&gt;DB&lt;/code&gt;, really easy dont? if you want to know more about what DDEV is running just type the command: &lt;code&gt;ddev describe&lt;/code&gt; to get all the information of the project.&lt;br&gt;
After all this configuration you will get a OJS site to test local.&lt;/p&gt;

</description>
    </item>
    <item>
      <title>Join images with ImageMagick and automate with Automator</title>
      <dc:creator>Koffer. </dc:creator>
      <pubDate>Fri, 20 Jan 2023 03:54:15 +0000</pubDate>
      <link>https://dev.to/koffer/join-images-with-imagemagick-and-automate-with-automator-3pl7</link>
      <guid>https://dev.to/koffer/join-images-with-imagemagick-and-automate-with-automator-3pl7</guid>
      <description>&lt;h2&gt;
  
  
  Objective
&lt;/h2&gt;

&lt;p&gt;Throwing images to a folder and the script generates a single image with all the images that were copied and this image is optimized.&lt;/p&gt;

&lt;h2&gt;
  
  
  Script with ImageMagick
&lt;/h2&gt;

&lt;p&gt;The main script is create with imagemagick. I find a good example in this &lt;a href="https://superuser.com/questions/290656/vertically-stack-multiple-images-using-imagemagick" rel="noopener noreferrer"&gt;Link&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;This is the code:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;convert -append IMG_*.JPG out.jpg&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;The &lt;strong&gt;append&lt;/strong&gt; command is the one that allows you to join the images. If you use &lt;strong&gt;-append&lt;/strong&gt; joins them horizontally and if you use &lt;strong&gt;+append&lt;/strong&gt; the images align vertically.&lt;/p&gt;

&lt;p&gt;the optimized version is this one:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;convert -append IMG_*.JPG -quality 65 -strip -interlace JPEG out-ok.jpg&lt;/code&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Trigger folder
&lt;/h2&gt;

&lt;p&gt;We open the Automator program in MacOS and create a new folder action&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fgexxk4tcck6z4mr2z03t.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fgexxk4tcck6z4mr2z03t.png" alt=" " width="800" height="719"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Then we select the folder where the action is to be performed.&lt;br&gt;
We needd The &lt;strong&gt;run shell script&lt;/strong&gt; action to add our script and the &lt;strong&gt;view results&lt;/strong&gt; to get some information when we running the automator actions.&lt;/p&gt;

&lt;p&gt;You will end with a worflow like this:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fascovr0j6h2yuyql6tqr.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fascovr0j6h2yuyql6tqr.png" alt=" " width="800" height="455"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The script grow a little bit:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;if [ -x /usr/libexec/path_helper ]; then&lt;br&gt;
    eval&lt;/code&gt;/usr/libexec/path_helper -s`&lt;br&gt;
fi&lt;br&gt;
if  [ -f "$HOME"/.profile ]; then&lt;br&gt;
    source "$HOME"/.profile&lt;br&gt;
elif [ -f "$HOME"/.bash_profile ]; then&lt;br&gt;
    source "$HOME"/.bash_profile&lt;br&gt;
elif [ -f "$HOME"/.bashrc ]; then&lt;br&gt;
    source "$HOME"/.bashrc&lt;br&gt;
fi&lt;/p&gt;

&lt;p&gt;convert -append /Users/username/Desktop/prueba/IMG_*.JPG -quality 65 -strip -interlace JPEG /Users/username/Desktop/prueba/out-ok.jpg&lt;br&gt;
`&lt;/p&gt;

&lt;p&gt;The if part is just a way to catch all the posible path to let Automator see the commands in zsh. You can test another options like:&lt;/p&gt;

&lt;p&gt;sometimes with a link to this file work&lt;/p&gt;

&lt;p&gt;&lt;code&gt;source ~/.zshrc&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;if you want to know more about this error in Automator follow this &lt;a href="https://apple.stackexchange.com/questions/97502/my-automator-workflow-fails-because-it-fails-to-find-the-git-command-within-the" rel="noopener noreferrer"&gt;question&lt;/a&gt; in stackexchange.&lt;/p&gt;

&lt;p&gt;The second part of the script is the same script we see at begining but with absolute links to image pattern (IMG_*.JPG) and to final image.&lt;/p&gt;

&lt;p&gt;Test the folder action in Automator and when it work without any error there is a last step.&lt;/p&gt;

&lt;h2&gt;
  
  
  Folder action setup
&lt;/h2&gt;

&lt;p&gt;Now you need to link the folder action to the folder whe image will be process. Select the folder and with the right mouse show options. Select &lt;strong&gt;Folder action setup&lt;/strong&gt; and will pop up with a warnig about Confirm Service, touch the service button.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Frdwlygx6d9kdkoodaasw.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Frdwlygx6d9kdkoodaasw.png" alt=" " width="550" height="462"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;then in the right part of this window touch the + button and select the folder action you create and save in Automator. &lt;/p&gt;

&lt;p&gt;Check the action is selected and if all the steps are correct the script will run and images will be join in this folder!&lt;/p&gt;

</description>
      <category>discuss</category>
      <category>productivity</category>
    </item>
  </channel>
</rss>
