<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0"><channel><title><![CDATA[Luan Rodrigues]]></title><description><![CDATA[Ensino você a fazer coisas com tecnologia, direto ao ponto! Sem enrolação.]]></description><link>https://luanrodrigues.com.br</link><generator>RSS for Node</generator><lastBuildDate>Sat, 18 Apr 2026 00:02:53 GMT</lastBuildDate><atom:link href="https://luanrodrigues.com.br/rss.xml" rel="self" type="application/rss+xml"/><language><![CDATA[en]]></language><ttl>60</ttl><item><title><![CDATA[How to Install Coolify on Ubuntu 24.04 LTS]]></title><description><![CDATA[Coolify is an open-source, self-hostable Platform as a Service (PaaS) — a powerful alternative to Vercel, Heroku, and Netlify. It lets you deploy static sites, full-stack applications, databases, and ]]></description><link>https://luanrodrigues.com.br/how-to-install-coolify-on-ubuntu-24-04-lts</link><guid isPermaLink="true">https://luanrodrigues.com.br/how-to-install-coolify-on-ubuntu-24-04-lts</guid><category><![CDATA[coolify]]></category><category><![CDATA[Ubuntu]]></category><category><![CDATA[Linux]]></category><dc:creator><![CDATA[Luan Rodrigues]]></dc:creator><pubDate>Wed, 25 Mar 2026 06:24:42 GMT</pubDate><content:encoded><![CDATA[<p><a href="https://coolify.io">Coolify</a> is an open-source, self-hostable Platform as a Service (PaaS) — a powerful alternative to Vercel, Heroku, and Netlify. It lets you deploy static sites, full-stack applications, databases, and 280+ one-click services on your own servers with automatic SSL certificates, Git integration, and a beautiful dashboard.</p>
<p>In this tutorial, I'll walk you through the complete installation of Coolify on an Ubuntu 24.04 LTS server.</p>
<p>Sign up for DigitalOcean using my link and get \(200 for your projects, valid for 60 days! <a href="https://m.do.co/c/b7582264f56f">Click here: GET \)200</a></p>
<h2>Prerequisites</h2>
<p>Before we begin, make sure you have:</p>
<ul>
<li><p>A server (VPS or dedicated) running <strong>Ubuntu 24.04 LTS</strong></p>
</li>
<li><p><strong>Root access</strong> or a user with <code>sudo</code> privileges</p>
</li>
<li><p>At least <strong>2 vCPUs</strong>, <strong>2 GB RAM</strong>, and <strong>30 GB of storage</strong></p>
</li>
<li><p>A <strong>domain name</strong> pointed to your server's IP (optional, but recommended)</p>
</li>
</ul>
<h3>Required Ports</h3>
<table>
<thead>
<tr>
<th>Port</th>
<th>Protocol</th>
<th>Description</th>
</tr>
</thead>
<tbody><tr>
<td>22</td>
<td>TCP</td>
<td>SSH access</td>
</tr>
<tr>
<td>80</td>
<td>TCP</td>
<td>HTTP traffic</td>
</tr>
<tr>
<td>443</td>
<td>TCP</td>
<td>HTTPS traffic</td>
</tr>
<tr>
<td>8000</td>
<td>TCP</td>
<td>Coolify dashboard</td>
</tr>
<tr>
<td>6001</td>
<td>TCP</td>
<td>Coolify WebSocket</td>
</tr>
<tr>
<td>6002</td>
<td>TCP</td>
<td>Coolify API</td>
</tr>
</tbody></table>
<h2>Updating the Operating System</h2>
<p><strong>Step 1</strong> - Update the operating system.</p>
<pre><code class="language-bash">sudo apt update &amp;&amp; sudo apt upgrade -y
</code></pre>
<p><strong>Step 2</strong> - Install the required dependencies.</p>
<pre><code class="language-bash">sudo apt install -y curl wget git
</code></pre>
<h2>Configuring the Firewall</h2>
<p><strong>Step 3</strong> - If you're using UFW (Ubuntu's default firewall), allow the required ports:</p>
<pre><code class="language-bash">sudo ufw allow 22/tcp
sudo ufw allow 80/tcp
sudo ufw allow 443/tcp
sudo ufw allow 8000/tcp
sudo ufw allow 6001/tcp
sudo ufw allow 6002/tcp
</code></pre>
<p><strong>Step 4</strong> - Enable the firewall if it isn't already:</p>
<pre><code class="language-bash">sudo ufw enable
</code></pre>
<p><strong>Step 5</strong> - Verify the rules:</p>
<pre><code class="language-bash">sudo ufw status
</code></pre>
<p>You should see all the ports listed as <code>ALLOW</code>.</p>
<h2>Coolify Installation</h2>
<p><strong>Step 6</strong> - Run the automated installation script as <strong>root</strong>:</p>
<pre><code class="language-bash">curl -fsSL https://cdn.coollabs.io/coolify/install.sh | bash
</code></pre>
<p>⚠️ If you're not logged in as root, use <code>sudo</code>:</p>
<pre><code class="language-bash">curl -fsSL https://cdn.coollabs.io/coolify/install.sh | sudo bash
</code></pre>
<p>The script will:</p>
<ol>
<li><p>Check your system requirements</p>
</li>
<li><p>Install Docker Engine and Docker Compose (if not already installed)</p>
</li>
<li><p>Download and configure Coolify</p>
</li>
<li><p>Start all required containers</p>
</li>
</ol>
<p>This process may take a few minutes depending on your server's internet speed. Once completed, you'll see a success message with the URL to access Coolify.</p>
<h2>Accessing the Dashboard</h2>
<p><strong>Step 7</strong> - Open your browser and navigate to:</p>
<pre><code class="language-plaintext">http://YOUR_SERVER_IP:8000
</code></pre>
<p>Replace <code>YOUR_SERVER_IP</code> with your server's actual IP address.</p>
<p><strong>Step 8</strong> - Create your admin account by setting a strong email and password.</p>
<p><strong>Step 9</strong> - Coolify will automatically detect your localhost server. Confirm the server configuration and you're ready to go!</p>
<h2>Setting Up a Custom Domain (Optional)</h2>
<p><strong>Step 10</strong> - Add an <strong>A record</strong> in your DNS provider pointing to your server's IP:</p>
<table>
<thead>
<tr>
<th>Type</th>
<th>Name</th>
<th>Value</th>
</tr>
</thead>
<tbody><tr>
<td>A</td>
<td>coolify</td>
<td>YOUR_SERVER_IP</td>
</tr>
</tbody></table>
<p><strong>Step 11</strong> - Log in to the Coolify dashboard, go to <strong>Settings</strong> → <strong>General</strong> and set your <strong>Instance's Domain</strong> to <code>https://coolify.yourdomain.com</code>.</p>
<p>Coolify will automatically generate a Let's Encrypt SSL certificate for your domain.</p>
<h2>Deploying Your First Application</h2>
<p><strong>Step 12</strong> - On the dashboard, click <strong>"New Resource"</strong>.</p>
<p><strong>Step 13</strong> - Select <strong>"Public Repository"</strong> and paste a Git repository URL (e.g., <code>https://github.com/coollabsio/coolify-examples</code>).</p>
<p><strong>Step 14</strong> - Choose the branch, build pack, and target server, then click <strong>Deploy</strong>.</p>
<p>Coolify will clone the repository, build the application, and deploy it automatically.</p>
<h2>Enabling Auto-Updates</h2>
<p><strong>Step 15</strong> - Go to <strong>Settings</strong> → <strong>General</strong> and toggle <strong>"Auto Update"</strong> to enabled.</p>
<p>This ensures you always have the latest features and security patches without manual intervention.</p>
<h2>Useful Commands</h2>
<p>Check running containers:</p>
<pre><code class="language-bash">docker ps --format "table {{.Names}}\t{{.Status}}\t{{.Ports}}"
</code></pre>
<p>View Coolify logs:</p>
<pre><code class="language-bash">docker logs -f coolify
</code></pre>
<p>Restart Coolify:</p>
<pre><code class="language-bash">docker restart coolify coolify-realtime coolify-db coolify-redis
</code></pre>
<p>Stop Coolify:</p>
<pre><code class="language-bash">docker compose -f /data/coolify/docker-compose.yml stop
</code></pre>
<p>Start Coolify:</p>
<pre><code class="language-bash">docker compose -f /data/coolify/docker-compose.yml up -d
</code></pre>
<h2>Troubleshooting</h2>
<p>If port 8000 is not accessible, make sure the firewall allows traffic and reload:</p>
<pre><code class="language-bash">sudo ufw allow 8000/tcp
sudo ufw reload
</code></pre>
<p>⚠️ If you're using a cloud provider (AWS, DigitalOcean, Hetzner), also check the <strong>Security Groups</strong> or <strong>Firewall Rules</strong> in the provider's dashboard.</p>
<p>If you encounter Docker permission errors, add your user to the Docker group:</p>
<pre><code class="language-bash">sudo usermod -aG docker $USER
newgrp docker
</code></pre>
<p>If the installation script fails, run it with verbose output to identify the issue:</p>
<pre><code class="language-bash">curl -fsSL https://cdn.coollabs.io/coolify/install.sh | bash -x
</code></pre>
<h2>Did I help you?</h2>
<p>Buy me a beer! 🍺😁</p>
<img src="https://cdn.hashnode.com/uploads/covers/64779d6d78e96626a4f1612a/b5ec67c8-9e66-4d7b-a5c3-5cb970b0ef91.png" alt="" />]]></content:encoded></item><item><title><![CDATA[How to install PostgreSQL - Ubuntu 24]]></title><description><![CDATA[📌 1. Install PostgreSQL
Update packages and install PostgreSQL server:
sudo apt update && sudo apt upgrade -y

Install PostgreSQL server
sudo apt install postgresql postgresql-contrib -y

Check if the service is active:
sudo systemctl status postgre...]]></description><link>https://luanrodrigues.com.br/how-to-install-postgresql-ubuntu-24</link><guid isPermaLink="true">https://luanrodrigues.com.br/how-to-install-postgresql-ubuntu-24</guid><category><![CDATA[Ubuntu]]></category><category><![CDATA[AI]]></category><category><![CDATA[PostgreSQL]]></category><dc:creator><![CDATA[Luan Rodrigues]]></dc:creator><pubDate>Fri, 12 Sep 2025 18:53:53 GMT</pubDate><content:encoded><![CDATA[<h2 id="heading-1-install-postgresql">📌 1. Install PostgreSQL</h2>
<p>Update packages and install PostgreSQL server:</p>
<pre><code class="lang-plaintext">sudo apt update &amp;&amp; sudo apt upgrade -y
</code></pre>
<p>Install PostgreSQL server</p>
<pre><code class="lang-plaintext">sudo apt install postgresql postgresql-contrib -y
</code></pre>
<p>Check if the service is active:</p>
<pre><code class="lang-plaintext">sudo systemctl status postgresql
</code></pre>
<h2 id="heading-2-create-a-new-database-and-change-user-password">📌 2. Create a new database and change user password</h2>
<p>Switch to the administrative <code>postgres</code> user:</p>
<pre><code class="lang-plaintext">sudo -i -u postgres
</code></pre>
<p>Open the PostgreSQL prompt:</p>
<pre><code class="lang-plaintext">psql
</code></pre>
<p>Now execute the SQL commands:</p>
<pre><code class="lang-plaintext">-- Create database
CREATE DATABASE n8n_db;

-- Change postgres user password
ALTER USER postgres PASSWORD 'your_new_password';


-- Grant permissions to the user on the database
GRANT ALL PRIVILEGES ON DATABASE n8n_db TO postgres;
</code></pre>
]]></content:encoded></item><item><title><![CDATA[How to install N8N]]></title><description><![CDATA[Sign up for DigitalOcean using my link and get $200 for your projects, valid for 60 days! Click here: GET $200
This tutorial is available as a video on YouTube: https://www.youtube.com/watch?v=KZh9Wodsa40
Updating the Operating System
Step 1 - Update...]]></description><link>https://luanrodrigues.com.br/how-to-install-n8n</link><guid isPermaLink="true">https://luanrodrigues.com.br/how-to-install-n8n</guid><category><![CDATA[Ubuntu]]></category><category><![CDATA[n8n]]></category><category><![CDATA[AI]]></category><dc:creator><![CDATA[Luan Rodrigues]]></dc:creator><pubDate>Fri, 12 Sep 2025 18:51:01 GMT</pubDate><content:encoded><![CDATA[<p>Sign up for DigitalOcean using my link and get $200 for your projects, valid for 60 days! Click here: <a target="_blank" href="https://m.do.co/c/b7582264f56f">GET $200</a></p>
<p>This tutorial is available as a video on YouTube: <a target="_blank" href="https://www.youtube.com/watch?v=KZh9Wodsa40">https://www.youtube.com/watch?v=KZh9Wodsa40</a></p>
<h2 id="heading-updating-the-operating-system">Updating the Operating System</h2>
<p><strong>Step 1</strong> - Update the operating system.</p>
<pre><code class="lang-plaintext">sudo apt update &amp;&amp; sudo apt upgrade -y
</code></pre>
<h2 id="heading-installing-node-and-npm">Installing Node and NPM</h2>
<p>On the official Node.js website, you can download the latest binaries as shown in the figure below. As of this writing, the LTS (long time support) version is <strong>22.22.0. We'll use it in this tutorial.</strong></p>
<p><strong>Step 2</strong> - Use the command below in your terminal to download the binaries.</p>
<pre><code class="lang-plaintext">curl -o node.tar.xz https://nodejs.org/dist/v22.22.0/node-v22.22.0-linux-x64.tar.xz
</code></pre>
<p><strong>Step 3</strong> - Use the command below to extract the package and enter the folder.</p>
<pre><code class="lang-plaintext">tar -xf node.tar.xz &amp;&amp; cd node-v22.22.0-linux-x64
</code></pre>
<p><strong>Step 4</strong> - With the command below, we'll copy the files to make them available globally.</p>
<pre><code class="lang-plaintext">sudo cp -R * /usr/local/
</code></pre>
<p>Done! After this, Node should be available for use. Run the commands below to verify.</p>
<pre><code class="lang-plaintext">node -v &amp;&amp; npm -v &amp;&amp; cd ..
</code></pre>
<p>If everything is correct, you should see something like shown in the figure.</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1743533596855/4f82b112-2e6d-482d-b538-2dfd5244b576.png?auto=compress,format&amp;format=webp" alt class="image--center mx-auto" /></p>
<h2 id="heading-postgresql-installation">PostgreSQL Installation</h2>
<p><strong>Step 5</strong> - Install PostgreSQL</p>
<pre><code class="lang-plaintext">sudo apt install postgresql postgresql-contrib -y
</code></pre>
<p><strong>Step 6</strong> - Check if the service is active:</p>
<pre><code class="lang-plaintext">sudo systemctl status postgresql
</code></pre>
<p><strong>Step 7</strong> - Switch to the administrative <code>postgres</code> user:</p>
<pre><code class="lang-plaintext">sudo -i -u postgres
</code></pre>
<p><strong>Step 8</strong> - Open the PostgreSQL prompt:</p>
<pre><code class="lang-plaintext">psql
</code></pre>
<p><strong>Step 9</strong> - Now execute the SQL commands:</p>
<p>⚠️ Don't forget to replace with your own secure password.</p>
<pre><code class="lang-plaintext">-- Create a new user
CREATE ROLE n8n_user WITH LOGIN PASSWORD 'put-your-super-strong-password-here';

-- Create database
CREATE DATABASE n8n_db OWNER n8n_user;

-- Grant permissions to the user on the database
GRANT ALL PRIVILEGES ON DATABASE n8n_db TO n8n_user;
GRANT ALL ON SCHEMA public TO n8n_user;
ALTER SCHEMA public OWNER TO n8n_user;
</code></pre>
<p><strong>Step 10</strong> - Now disconnect from the database</p>
<pre><code class="lang-bash">\q
</code></pre>
<p><strong>Step 11</strong> - Disconnect from the <code>postgres</code> user</p>
<pre><code class="lang-bash"><span class="hljs-built_in">exit</span>
</code></pre>
<h2 id="heading-n8n-installation">N8N Installation</h2>
<p><strong>Step 12</strong> - Install N8N</p>
<pre><code class="lang-bash">npm install n8n -g
</code></pre>
<p><strong>Step 13</strong> - Create a specific user for n8n:</p>
<pre><code class="lang-bash">sudo adduser --system --group --home /home/n8n n8n
</code></pre>
<p><strong>Step 14</strong> - Configure the directory where n8n will store files and credentials.</p>
<pre><code class="lang-bash">sudo mkdir -p /home/n8n/.n8n
sudo chown -R n8n:n8n /home/n8n/.n8n
</code></pre>
<p><strong>Step 15</strong> - Generate a new encryption key with the command below, we'll use it next.</p>
<pre><code class="lang-bash">openssl rand -base64 48
</code></pre>
<p><strong>Step 16</strong> - Create a <code>.env</code> file for the service (centralizes configs and makes it easy to maintain):</p>
<pre><code class="lang-bash">sudo nano /home/n8n/.n8n/.env
</code></pre>
<p><strong>Step 17</strong> - Copy the content below into the <code>.env</code> file you just created.</p>
<pre><code class="lang-bash"><span class="hljs-comment"># ===== Core =====</span>
N8N_ENFORCE_SETTINGS_FILE_PERMISSIONS=<span class="hljs-literal">true</span>
N8N_USER_FOLDER=/home/n8n/.n8n
N8N_HOST=YOUR-SERVER-IP
N8N_PORT=5678
<span class="hljs-comment"># If exposing publicly, define BASE_URL (https://your-domain):</span>
<span class="hljs-comment"># N8N_EDITOR_BASE_URL=https://your-domain</span>
<span class="hljs-comment"># WEBHOOK_URL=https://your-domain/</span>
N8N_RUNNERS_ENABLED=<span class="hljs-literal">true</span>
N8N_SECURE_COOKIE=<span class="hljs-literal">false</span>
<span class="hljs-comment"># ===== Database (Postgres) =====</span>
DB_TYPE=postgresdb
DB_POSTGRESDB_HOST=127.0.0.1
DB_POSTGRESDB_PORT=5432
DB_POSTGRESDB_DATABASE=n8n_db
DB_POSTGRESDB_USER=n8n_user
DB_POSTGRESDB_PASSWORD=put-your-super-strong-password-here
<span class="hljs-comment"># Pool (optional, improves stability)</span>
DB_POSTGRESDB_POOL_SIZE=10

<span class="hljs-comment"># ===== Security (adjust according to your scenario) =====</span>
<span class="hljs-comment"># Basic Auth for editor</span>
<span class="hljs-comment">#N8N_BASIC_AUTH_ACTIVE=true</span>
<span class="hljs-comment">#N8N_BASIC_AUTH_USER=admin</span>
<span class="hljs-comment">#N8N_BASIC_AUTH_PASSWORD=another-super-strong-password</span>

<span class="hljs-comment"># Encryption key for credentials</span>
N8N_ENCRYPTION_KEY=PUT-HERE-THE-ENCRYPTION-KEY-YOU-GENERATED

<span class="hljs-comment"># ===== Queues (optional) - if using queues with Redis =====</span>
<span class="hljs-comment"># QUEUE_BULL_REDIS_HOST=127.0.0.1</span>
<span class="hljs-comment"># QUEUE_BULL_REDIS_PORT=6379</span>
</code></pre>
<p><strong>Step 18</strong> - Apply restrictive permissions:</p>
<pre><code class="lang-bash">sudo chmod 600 /home/n8n/.n8n/.env
</code></pre>
<p><strong>Step 19</strong> - Create the service file to run n8n with <code>systemd</code>.<br />This ensures that n8n is started automatically with the server and is monitored.</p>
<pre><code class="lang-bash">sudo nano /etc/systemd/system/n8n.service
</code></pre>
<p><strong>Step 20</strong> - Copy the content below to the file you just created.</p>
<pre><code class="lang-bash">[Unit]
Description=n8n Automation (Workflow) Service
After=network-online.target postgresql.service
Wants=network-online.target

[Service]
<span class="hljs-comment"># Dedicated user</span>
User=n8n
Group=n8n
EnvironmentFile=/home/n8n/.n8n/.env
WorkingDirectory=/home/n8n

<span class="hljs-comment"># App startup</span>
ExecStart=/usr/<span class="hljs-built_in">local</span>/bin/n8n start
Restart=always
RestartSec=5

<span class="hljs-comment"># Limits and robustness</span>
LimitNOFILE=65535

<span class="hljs-comment"># Logs to journal (journalctl)</span>
StandardOutput=journal
StandardError=journal

<span class="hljs-comment"># Hardening (adjust if you need access outside home)</span>
NoNewPrivileges=<span class="hljs-literal">true</span>
PrivateTmp=<span class="hljs-literal">true</span>
ProtectSystem=full
ProtectHome=read-only
ReadWritePaths=/home/n8n /tmp /var/tmp

<span class="hljs-comment"># If n8n needs to bind ports &lt;1024, remove the line below</span>
CapabilityBoundingSet=
AmbientCapabilities=

<span class="hljs-comment"># Longer timeout for initial migrations</span>
TimeoutStartSec=120

[Install]
WantedBy=multi-user.target
</code></pre>
<p><strong>Step 21</strong> - Reload <code>systemd</code>, enable the n8n service at startup and start it immediately.</p>
<pre><code class="lang-bash">sudo systemctl daemon-reload
sudo systemctl <span class="hljs-built_in">enable</span> n8n
sudo systemctl start n8n
</code></pre>
<p><strong>Step 22</strong> - Check if the service is running correctly.</p>
<pre><code class="lang-bash">systemctl status n8n
journalctl -u n8n -f
</code></pre>
<h2 id="heading-troubleshooting">Troubleshooting</h2>
<p>If you see a migration/permission error in Postgres, run a manual test:</p>
<pre><code class="lang-bash">sudo -u n8n env $(cat /home/n8n/.n8n/.env | xargs) n8n start
</code></pre>
<p>This way you can see errors with the same variables as the service.</p>
<h3 id="heading-did-i-help-you"><strong>Did I help you?</strong></h3>
<p>Buy me a beer! 🍺😁</p>
<p>PIX QrCode</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1726095550809/4e01f0a4-4231-47ac-9baf-7c1c7d263fb4.png?auto=compress,format&amp;format=webp" alt /></p>
]]></content:encoded></item><item><title><![CDATA[Como instalar o N8N no Ubuntu 24.04 LTS]]></title><description><![CDATA[Cadastre-se na DigitalOcean, basta usar o meu link e ganhar $200 dólares para seus projetos, válidos por 60 dias! Clique em: QUERO OS 200tão
Este tutorial esta disponível em vídeo no YouTube: https://www.youtube.com/watch?v=KZh9Wodsa40
Atualizando o ...]]></description><link>https://luanrodrigues.com.br/como-instalar-o-n8n-no-ubuntu-2404-lts</link><guid isPermaLink="true">https://luanrodrigues.com.br/como-instalar-o-n8n-no-ubuntu-2404-lts</guid><category><![CDATA[n8n]]></category><category><![CDATA[workflow]]></category><category><![CDATA[Workflow Automation]]></category><category><![CDATA[Ubuntu]]></category><dc:creator><![CDATA[Luan Rodrigues]]></dc:creator><pubDate>Sun, 07 Sep 2025 21:37:33 GMT</pubDate><content:encoded><![CDATA[<p>Cadastre-se na DigitalOcean, basta usar o meu link e ganhar $200 dólares para seus projetos, válidos por 60 dias! Clique em: <a target="_blank" href="https://m.do.co/c/b7582264f56f">QUERO OS 200tão</a></p>
<p>Este tutorial esta disponível em vídeo no YouTube: <a target="_blank" href="https://www.youtube.com/watch?v=KZh9Wodsa40">https://www.youtube.com/watch?v=KZh9Wodsa40</a></p>
<h2 id="heading-atualizando-o-sistema-operacional">Atualizando o sistema operacional</h2>
<p><strong>1º Passo</strong> - Atualize o sistema operacional.</p>
<pre><code class="lang-plaintext">sudo apt update &amp;&amp; sudo apt upgrade -y
</code></pre>
<h2 id="heading-instalacao-do-node-e-npm">Instalação do Node e NPM</h2>
<p>No site oficial do node.js você pode baixar os binários mais recentes como mostra a figura abaixo. Na data que escrevo, a versão LTS(long time support) é a <strong>22.19.0. Usaremos ela neste tutorial.</strong></p>
<p><strong>2º Passo</strong> - Use o comando abaixo no seu terminal para baixar os binários.</p>
<pre><code class="lang-plaintext">curl -o node.tar.xz https://nodejs.org/dist/v22.19.0/node-v22.19.0-linux-x64.tar.xz
</code></pre>
<p><strong>3º Passo</strong> - Use o comando abaixo para descompatar o pacote e entrar na pasta.</p>
<pre><code class="lang-plaintext">tar -xf node.tar.xz &amp;&amp; cd node-v22.19.0-linux-x64
</code></pre>
<p><strong>4º Passo</strong> - Com o comando abaixo, vamos copiar os arquivos para que fiquem disponíveis globalmente.</p>
<pre><code class="lang-plaintext">sudo cp -R * /usr/local/
</code></pre>
<p>Pronto! Feito isso o noje deve estar disponível para uso. Execute os comandos abaixo para verificar.</p>
<pre><code class="lang-plaintext">node -v &amp;&amp; npm -v &amp;&amp; cd ..
</code></pre>
<p>Se tudo estiver correto, você deve ver algo como mostrado na figura.</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1743533596855/4f82b112-2e6d-482d-b538-2dfd5244b576.png?auto=compress,format&amp;format=webp" alt class="image--center mx-auto" /></p>
<h2 id="heading-instalacao-do-postgressql">Instalação do PostgresSQL</h2>
<p><strong>5º Passo</strong> - Instale o PostgreSQL</p>
<pre><code class="lang-plaintext">sudo apt install postgresql postgresql-contrib -y
</code></pre>
<p><strong>6º Passo</strong> - Verifique se o serviço está ativo:</p>
<pre><code class="lang-plaintext">sudo systemctl status postgresql
</code></pre>
<p><strong>7º Passo</strong> - Entre no usuário administrativo <code>postgres</code>:</p>
<pre><code class="lang-plaintext">sudo -i -u postgres
</code></pre>
<p><strong>8º Passo</strong> - Abra o prompt do PostgreSQL:</p>
<pre><code class="lang-plaintext">psql
</code></pre>
<p><strong>9º Passo</strong> - Agora execute os comandos SQL:</p>
<p>⚠️ Não esqueça de trocar pela sua própria senha segura.</p>
<pre><code class="lang-plaintext">-- Criar um novo usuario
CREATE ROLE n8n_user WITH LOGIN PASSWORD 'coloque-sua-senha-super-forte-aqui';

-- Criar banco de dados
CREATE DATABASE n8n_db OWNER n8n_user;

-- Dar permissões ao usuário no banco
GRANT ALL PRIVILEGES ON DATABASE n8n_db TO n8n_user;
GRANT ALL ON SCHEMA public TO n8n_user;
ALTER SCHEMA public OWNER TO n8n_user;
</code></pre>
<p><strong>10º Passo</strong> - Agora desconecte do banco</p>
<pre><code class="lang-bash">\q
</code></pre>
<p><strong>11º Passo</strong> - Desconecte do usuário <code>postgres</code></p>
<pre><code class="lang-bash"><span class="hljs-built_in">exit</span>
</code></pre>
<h2 id="heading-instalacao-do-n8n">Instalação do N8N</h2>
<p><strong>12º Passo</strong> -Instale o N8N</p>
<pre><code class="lang-bash">npm install n8n -g
</code></pre>
<p><strong>13º Passo</strong> - Crie um usuário específico para o n8n:</p>
<pre><code class="lang-bash">sudo adduser --system --group --home /home/n8n n8n
</code></pre>
<p><strong>14º Passo</strong> - Configure o diretório onde o n8n armazenará arquivos e credenciais.</p>
<pre><code class="lang-bash">sudo mkdir -p /home/n8n/.n8n
sudo chown -R n8n:n8n /home/n8n/.n8n
</code></pre>
<p><strong>15º Passo</strong> - Gere uma chave de criptografia nova com o comando abaixo, vamos usar em seguida.</p>
<pre><code class="lang-bash">openssl rand -base64 48
</code></pre>
<p><strong>16º Passo</strong> - Crie um arquivo <code>.env</code> para o serviço (centraliza configs e fica fácil de manter):</p>
<pre><code class="lang-bash">sudo nano /home/n8n/.n8n/.env
</code></pre>
<p><strong>17º Passo</strong> - Copie o conteúdo abaixo no arquivo <code>.env</code> que você acabou de criar.</p>
<pre><code class="lang-bash"><span class="hljs-comment"># ===== Core =====</span>
N8N_ENFORCE_SETTINGS_FILE_PERMISSIONS=<span class="hljs-literal">true</span>
N8N_USER_FOLDER=/home/n8n/.n8n
N8N_HOST=IP-DO-SEU-SERVIDOR
N8N_PORT=5678
<span class="hljs-comment"># Se for expor publicamente, defina BASE_URL (https://seu-dominio):</span>
<span class="hljs-comment"># N8N_EDITOR_BASE_URL=https://seu-dominio</span>
<span class="hljs-comment"># WEBHOOK_URL=https://seu-dominio/</span>
N8N_RUNNERS_ENABLED=<span class="hljs-literal">true</span>
N8N_SECURE_COOKIE=<span class="hljs-literal">false</span>
<span class="hljs-comment"># ===== Banco (Postgres) =====</span>
DB_TYPE=postgresdb
DB_POSTGRESDB_HOST=127.0.0.1
DB_POSTGRESDB_PORT=5432
DB_POSTGRESDB_DATABASE=n8n_db
DB_POSTGRESDB_USER=n8n_user
DB_POSTGRESDB_PASSWORD=coloque-sua-senha-super-forte-aqui
<span class="hljs-comment"># Pool (opcional, melhora estabilidade)</span>
DB_POSTGRESDB_POOL_SIZE=10

<span class="hljs-comment"># ===== Segurança (ajuste conforme seu cenário) =====</span>
<span class="hljs-comment"># Basic Auth no editor</span>
<span class="hljs-comment">#N8N_BASIC_AUTH_ACTIVE=true</span>
<span class="hljs-comment">#N8N_BASIC_AUTH_USER=admin</span>
<span class="hljs-comment">#N8N_BASIC_AUTH_PASSWORD=outra-senha-super-forte</span>

<span class="hljs-comment"># Chave de criptografia para credenciais</span>
N8N_ENCRYPTION_KEY=COLOQUE-AQUI-A-CHAVE-DE-CRIPTOGRAFIA-QUE-VOCE-GEROU

<span class="hljs-comment"># ===== Filas (opcional) - se usar filas com Redis =====</span>
<span class="hljs-comment"># QUEUE_BULL_REDIS_HOST=127.0.0.1</span>
<span class="hljs-comment"># QUEUE_BULL_REDIS_PORT=6379</span>
</code></pre>
<p><strong>18º Passo</strong> - Aplique permissões restritivas:</p>
<pre><code class="lang-bash">sudo chmod 600 /home/n8n/.n8n/.env
</code></pre>
<p><strong>19º Passo</strong> - Crie o arquivo de serviço para rodar o n8n com o <code>systemd</code>.<br />Isso garante que o n8n seja iniciado automaticamente junto com o servidor e seja monitorado.</p>
<pre><code class="lang-bash">sudo nano /etc/systemd/system/n8n.service
</code></pre>
<p><strong>20º Passo</strong> - Copie o conteúdo abaixo para o arquivo que você acabou de criar.</p>
<pre><code class="lang-bash">[Unit]
Description=n8n Automation (Workflow) Service
After=network-online.target postgresql.service
Wants=network-online.target

[Service]
<span class="hljs-comment"># Usuário dedicado</span>
User=n8n
Group=n8n
EnvironmentFile=/home/n8n/.n8n/.env
WorkingDirectory=/home/n8n

<span class="hljs-comment"># Início do app</span>
ExecStart=/usr/<span class="hljs-built_in">local</span>/bin/n8n start
Restart=always
RestartSec=5

<span class="hljs-comment"># Limites e robustez</span>
LimitNOFILE=65535

<span class="hljs-comment"># Logs no journal (journalctl)</span>
StandardOutput=journal
StandardError=journal

<span class="hljs-comment"># Hardening (ajuste se precisar de acesso fora do home)</span>
NoNewPrivileges=<span class="hljs-literal">true</span>
PrivateTmp=<span class="hljs-literal">true</span>
ProtectSystem=full
ProtectHome=read-only
ReadWritePaths=/home/n8n /tmp /var/tmp

<span class="hljs-comment"># Se o n8n precisar bindar portas &lt;1024, remova a linha abaixo</span>
CapabilityBoundingSet=
AmbientCapabilities=

<span class="hljs-comment"># Timeout maior para migrações iniciais</span>
TimeoutStartSec=120

[Install]
WantedBy=multi-user.target
</code></pre>
<p><strong>21º Passo</strong> - Recarregue o <code>systemd</code>, habilite o serviço do n8n na inicialização e inicie-o imediatamente.</p>
<pre><code class="lang-bash">sudo systemctl daemon-reload
sudo systemctl <span class="hljs-built_in">enable</span> n8n
sudo systemctl start n8n
</code></pre>
<p><strong>22º Passo</strong> - Verifique se o serviço está rodando corretamente.</p>
<pre><code class="lang-bash">systemctl status n8n
journalctl -u n8n -f
</code></pre>
<h2 id="heading-solucao-de-problemas">Solução de Problemas</h2>
<p>Se aparecer erro de migração/permite no Postgres, rode um teste manual:</p>
<pre><code class="lang-bash">sudo -u n8n env $(cat /home/n8n/.n8n/.env | xargs) n8n start
</code></pre>
<p>Assim você vê erros com as mesmas variáveis do serviço.</p>
<h3 id="heading-te-ajudei"><strong>Te ajudei?</strong></h3>
<p>Me paga uma cerveja! 🍺😁</p>
<p>PIX QrCode</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1726095550809/4e01f0a4-4231-47ac-9baf-7c1c7d263fb4.png?auto=compress,format&amp;format=webp" alt /></p>
]]></content:encoded></item><item><title><![CDATA[Como instalar o PostgreSQL - Ubuntu 24]]></title><description><![CDATA[📌 1. Instalar PostgreSQL
Atualize os pacotes e instale o servidor PostgreSQL:
sudo apt update && sudo apt upgrade -y

Instale o servidor PostgreSQL
sudo apt install postgresql postgresql-contrib -y

Verifique se o serviço está ativo:
sudo systemctl ...]]></description><link>https://luanrodrigues.com.br/como-instalar-o-postgresql-ubuntu-24</link><guid isPermaLink="true">https://luanrodrigues.com.br/como-instalar-o-postgresql-ubuntu-24</guid><category><![CDATA[Ubuntu]]></category><category><![CDATA[PostgreSQL]]></category><category><![CDATA[server]]></category><dc:creator><![CDATA[Luan Rodrigues]]></dc:creator><pubDate>Sun, 07 Sep 2025 21:11:46 GMT</pubDate><content:encoded><![CDATA[<h2 id="heading-1-instalar-postgresql">📌 1. Instalar PostgreSQL</h2>
<p>Atualize os pacotes e instale o servidor PostgreSQL:</p>
<pre><code class="lang-plaintext">sudo apt update &amp;&amp; sudo apt upgrade -y
</code></pre>
<p>Instale o servidor PostgreSQL</p>
<pre><code class="lang-plaintext">sudo apt install postgresql postgresql-contrib -y
</code></pre>
<p>Verifique se o serviço está ativo:</p>
<pre><code class="lang-plaintext">sudo systemctl status postgresql
</code></pre>
<h2 id="heading-2-criar-um-novo-banco-e-alterar-a-senha-do-usuario">📌 2. Criar um novo banco e alterar a senha do usuário</h2>
<p>Entre no usuário administrativo <code>postgres</code>:</p>
<pre><code class="lang-plaintext">sudo -i -u postgres
</code></pre>
<p>Abra o prompt do PostgreSQL:</p>
<pre><code class="lang-plaintext">psql
</code></pre>
<p>Agora execute os comandos SQL:</p>
<pre><code class="lang-plaintext">-- Criar banco de dados
CREATE DATABASE n8n_db;

-- Alterar a senha do usuario postgres
ALTER USER postgres PASSWORD 'sua_nova_senha';


-- Dar permissões ao usuário no banco
GRANT ALL PRIVILEGES ON DATABASE n8n_db TO postgres;
</code></pre>
]]></content:encoded></item><item><title><![CDATA[Min.io + Ubuntu 22]]></title><description><![CDATA[📦 Instalação do MinIO a partir do pacote .deb no Ubuntu Server 22.04
🔹 Pré-requisitos

Ubuntu Server 22.04
Acesso root ou sudo
Conexão com a internet


🛠️ Passos para Instalação
1️⃣ Atualize o sistema
sudo apt update && sudo apt upgrade -y

2️⃣ Ba...]]></description><link>https://luanrodrigues.com.br/minio-ubuntu-22</link><guid isPermaLink="true">https://luanrodrigues.com.br/minio-ubuntu-22</guid><category><![CDATA[S3]]></category><category><![CDATA[Ubuntu]]></category><category><![CDATA[Linux]]></category><category><![CDATA[self-hosted]]></category><dc:creator><![CDATA[Luan Rodrigues]]></dc:creator><pubDate>Sun, 25 May 2025 16:58:27 GMT</pubDate><content:encoded><![CDATA[<h1 id="heading-instalacao-do-minio-a-partir-do-pacote-deb-no-ubuntu-server-2204">📦 Instalação do MinIO a partir do pacote .deb no Ubuntu Server 22.04</h1>
<h2 id="heading-pre-requisitos">🔹 Pré-requisitos</h2>
<ul>
<li>Ubuntu Server 22.04</li>
<li>Acesso root ou sudo</li>
<li>Conexão com a internet</li>
</ul>
<hr />
<h2 id="heading-passos-para-instalacao">🛠️ Passos para Instalação</h2>
<h3 id="heading-1-atualize-o-sistema">1️⃣ Atualize o sistema</h3>
<pre><code class="lang-bash">sudo apt update &amp;&amp; sudo apt upgrade -y
</code></pre>
<h3 id="heading-2-baixe-o-pacote-deb-do-minio-community-edition">2️⃣ Baixe o pacote .deb do MinIO (Community Edition)</h3>
<p>Substitua <code>&lt;versao&gt;</code> pelo número da versão (por exemplo, <code>RELEASE.2025-05-25T10-00-00Z</code>):</p>
<pre><code class="lang-bash">wget https://dl.min.io/server/minio/release/linux-amd64/archive/minio_&lt;versao&gt;_amd64.deb
</code></pre>
<h3 id="heading-3-instale-o-pacote-deb">3️⃣ Instale o pacote .deb</h3>
<pre><code class="lang-bash">sudo dpkg -i minio_&lt;versao&gt;_amd64.deb
</code></pre>
<p>Se aparecer erro de dependências:</p>
<pre><code class="lang-bash">sudo apt --fix-broken install
</code></pre>
<h3 id="heading-4-verifique-a-instalacao">4️⃣ Verifique a instalação</h3>
<pre><code class="lang-bash"><span class="hljs-built_in">which</span> minio
minio --version
</code></pre>
<hr />
<h2 id="heading-configuracao-do-minio">⚙️ Configuração do MinIO</h2>
<h3 id="heading-5-crie-o-usuario-e-diretorios">5️⃣ Crie o usuário e diretórios</h3>
<pre><code class="lang-bash">sudo useradd -r minio-user -s /sbin/nologin
sudo mkdir -p /usr/<span class="hljs-built_in">local</span>/share/minio
sudo mkdir -p /etc/minio
sudo chown minio-user:minio-user /usr/<span class="hljs-built_in">local</span>/share/minio /etc/minio
</code></pre>
<h3 id="heading-6-configure-as-variaveis-de-ambiente">6️⃣ Configure as variáveis de ambiente</h3>
<pre><code class="lang-bash">sudo nano /etc/default/minio
</code></pre>
<p>Adicione o conteúdo:</p>
<pre><code class="lang-bash">MINIO_VOLUMES=<span class="hljs-string">"/usr/local/share/minio"</span>
MINIO_OPTS=<span class="hljs-string">"--console-address :9001"</span>
MINIO_ROOT_USER=minioadmin
MINIO_ROOT_PASSWORD=minioadmin123
</code></pre>
<h3 id="heading-7-configure-o-systemd-para-iniciar-o-minio-como-servico">7️⃣ Configure o systemd para iniciar o MinIO como serviço</h3>
<pre><code class="lang-bash">sudo nano /etc/systemd/system/minio.service
</code></pre>
<p>Adicione:</p>
<pre><code class="lang-ini"><span class="hljs-section">[Unit]</span>
<span class="hljs-attr">Description</span>=MinIO
<span class="hljs-attr">Documentation</span>=https://min.io/docs/
<span class="hljs-attr">Wants</span>=network-<span class="hljs-literal">on</span>line.target
<span class="hljs-attr">After</span>=network-<span class="hljs-literal">on</span>line.target

<span class="hljs-section">[Service]</span>
<span class="hljs-attr">User</span>=minio-user
<span class="hljs-attr">Group</span>=minio-user
<span class="hljs-attr">EnvironmentFile</span>=/etc/default/minio
<span class="hljs-attr">ExecStart</span>=/usr/bin/minio server <span class="hljs-variable">$MINIO_OPTS</span> <span class="hljs-variable">$MINIO_VOLUMES</span>
<span class="hljs-attr">Restart</span>=always
<span class="hljs-attr">LimitNOFILE</span>=<span class="hljs-number">65536</span>

<span class="hljs-section">[Install]</span>
<span class="hljs-attr">WantedBy</span>=multi-user.target
</code></pre>
<h3 id="heading-8-recarregue-e-inicie-o-servico">8️⃣ Recarregue e inicie o serviço</h3>
<pre><code class="lang-bash">sudo systemctl daemon-reload
sudo systemctl <span class="hljs-built_in">enable</span> minio
sudo systemctl start minio
sudo systemctl status minio
</code></pre>
<hr />
<h2 id="heading-acessar-o-minio-console">🌐 Acessar o MinIO Console</h2>
<p>Abra o navegador e acesse:</p>
<pre><code>http:<span class="hljs-comment">//&lt;seu-ip&gt;:9001</span>
</code></pre><p>Use as credenciais definidas em <code>/etc/default/minio</code>.</p>
<hr />
<h2 id="heading-abrir-portas-no-firewall-se-necessario">🔒 Abrir portas no firewall (se necessário)</h2>
<pre><code class="lang-bash">sudo ufw allow 9000
sudo ufw allow 9001
sudo ufw reload
</code></pre>
<hr />
<h2 id="heading-observacoes">📝 Observações</h2>
<ul>
<li>O pacote <code>.deb</code> <strong>não deve ser usado diretamente como binário</strong>, ele precisa ser instalado com <code>dpkg -i</code>.</li>
<li>O <strong>MinIO Community Edition</strong> é licenciado sob <strong>AGPL v3</strong>, com recursos essenciais e sem suporte comercial.</li>
<li>Configure <code>/etc/default/minio</code> e <code>/etc/systemd/system/minio.service</code> para ajustar diretórios e opções.</li>
</ul>
<hr />
]]></content:encoded></item><item><title><![CDATA[EvolutionAPI(Whatsapp) - Ubuntu 22.04]]></title><description><![CDATA[CLIQUE AQUI PARA assistir o vídeo com o tutorial ou pular pro texto.

1 - Atualiza a Lista de Pacotes
Antes de começar, certifique-se de que sua lista de pacotes está atualizada:
sudo apt-get update

Instalação e Configuração do PostgreSQL
2 - Instal...]]></description><link>https://luanrodrigues.com.br/evolutionapi-ubuntu-2204</link><guid isPermaLink="true">https://luanrodrigues.com.br/evolutionapi-ubuntu-2204</guid><category><![CDATA[evolutionapi]]></category><category><![CDATA[whatsapp]]></category><category><![CDATA[whatsapp-api]]></category><category><![CDATA[WhatsApp Tips]]></category><category><![CDATA[whatsapp-business]]></category><category><![CDATA[Ubuntu]]></category><category><![CDATA[APIs]]></category><category><![CDATA[server]]></category><dc:creator><![CDATA[Luan Rodrigues]]></dc:creator><pubDate>Tue, 10 Sep 2024 23:55:48 GMT</pubDate><content:encoded><![CDATA[<p><a target="_blank" href="https://www.youtube.com/watch?v=A7mEFak2GRE">CLIQUE AQUI PARA</a> assistir o vídeo com o tutorial ou pular pro texto.</p>
<p><a target="_blank" href="https://www.youtube.com/watch?v=A7mEFak2GRE"><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1726047350267/628ac370-264f-4253-922b-bcd30ec0feb1.png" alt class="image--center mx-auto" /></a></p>
<h3 id="heading-1-atualiza-a-lista-de-pacotes"><strong>1 - Atualiza a Lista de Pacotes</strong></h3>
<p>Antes de começar, certifique-se de que sua lista de pacotes está atualizada:</p>
<pre><code class="lang-bash">sudo apt-get update
</code></pre>
<h3 id="heading-instalacao-e-configuracao-do-postgresql">Instalação e Configuração do PostgreSQL</h3>
<p><strong>2 - Instalar PostgreSQL</strong></p>
<p><strong>2.1 - Execute o comando abaixo para instalar o PostgreSQL</strong></p>
<pre><code class="lang-bash">sudo apt-get install postgresql postgresql-contrib
</code></pre>
<p><strong>2.2 - Inicie o serviço com o comando abaixo</strong></p>
<pre><code class="lang-bash">sudo service postgresql start
</code></pre>
<p><strong>2.3 - Execute o comando para criar o banco de dados.</strong></p>
<pre><code class="lang-bash">sudo -u postgres createdb evolution
</code></pre>
<p><strong>2.4 - Conecte-se ao PostgreSQL</strong></p>
<pre><code class="lang-bash">sudo -u postgres psql
</code></pre>
<p><strong>2.5 - Alterar a senha do usuário do PostgreSQL.</strong></p>
<p>Vamos alterar a senha do usuário <code>postgres</code>.</p>
<p>🚨**Anote essa senha, pois você vai usá-la posteriormente!**🚨</p>
<pre><code class="lang-bash">ALTER USER postgres WITH PASSWORD <span class="hljs-string">'senha-do-banco'</span>;
</code></pre>
<p>Para sair do terminal do PostgreSQL, digite:</p>
<pre><code class="lang-bash">\q
</code></pre>
<h3 id="heading-3-instalacao-e-configuracao-do-redis"><strong>3 -</strong> Instalação e Configuração do Redis</h3>
<p><strong>3.1. Instalar Redis</strong></p>
<p>O Redis está disponível nos repositórios padrão do Ubuntu. Para instalá-lo, use o seguinte comando:</p>
<pre><code class="lang-bash">sudo apt-get install redis-server
</code></pre>
<p><strong>3.2. Verificar o Funcionamento do Redis</strong></p>
<p>Após a instalação, o serviço Redis deve iniciar automaticamente. Verifique se o Redis está em execução com:</p>
<pre><code class="lang-bash">redis-cli ping
</code></pre>
<p>Você deve receber um “PONG” como resposta do comando.</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1726013108164/8f8d0bad-4130-40c7-84cc-af83dd9bb091.png" alt class="image--center mx-auto" /></p>
<h3 id="heading-4-melhorando-a-seguranca">4. Melhorando a segurança</h3>
<p><strong>4.1. Permitir Conexões Locais</strong></p>
<p>Primeiro, permita conexões de <a target="_blank" href="http://localhost"><code>localhost</code></a> (127.0.0.1) para as portas 6379(REDIS) e 5432(PostgreSQL):</p>
<pre><code class="lang-bash">sudo ufw allow from 127.0.0.1 to any port 6379
sudo ufw allow from 127.0.0.1 to any port 5432
</code></pre>
<p><strong>4.2. Bloquear Acesso Externo</strong></p>
<p>Bloqueie o acesso externo às portas do Redis e PostgreSQL para evitar conexões indesejadas:</p>
<pre><code class="lang-bash">sudo ufw deny 6379
sudo ufw deny 5432
</code></pre>
<p><strong>4.3. Permitir Acesso à Porta 22 (SSH) e 8080</strong></p>
<p>Certifique-se de permitir o tráfego na porta 22, usada para conexões SSH, e na porta 8080, onde a Evolution API será executada:</p>
<pre><code class="lang-bash">sudo ufw allow 22/tcp
sudo ufw allow 8080
</code></pre>
<p><strong>4.4. Ativar o Firewall (UFW)</strong></p>
<p>Ative o <code>ufw</code> para aplicar as regras de segurança configuradas:</p>
<pre><code class="lang-bash">sudo ufw <span class="hljs-built_in">enable</span>
</code></pre>
<p>Responda <code>y</code> caso a pergunta abaixo apareça:</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1726016738177/91ab96b6-87cb-41cc-bf95-b77a3fedc3a8.png" alt class="image--center mx-auto" /></p>
<p><strong>4.5. Verificar as Regras Atuais</strong></p>
<p>Após configurar as regras, verifique se elas foram aplicadas corretamente:</p>
<pre><code class="lang-bash">sudo ufw status verbose
</code></pre>
<p>Você verá algo como mostrado abaixo:</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1726016801558/3785c099-2255-4956-937b-17b5dbb68fe7.png" alt class="image--center mx-auto" /></p>
<h2 id="heading-5-instalacao-do-nodejs-com-nvm">5. Instalação do Node.js com NVM</h2>
<p><strong>5.1. Instalar o NVM</strong></p>
<p>Instale o Node Version Manager (NVM) para gerenciar versões do Node.js:</p>
<pre><code class="lang-bash">curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.40.2/install.sh | bash
</code></pre>
<p><strong>5.2. Carregar o NVM no Ambiente</strong></p>
<p>Carregue o NVM no ambiente com o comando abaixo:</p>
<pre><code class="lang-bash"><span class="hljs-built_in">source</span> ~/.bashrc
</code></pre>
<p><strong>5.3. Instalar e Usar o Node.js</strong></p>
<p>Agora, instale e use a versão 20.10.0 do Node.js:</p>
<pre><code class="lang-bash">nvm install v22.14.0 &amp;&amp; nvm use v22.14.0
</code></pre>
<p><strong>5.4. Verificar Instalação do NVM</strong></p>
<p>Confirme que o NVM foi instalado com sucesso:</p>
<pre><code class="lang-bash"><span class="hljs-built_in">command</span> -v nvm
</code></pre>
<h2 id="heading-6-instalacao-e-configuracao-da-evolution-api">6. Instalação e Configuração da Evolution API</h2>
<p><strong>6.1. Clonar o Repositório da API</strong></p>
<p>Clone o repositório oficial da Evolution API v2 a partir da branch correta:</p>
<pre><code class="lang-bash">git <span class="hljs-built_in">clone</span> --branch 2.2.3 https://github.com/EvolutionAPI/evolution-api.git
</code></pre>
<p><strong>6.2. Instalar Dependências</strong></p>
<p>Acesse o diretório do projeto e instale as dependências necessárias:</p>
<pre><code class="lang-bash"><span class="hljs-built_in">cd</span> evolution-api &amp;&amp; npm install
</code></pre>
<h2 id="heading-7-configuracao-das-variaveis-de-ambiente">7. Configuração das Variáveis de Ambiente</h2>
<p><strong>7.1. Copiar Arquivo de Exemplo</strong> <code>.env</code></p>
<p>Copie o arquivo de exemplo <code>.env.example</code> para <code>.env</code>:</p>
<pre><code class="lang-bash">cp ./.env.example ./.env
</code></pre>
<p><strong>7.2. Editar o Arquivo</strong> <code>.env</code></p>
<p>Edite o arquivo <code>.env</code> e substitua os valores conforme necessário. As variáveis mais importantes são as de conexão com o banco de dados:</p>
<pre><code class="lang-bash">nano ./.env
</code></pre>
<p>Altere os seguintes valores:</p>
<ul>
<li><p><code>DB_USER</code>: <code>postgres</code></p>
</li>
<li><p><code>DB_PASS</code>: <strong>a senha do banco que você definiu anteriormente</strong></p>
</li>
</ul>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1726017105263/58e5de58-2b31-4914-b815-0ef24fe77718.png" alt class="image--center mx-auto" /></p>
<p>Você também 🚨<strong>PRECISA MUDAR</strong>🚨 e anotar a <strong>API Key Global</strong>, pois você precisará dela para acessar a plataforma. <em><mark>A instalação padrão vem com essa chave, ou seja, é um risco a sua segurança.</mark></em></p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1726018339960/328a3191-1217-4c0a-8434-a06a4a6ebd3e.png" alt /></p>
<p>(<a target="_blank" href="https://doc.evolution-api.com/v2/pt/env">documentação</a> do arquivo .env aqui)</p>
<h2 id="heading-8-geracao-e-deploy-do-banco-de-dados">8. Geração e Deploy do Banco de Dados</h2>
<p>Após configurar o ambiente, você precisará realizar a geração dos arquivos do cliente Prisma e o deploy das migrations no banco de dados. Utilize os comandos abaixo.</p>
<p><strong>8.1. Gerar Arquivos Prisma</strong></p>
<p>Gerar os arquivos do cliente Prisma:</p>
<pre><code class="lang-bash">npm run db:generate
</code></pre>
<p><strong>8.2. Deploy das Migrations</strong></p>
<p>Realize o deploy das migrations para configurar o banco de dados:</p>
<pre><code class="lang-bash">npm run db:deploy
</code></pre>
<h2 id="heading-9-inicializando-a-evolution-api">9. Inicializando a Evolution API</h2>
<p>Após todas as configurações, inicie a Evolution API:</p>
<pre><code class="lang-bash">npm run build &amp;&amp; npm run start:prod
</code></pre>
<h2 id="heading-10-gerenciamento-com-pm2">10. Gerenciamento com PM2</h2>
<p><strong>10.1. Instalar PM2</strong></p>
<p>Para gerenciar a API, instale o PM2:</p>
<pre><code class="lang-bash">npm install pm2 -g
</code></pre>
<p><strong>10.2. Iniciar a Evolution API com PM2</strong></p>
<p>Inicie a API com PM2 e configure o PM2 para inicializar automaticamente:</p>
<pre><code class="lang-bash">pm2 start <span class="hljs-string">'npm run start:prod'</span> --name ApiEvolution &amp;&amp;
pm2 startup &amp;&amp;
pm2 save --force
</code></pre>
<h2 id="heading-11-verificar-a-api">11. Verificar a API</h2>
<p>Para verificar se a API está em execução, acesse o IP do servidor na porta 8080 (http://ip-do-servidor:8080). Você deve receber a seguinte resposta:</p>
<pre><code class="lang-json">{
  <span class="hljs-attr">"status"</span>: <span class="hljs-number">200</span>,
  <span class="hljs-attr">"message"</span>: <span class="hljs-string">"Welcome to the Evolution API, it is working!"</span>,
  <span class="hljs-attr">"version"</span>: <span class="hljs-string">"2.0.10"</span>,
  <span class="hljs-attr">"clientName"</span>: <span class="hljs-string">"evolution01"</span>,
  <span class="hljs-attr">"manager"</span>: <span class="hljs-string">"https://evo2.site.com/manager"</span>,
  <span class="hljs-attr">"documentation"</span>: <span class="hljs-string">"https://doc.evolution-api.com"</span>
}
</code></pre>
<p>Acesse a interface de gerenciamento em:</p>
<p>http://&lt;IP-DO-SEU-SERVIDOR&gt;:8080/manager/login</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1726018214188/628fc888-a123-40a3-87b7-f0c912b4c5d9.png" alt class="image--center mx-auto" /></p>
<p>No campo <code>API Key Global</code>, informe a chave que você configurou no arquivo <code>.env</code>.</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1726018339960/328a3191-1217-4c0a-8434-a06a4a6ebd3e.png" alt class="image--center mx-auto" /></p>
<h2 id="heading-12-finalizando">12. Finalizando</h2>
<p>Tudo pronto! Agora você pode acessar a Evolution API e gerenciá-la diretamente pela interface. Não esqueça de salvar as configurações e realizar testes para garantir que tudo esteja funcionando corretamente.</p>
<h3 id="heading-te-ajudei">Te ajudei?</h3>
<p>Me paga uma cerveja! 🍺😁</p>
<p>PIX QrCode</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1726095550809/4e01f0a4-4231-47ac-9baf-7c1c7d263fb4.png" alt /></p>
]]></content:encoded></item><item><title><![CDATA[Como trocar o VITE por Laravel MIX]]></title><description><![CDATA[Execute o comando npm install laravel-mix --save-dev na raiz do seu projeto.
Crie um arquivo com o nome de webpack.mix.js na raiz do seu projeto, edite e deixe como abaixo.
let mix = require('laravel-mix');

/*
 |-------------------------------------...]]></description><link>https://luanrodrigues.com.br/como-trocar-o-vite-por-laravel-mix</link><guid isPermaLink="true">https://luanrodrigues.com.br/como-trocar-o-vite-por-laravel-mix</guid><category><![CDATA[vite]]></category><category><![CDATA[Laravel]]></category><category><![CDATA[laravel mix]]></category><dc:creator><![CDATA[Luan Rodrigues]]></dc:creator><pubDate>Mon, 09 Oct 2023 22:30:22 GMT</pubDate><content:encoded><![CDATA[<p>Execute o comando <code>npm install laravel-mix --save-dev</code> na raiz do seu projeto.</p>
<p>Crie um arquivo com o nome de <code>webpack.mix.js</code> na raiz do seu projeto, edite e deixe como abaixo.</p>
<pre><code class="lang-php">let mix = <span class="hljs-keyword">require</span>(<span class="hljs-string">'laravel-mix'</span>);

<span class="hljs-comment">/*
 |--------------------------------------------------------------------------
 | Mix Asset Management
 |--------------------------------------------------------------------------
 |
 | Mix provides a clean, fluent API for defining some Webpack build steps
 | for your Laravel application. By default, we are compiling the Sass
 | file for the application as well as bundling up all the JS files.
 |
 */</span>

mix.js(<span class="hljs-string">'resources/js/app.js'</span>, <span class="hljs-string">'public/js'</span>)
    .sass(<span class="hljs-string">'resources/sass/app.scss'</span>, <span class="hljs-string">'public/css'</span>)
    .sourceMaps();
</code></pre>
<p>Altere o arquivo <code>package.json</code></p>
<p><strong>Original</strong></p>
<pre><code class="lang-javascript">{
    <span class="hljs-string">"private"</span>: <span class="hljs-literal">true</span>,
    <span class="hljs-string">"type"</span>: <span class="hljs-string">"module"</span>,
    <span class="hljs-string">"scripts"</span>: {
        <span class="hljs-string">"dev"</span>: <span class="hljs-string">"vite"</span>,
        <span class="hljs-string">"build"</span>: <span class="hljs-string">"vite build"</span>
    },
    <span class="hljs-string">"devDependencies"</span>: {
        <span class="hljs-string">"@popperjs/core"</span>: <span class="hljs-string">"^2.11.6"</span>,
        <span class="hljs-string">"axios"</span>: <span class="hljs-string">"^1.1.2"</span>,
        <span class="hljs-string">"bootstrap"</span>: <span class="hljs-string">"^5.2.3"</span>,
        <span class="hljs-string">"laravel-vite-plugin"</span>: <span class="hljs-string">"^0.8.0"</span>,
        <span class="hljs-string">"sass"</span>: <span class="hljs-string">"^1.56.1"</span>,
        <span class="hljs-string">"vite"</span>: <span class="hljs-string">"^4.0.0"</span>
    }
}
</code></pre>
<p><strong>Modificado</strong></p>
<pre><code class="lang-javascript">{
    <span class="hljs-string">"private"</span>: <span class="hljs-literal">true</span>,
    <span class="hljs-string">"scripts"</span>: {
        <span class="hljs-string">"dev"</span>: <span class="hljs-string">"npm run development"</span>,
        <span class="hljs-string">"development"</span>: <span class="hljs-string">"mix"</span>,
        <span class="hljs-string">"watch"</span>: <span class="hljs-string">"mix watch"</span>,
        <span class="hljs-string">"watch-poll"</span>: <span class="hljs-string">"mix watch -- --watch-options-poll=1000"</span>,
        <span class="hljs-string">"hot"</span>: <span class="hljs-string">"mix watch --hot"</span>,
        <span class="hljs-string">"prod"</span>: <span class="hljs-string">"npm run production"</span>,
        <span class="hljs-string">"production"</span>: <span class="hljs-string">"mix --production"</span>
    },
    <span class="hljs-string">"devDependencies"</span>: {
        <span class="hljs-string">"@popperjs/core"</span>: <span class="hljs-string">"^2.11.6"</span>,
        <span class="hljs-string">"axios"</span>: <span class="hljs-string">"^1.1.2"</span>,
        <span class="hljs-string">"bootstrap"</span>: <span class="hljs-string">"^5.2.3"</span>,
        <span class="hljs-string">"laravel-mix"</span>: <span class="hljs-string">"^6.0.49"</span>,
        <span class="hljs-string">"lodash"</span>: <span class="hljs-string">"^4.17.19"</span>,
        <span class="hljs-string">"postcss"</span>: <span class="hljs-string">"^8.1.14"</span>,
        <span class="hljs-string">"resolve-url-loader"</span>: <span class="hljs-string">"^5.0.0"</span>,
        <span class="hljs-string">"sass"</span>: <span class="hljs-string">"^1.56.1"</span>,
        <span class="hljs-string">"sass-loader"</span>: <span class="hljs-string">"^12.6.0"</span>
    }
}
</code></pre>
<p>Edite o arquivo <code>.env</code>, localize as variáveis abaixo e substitua</p>
<p><strong>Original</strong></p>
<pre><code class="lang-javascript">VITE_APP_NAME=<span class="hljs-string">"${APP_NAME}"</span>
VITE_PUSHER_APP_KEY=<span class="hljs-string">"${PUSHER_APP_KEY}"</span>
VITE_PUSHER_HOST=<span class="hljs-string">"${PUSHER_HOST}"</span>
VITE_PUSHER_PORT=<span class="hljs-string">"${PUSHER_PORT}"</span>
VITE_PUSHER_SCHEME=<span class="hljs-string">"${PUSHER_SCHEME}"</span>
VITE_PUSHER_APP_CLUSTER=<span class="hljs-string">"${PUSHER_APP_CLUSTER}"</span>
</code></pre>
<p><strong>Modificado</strong></p>
<pre><code class="lang-javascript">MIX_PUSHER_APP_KEY=<span class="hljs-string">"${PUSHER_APP_KEY}"</span>
MIX_PUSHER_APP_CLUSTER=<span class="hljs-string">"${PUSHER_APP_CLUSTER}"</span>
</code></pre>
<p>Nos arquivos blade, você deve trocar chamadas do vite pelas do mix.</p>
<p>A exemplo do arquivo <code>app.blade.php</code></p>
<p><strong>Original</strong></p>
<pre><code class="lang-javascript">    &lt;!-- Scripts --&gt;
    @vite([<span class="hljs-string">'resources/sass/app.scss'</span>, <span class="hljs-string">'resources/js/app.js'</span>])
</code></pre>
<p><strong>Modificado</strong></p>
<pre><code class="lang-javascript">&lt;!-- Scripts --&gt;
<span class="xml"><span class="hljs-tag">&lt;<span class="hljs-name">link</span> <span class="hljs-attr">rel</span>=<span class="hljs-string">"stylesheet"</span> <span class="hljs-attr">href</span>=<span class="hljs-string">"{{ mix('css/app.css') }}"</span>&gt;</span></span>
</code></pre>
<p>Remova o vite, execute os comandos abaixo na raiz do projeto.</p>
<pre><code class="lang-javascript">npm remove vite laravel-vite-plugin
</code></pre>
<p>Remova o arquivo de configuração</p>
<pre><code class="lang-javascript">rm vite.config.js
</code></pre>
]]></content:encoded></item><item><title><![CDATA[Como instalar o NodeJS a partir dos binários - Ubuntu 22.04]]></title><description><![CDATA[1º - Atualize o sistema operacional.
sudo apt update && sudo apt upgrade

No site oficial do node.js você pode baixar os binários mais recentes como mostra a figura abaixo. Na data que escrevo, a versão LTS(long time support) é a 22.19.0. Usaremos el...]]></description><link>https://luanrodrigues.com.br/como-instalar-o-nodejs-a-partir-dos-binarios-ubuntu-2204</link><guid isPermaLink="true">https://luanrodrigues.com.br/como-instalar-o-nodejs-a-partir-dos-binarios-ubuntu-2204</guid><category><![CDATA[Node.js]]></category><category><![CDATA[Ubuntu]]></category><category><![CDATA[install]]></category><category><![CDATA[npm]]></category><category><![CDATA[node]]></category><dc:creator><![CDATA[Luan Rodrigues]]></dc:creator><pubDate>Tue, 18 Jul 2023 02:11:49 GMT</pubDate><content:encoded><![CDATA[<p>1º - Atualize o sistema operacional.</p>
<pre><code class="lang-plaintext">sudo apt update &amp;&amp; sudo apt upgrade
</code></pre>
<p>No site oficial do node.js você pode baixar os binários mais recentes como mostra a figura abaixo. Na data que escrevo, a versão LTS(long time support) é a <strong>22.19.0. Usaremos ela neste tutorial.</strong></p>
<p>2º - Use o comando abaixo no seu terminal para baixar os binários.</p>
<pre><code class="lang-plaintext">curl -o node.tar.xz https://nodejs.org/dist/v22.19.0/node-v22.19.0-linux-x64.tar.xz
</code></pre>
<p>3º - Use o comando abaixo para descompatar o pacote e entrar na pasta.</p>
<pre><code class="lang-plaintext">tar -xf node.tar.xz &amp;&amp; cd node-v22.19.0-linux-x64
</code></pre>
<p>4º - Com o comando abaixo, vamos copiar os arquivos para que fiquem disponíveis globalmente.</p>
<pre><code class="lang-plaintext">sudo cp -R * /usr/local/
</code></pre>
<p>Pronto! Feito isso o noje deve estar disponível para uso. Execute os comandos abaixo para verificar.</p>
<pre><code class="lang-plaintext">node -v &amp;&amp; npm -v
</code></pre>
<p>Se tudo estiver correto, você deve ver algo como mostrado na figura.</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1743533596855/4f82b112-2e6d-482d-b538-2dfd5244b576.png" alt class="image--center mx-auto" /></p>
]]></content:encoded></item><item><title><![CDATA[Como configurar a implantação automática com Git com um VPS]]></title><description><![CDATA[Introdução
Para uma introdução ao Git e como instalar, consulte o tutorial de introdução.
Este artigo ensinará como usar o Git quando quiser implantar seu aplicativo. Embora existam muitas maneiras de usar o Git para implantar nosso aplicativo, este ...]]></description><link>https://luanrodrigues.com.br/como-configurar-a-implantacao-automatica-com-git-com-um-vps</link><guid isPermaLink="true">https://luanrodrigues.com.br/como-configurar-a-implantacao-automatica-com-git-com-um-vps</guid><category><![CDATA[Git]]></category><category><![CDATA[deployment]]></category><category><![CDATA[Laravel]]></category><dc:creator><![CDATA[Luan Rodrigues]]></dc:creator><pubDate>Tue, 18 Jul 2023 00:50:52 GMT</pubDate><content:encoded><![CDATA[<h2 id="heading-introducao">Introdução</h2>
<p>Para uma introdução ao Git e como instalar, consulte o tutorial de introdução.</p>
<p>Este artigo ensinará como usar o Git quando quiser implantar seu aplicativo. Embora existam muitas maneiras de usar o Git para implantar nosso aplicativo, este tutorial se concentrará na mais direta. Presumo que você já saiba como criar e usar um repositório em sua máquina local. Caso contrário, consulte este tutorial.</p>
<p>Quando você usa o Git, o fluxo de trabalho geralmente é voltado apenas para o controle de versão. Você tem um repositório local onde trabalha e um repositório remoto onde mantém tudo sincronizado e pode trabalhar com uma equipe e máquinas diferentes. Mas você também pode usar o Git para mover seu aplicativo para produção.</p>
<h2 id="heading-configuracao-do-servidor">Configuração do Servidor</h2>
<p>Nosso espaço de trabalho fictício:</p>
<p>O diretório ao vivo do seu servidor: /var/www/domain.com</p>
<p>Seu repositório do servidor: /var/repo/site.git</p>
<p>O que devemos fazer se quisermos enviar para site.git e ao mesmo tempo disponibilizar todo o conteúdo em /var/www/domain.com?</p>
<h2 id="heading-criando-nosso-repositorio">Criando nosso repositório</h2>
<p>Faça login no seu VPS a partir da linha de comando e digite o seguinte:</p>
<pre><code class="lang-plaintext">cd /var &amp;&amp; mkdir repo &amp;&amp; cd repo &amp;&amp; mkdir site.git &amp;&amp; cd site.git &amp;&amp; git init --bare
</code></pre>
<p><code>--bare</code> significa que nossa pasta não terá arquivos de origem, apenas o controle de versão.</p>
<h2 id="heading-hooks">Hooks</h2>
<p>Os repositórios Git têm uma pasta chamada 'hooks'. Esta pasta contém alguns arquivos de amostra para possíveis ações que você pode conectar e executar ações personalizadas definidas por você.</p>
<p>A documentação do Git define três ganchos de servidor possíveis: 'pré-receber', 'pós-receber' e 'atualizar'. 'Pré-recebimento' é executado assim que o servidor recebe um 'push', 'atualização' é semelhante, mas é executado uma vez para cada ramificação, e 'pós-recebimento' é executado quando um 'push' é completamente finalizado e é o um em que estamos interessados.</p>
<p>Em nosso repositório, se você digitar:</p>
<pre><code class="lang-plaintext">ls
</code></pre>
<p>Você verá alguns arquivos e pastas, incluindo a pasta 'hooks'. Então vamos para a pasta 'hooks':</p>
<pre><code class="lang-plaintext">cd hooks
</code></pre>
<p>Agora, crie o arquivo 'post-receive' digitando:</p>
<pre><code class="lang-plaintext">cat &gt; post-receive
</code></pre>
<p>Ao executar este comando, você terá uma linha em branco indicando que tudo o que você digitar será salvo neste arquivo. Então vamos digitar:</p>
<pre><code class="lang-plaintext">#!/bin/sh 
git --work-tree=/var/www/domain.com --git-dir=/var/repo/site.git checkout -f
</code></pre>
<p>Quando terminar de digitar, pressione 'control-d' para salvar. Para executar o arquivo, precisamos definir as permissões apropriadas usando:</p>
<pre><code class="lang-plaintext">chmod +x post-receive
</code></pre>
<p>Você pode ver na documentação que 'git-dir' é o caminho para o repositório. Com 'árvore de trabalho', você pode definir um caminho diferente para onde seus arquivos serão realmente transferidos.</p>
<p>O arquivo 'post-receive' será analisado toda vez que um push for concluído e está dizendo que seus arquivos precisam estar em /var/www/domain.com.</p>
<h2 id="heading-local-machine">Local Machine</h2>
<p>Vamos criar nosso repositório local. Você deve alterar o caminho e o nome para o que você escolher. Se você estiver em um VPS, basta digitar:</p>
<pre><code class="lang-plaintext">exit
</code></pre>
<p>E crie seu repo:</p>
<pre><code class="lang-plaintext">cd /my/workspace &amp;&amp; mkdir project &amp;&amp; cd project &amp;&amp; git init
</code></pre>
<p>Então precisamos configurar o caminho remoto do nosso repositório. Diga ao Git para adicionar um controle remoto chamado 'live':</p>
<pre><code class="lang-plaintext">git remote add live ssh://user@mydomain.com/var/repo/site.git
</code></pre>
<p>Aqui devemos dar o link do repositório e não a pasta live.</p>
<p>Vamos supor que temos um ótimo trabalho pronto nesta pasta. Devemos seguir os passos usuais de adicionar os arquivos e confirmar com uma mensagem:</p>
<pre><code class="lang-plaintext">git add . &amp;&amp; git commit -m "My project is ready"
</code></pre>
<p>Só para lembrar, o ponto após 'git add' significa que você está adicionando todos os arquivos ao stage. Depois de 'git commit', temos '-m', o que significa que digitaremos uma mensagem. Para completar, basta 'empurrar' tudo para o servidor. Usamos o alias 'ao vivo' que usamos ao configurar o controle remoto.</p>
<pre><code class="lang-plaintext">git push --set-upstream live master
</code></pre>
<pre><code class="lang-plaintext">Counting objects: 7, done.
Delta compression using up to 4 threads.
Compressing objects: 100% (7/7), done.
Writing objects: 100% (7/7), 10.56 KiB, done.
Total 7 (delta 0), reused 0 (delta 0)To ssh://user@mydomain.com/var/repo/site.git* [new branch] master -&gt; master
</code></pre>
<p>Aqui, dizemos ao Git para enviar para a branch remota 'live' na ramificação 'master'.</p>
]]></content:encoded></item><item><title><![CDATA[MySQL + NGINX + PHP 8.2 no Ubuntu 22.04]]></title><description><![CDATA[Vamos atualizar os pacotes do sistema.
Primeiro, vamos atualizar os pacotes existentes em seu sistema operacional. Para fazer isso, abra um terminal e digite os seguintes comandos:
sudo apt update
sudo apt -y upgrade

MySQL
Agora você pode instalar o...]]></description><link>https://luanrodrigues.com.br/mysql-nginx-php-82-no-ubuntu-2204</link><guid isPermaLink="true">https://luanrodrigues.com.br/mysql-nginx-php-82-no-ubuntu-2204</guid><category><![CDATA[LEMP]]></category><category><![CDATA[nginx]]></category><category><![CDATA[PHP]]></category><category><![CDATA[Ubuntu]]></category><dc:creator><![CDATA[Luan Rodrigues]]></dc:creator><pubDate>Mon, 17 Jul 2023 23:55:36 GMT</pubDate><content:encoded><![CDATA[<p>Vamos atualizar os pacotes do sistema.</p>
<p>Primeiro, vamos atualizar os pacotes existentes em seu sistema operacional. Para fazer isso, abra um terminal e digite os seguintes comandos:</p>
<pre><code class="lang-plaintext">sudo apt update
sudo apt -y upgrade
</code></pre>
<h2 id="heading-mysql">MySQL</h2>
<p>Agora você pode instalar o pacote do servidor MySQL executando o seguinte comando:</p>
<pre><code class="lang-plaintext">sudo apt install mysql-server
</code></pre>
<p>Durante a instalação, você será solicitado a definir uma senha para o usuário "root" do MySQL. Escolha uma senha segura e lembre-se dela, pois você precisará dela mais tarde.</p>
<p>Passo 3: Inicie o serviço do MySQL Após a conclusão da instalação, o serviço do MySQL deve ser iniciado automaticamente. No entanto, se o serviço não iniciar, você pode iniciar manualmente usando o seguinte comando:</p>
<pre><code class="lang-plaintext">sudo service mysql start
</code></pre>
<p>Passo 4: Verifique o status do serviço MySQL Você pode verificar se o serviço do MySQL está em execução executando o seguinte comando:</p>
<pre><code class="lang-plaintext">sudo service mysql status
</code></pre>
<p>Se estiver em execução, você deverá ver uma mensagem indicando que o serviço está ativo.</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1689276091043/beff6fd0-7554-4dd9-920c-96d4aa7e2d5d.png" alt class="image--center mx-auto" /></p>
<p>Passo 5: Acesse o servidor MySQL Por padrão, a instalação do MySQL no Ubuntu usa autenticação baseada em senha. Você pode acessar o servidor MySQL usando o seguinte comando:</p>
<pre><code class="lang-plaintext">sudo mysql -uroot
</code></pre>
<p>Vamos alterar a senha do usuário root.</p>
<pre><code class="lang-plaintext">ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'SUA-SENHA-AQUI';
FLUSH PRIVILEGES;
</code></pre>
<p>Após executar essas etapas, você terá o MySQL instalado e pronto para uso no seu sistema Ubuntu. Agora você pode criar bancos de dados, tabelas e executar consultas SQL no MySQL.</p>
<h2 id="heading-nginx">NGINX</h2>
<pre><code class="lang-plaintext">sudo apt install nginx
</code></pre>
<p>Durante o processo de instalação, você será solicitado a confirmar. Pressione "Y" e depois "Enter" para continuar. Aguarde até que o processo de instalação seja concluído.<br />Depois de concluir esses passos, o Nginx estará instalado em seu sistema Ubuntu. Você pode verificar se o serviço está em execução digitando o endereço IP do seu servidor em um navegador da web. Você deve ver a página de boas-vindas padrão do Nginx, indicando que a instalação foi bem-sucedida.</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1689277750271/e01e095d-9674-45ce-beaa-3273aa852255.png" alt class="image--center mx-auto" /></p>
<h2 id="heading-php-82">PHP 8.2</h2>
<p>Adicione o repositório, <a target="_blank" href="https://github.com/oerdnj">Ondřej Surý</a> é um desenvolvedor que mantém um repositório com as versões mais recentes do PHP para Ubuntu. Você pode adicionar o repositório dele ao seu sistema usando os seguintes comandos:</p>
<pre><code class="lang-plaintext">sudo apt install software-properties-common
sudo add-apt-repository ppa:ondrej/php
sudo apt update
</code></pre>
<p>Agora que você adicionou o repositório do Ondřej, você pode instalar o PHP 8.2. Use este comando para fazer isso:</p>
<pre><code class="lang-plaintext">sudo apt install php8.2
</code></pre>
<p>Depois de instalado, você pode verificar se o PHP 8.2 foi corretamente instalado com o seguinte comando:</p>
<pre><code class="lang-plaintext">php -v
</code></pre>
<p>Este comando deve exibir informações sobre a versão do PHP que está atualmente ativa no seu sistema. Se você fez tudo corretamente, deve ver que a versão 8.2 está instalada.</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1689276011605/1b03e20f-def1-4fd6-b3a9-bcea0a572410.png" alt class="image--center mx-auto" /></p>
<p>Vamos instalar os módulos para trabalhar com MySQL e com o <a target="_blank" href="https://www.php.net/manual/en/install.fpm.php">FPM</a> e alguns outros.</p>
<pre><code class="lang-plaintext">sudo apt install php8.2-cli php8.2-common php8.2-fpm php8.2-mysql php8.2-curl php8.2-memcached php8.2-dev php8.2-pgsql php8.2-sqlite3 php8.2-mbstring php8.2-gd php8.2-imagick php8.2-imap php8.2-opcache php8.2-xmlrpc php8.2-xml php8.2-zip php8.2-bcmath php8.2-soap php8.2-intl php8.2-readline unzip -y
</code></pre>
<p>Você pode instalar outros módulos PHP de acordo com suas necessidades, <a target="_blank" href="https://luanrodrigues.com.br/modulos-php">aqui</a> tenho uma lista de alguns.</p>
<p>Vamos integrar o PHP e NGINX</p>
<p>Primeiro vamos fazer o backup do arquivo de configuração padrão do NGINX, execute o comando abaixo.</p>
<pre><code class="lang-plaintext">sudo mv /etc/nginx/sites-available/default /etc/nginx/sites-available/default_config
</code></pre>
<p>Feito o backup, vamos criar um novo arquivo de configuração.</p>
<pre><code class="lang-plaintext">sudo nano /etc/nginx/sites-available/default
</code></pre>
<p>Copia a configuração abaixo e cole no novo arquivo de configuração.</p>
<pre><code class="lang-plaintext">server {

  # Port that the web server will listen on.
  listen 80;

  # Host that will serve this project.
  server_name localhost;

  # Useful logs for debug.
  access_log /var/log/nginx/localhost_access.log;
  error_log /var/log/nginx/localhost_error.log;
  rewrite_log on;

  # The location of our projects public directory.
  root /var/www/;

  # Point index of your project.
  index index.php index.html;

  location / {
    # URLs to attempt, including pretty ones.
    try_files $uri $uri/ /index.php?$query_string;
  }

  # Remove trailing slash to please routing system.
  if (!-d $request_filename) {
    rewrite ^/(.+)/$ /$1 permanent;
  }

  # PHP FPM configuration.
  location ~* \.php$ {
    fastcgi_pass unix:/run/php/php8.2-fpm.sock;
    fastcgi_index index.php;
    fastcgi_split_path_info ^(.+\.php)(.*)$;
    include /etc/nginx/fastcgi_params;
    fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
  }

  location ~ /\.ht {
    deny all;
  }

}
</code></pre>
<p>Salve o arquivo <code>ctrl+o</code> em seguida <code>enter</code> e saia <code>ctrl+x</code>.</p>
<p>Vamos testasr a configuração que acabamos de fazer, ver se ficou tudo ok.</p>
<pre><code class="lang-plaintext">sudo nginx -t
</code></pre>
<p>Se tiver tudo ok, você deve ver uma imagem como esta</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1689638103280/87c1db73-498e-436a-975d-370d6490e8ac.png" alt class="image--center mx-auto" /></p>
<p>Agora vamos criar um arquivo chamado <code>info.php</code> para ver se nossa configuração funcionou.</p>
<pre><code class="lang-plaintext">sudo nano /var/www/index.php
</code></pre>
<p>Copie e cole o código abaixo.</p>
<pre><code class="lang-plaintext">&lt;?php
phpinfo();
</code></pre>
<p>Volte ao navegador e acesse <a target="_blank" href="http://localhost/info.php">http://localhost/</a>, desta vez você deve ver uma página com todas as informações do PHP 8.2.</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1689638406631/3e3f2e4c-0106-4b8e-8b12-069379eb4864.png" alt class="image--center mx-auto" /></p>
]]></content:encoded></item><item><title><![CDATA[Módulos PHP]]></title><description><![CDATA[Lista de módulos PHP
php8.2-cli: É o módulo de linha de comando (Command Line Interface) do PHP 8.2. Ele permite a execução de scripts PHP diretamente no terminal.
php8.2-common: Contém arquivos comuns do PHP, como bibliotecas e configurações básicas...]]></description><link>https://luanrodrigues.com.br/modulos-php</link><guid isPermaLink="true">https://luanrodrigues.com.br/modulos-php</guid><category><![CDATA[PHP]]></category><category><![CDATA[Laravel]]></category><category><![CDATA[Developer]]></category><category><![CDATA[backend]]></category><dc:creator><![CDATA[Luan Rodrigues]]></dc:creator><pubDate>Thu, 13 Jul 2023 19:31:48 GMT</pubDate><content:encoded><![CDATA[<h3 id="heading-lista-de-modulos-php">Lista de módulos PHP</h3>
<p><code>php8.2-cli</code>: É o módulo de linha de comando (Command Line Interface) do PHP 8.2. Ele permite a execução de scripts PHP diretamente no terminal.</p>
<p><code>php8.2-common</code>: Contém arquivos comuns do PHP, como bibliotecas e configurações básicas necessárias para a maioria das aplicações.</p>
<p><code>php8.2-fpm</code>: É o módulo FastCGI Process Manager do PHP 8.2. Ele fornece uma interface entre um servidor web e o PHP, permitindo o processamento eficiente de solicitações da web.</p>
<p><code>php8.2-mysql</code>: Fornece suporte para a conexão e manipulação de bancos de dados MySQL no PHP 8.2.</p>
<p><code>php8.2-curl</code>: Habilita o suporte para a biblioteca cURL, que permite o envio de requisições HTTP e outras operações relacionadas com protocolos de rede.</p>
<p><code>php8.2-memcached</code>: Oferece suporte à extensão Memcached, que permite a utilização do serviço de armazenamento em cache distribuído Memcached.</p>
<p><code>php8.2-dev</code>: É o módulo de desenvolvimento do PHP 8.2. Ele fornece ferramentas e bibliotecas adicionais para desenvolvedores PHP.</p>
<p><code>php8.2-pgsql</code>: Fornece suporte para a conexão e manipulação de bancos de dados PostgreSQL no PHP 8.2.</p>
<p><code>php8.2-sqlite3</code>: Habilita o suporte para o banco de dados SQLite 3 no PHP 8.2.</p>
<p><code>php8.2-mbstring</code>: Fornece funções para manipulação de strings multibyte, como codificação, detecção de caracteres e conversão de caracteres.</p>
<p><code>php8.2-gd</code>: Oferece suporte à biblioteca GD, permitindo a manipulação de imagens no PHP, como criação de miniaturas, redimensionamento e aplicação de efeitos.</p>
<p><code>php8.2-imagick</code>: Habilita a extensão Imagick, que oferece recursos avançados de manipulação de imagens por meio da biblioteca ImageMagick.</p>
<p><code>php8.2-imap</code>: Fornece suporte para a comunicação com servidores de email usando o protocolo IMAP, permitindo a leitura e manipulação de emails no PHP 8.2.</p>
<p><code>php8.2-opcache</code>: É um mecanismo de armazenamento em cache interno do PHP 8.2 que melhora o desempenho ao pré-compilar e armazenar em cache o código PHP.</p>
<p><code>php8.2-xmlrpc</code>: Habilita suporte ao protocolo XML-RPC, permitindo a criação de serviços web que podem ser acessados via XML-RPC.</p>
<p><code>php8.2-xml</code>: Fornece funcionalidades para a manipulação e processamento de XML no PHP 8.2, como análise, validação e geração de documentos XML.</p>
<p><code>php8.2-zip</code>: Habilita o suporte para a manipulação de arquivos ZIP no PHP 8.2, permitindo a criação, extração e manipulação de arquivos compactados ZIP.</p>
<p><code>php8.2-bcmath</code>: Oferece funções matemáticas de precisão arbitrária (big number) no PHP 8.2, permitindo cálculos com números muito grandes ou com alta precisão.</p>
<p><code>php8.2-soap</code>: Habilita o suporte ao protocolo SOAP (Simple Object Access Protocol), permitindo a criação e consumo de serviços web baseados em SOAP no PHP 8.2.</p>
<p><code>php8.2-intl</code>: Fornece suporte para recursos internacionais, como formatação de datas, números e strings de acordo com diferentes localidades e culturas.</p>
<p><code>php8.2-readline</code>: Habilita recursos de leitura interativa no PHP 8.2, permitindo a interação com o usuário através do terminal, incluindo recursos como histórico de comandos e autocompletar.</p>
<p><code>php8.2-json</code>: Fornece suporte para codificação e decodificação de dados no formato JSON.</p>
<p><code>php8.2-ldap</code>: Habilita o suporte para interação com servidores LDAP (Lightweight Directory Access Protocol) no PHP.</p>
<p><code>php8.2-redis</code>: Oferece suporte à extensão Redis, permitindo a utilização do banco de dados em memória Redis.</p>
<p><code>php8.2-xdebug</code>: Fornece recursos avançados de depuração para desenvolvedores, como rastreamento de código, perfil de execução e análise de pilha.</p>
<p><code>php8.2-ssh2</code>: Habilita a comunicação segura por meio do protocolo SSH (Secure Shell) no PHP.</p>
<p><code>php8.2-imagick</code>: Oferece recursos avançados de manipulação de imagens por meio da biblioteca ImageMagick.</p>
<p><code>php8.2-mongodb</code>: Habilita a extensão MongoDB, permitindo a comunicação com bancos de dados MongoDB no PHP.</p>
<p><code>php8.2-odbc</code>: Fornece suporte para conexão e manipulação de bancos de dados por meio do ODBC (Open Database Connectivity) no PHP.</p>
<p><code>php8.2-xmlrpc</code>: Habilita suporte ao protocolo XML-RPC, permitindo a criação de serviços web que podem ser acessados via XML-RPC.</p>
<p><code>php8.2-xml</code>: Fornece funcionalidades para a manipulação e processamento de XML no PHP, como análise, validação e geração de documentos XML.</p>
]]></content:encoded></item><item><title><![CDATA[Screen Share Not working in Ubuntu: Fixed]]></title><description><![CDATA[Ubuntu 22.04 has a bug which is we can’t share our screen on any platforms.
The issue with Ubuntu 22.04 is using a display feature called wayland. Wayland is not supporting to screen share by default. In previous ubuntu version we had xorg for displa...]]></description><link>https://luanrodrigues.com.br/screen-share-not-working-in-ubuntu-fixed</link><guid isPermaLink="true">https://luanrodrigues.com.br/screen-share-not-working-in-ubuntu-fixed</guid><category><![CDATA[Ubuntu 22.04]]></category><category><![CDATA[Ubuntu]]></category><category><![CDATA[Linux]]></category><category><![CDATA[discord]]></category><dc:creator><![CDATA[Luan Rodrigues]]></dc:creator><pubDate>Thu, 06 Jul 2023 01:01:21 GMT</pubDate><content:encoded><![CDATA[<p>Ubuntu 22.04 has a bug which is we can’t share our screen on any platforms.</p>
<p>The issue with Ubuntu 22.04 is using a display feature called <em>wayland</em>. Wayland is not supporting to screen share by default. In previous ubuntu version we had xorg for display feature.</p>
<p>To solve this what we have to do is</p>
<ol>
<li>To check which display feature your ubuntu is using, enter the command below in terminal</li>
</ol>
<pre><code class="lang-plaintext">echo $XDG_SESSION_TYPE
</code></pre>
<p>If the above command outputs, <strong>wayland</strong>, then your system is using wayland. Which is causing the problem. So we have to disable wayland and enable xorg(x11).</p>
<p>2. To change display settings from wayland to xorg(x11).</p>
<p>Go to file by entering the command below on terminal</p>
<pre><code class="lang-plaintext">sudo nano /etc/gdm3/custom.conf
</code></pre>
<p>You can use any of the editors like vim, nano etc…</p>
<p>3. Then, uncomment the line.</p>
<pre><code class="lang-plaintext">WaylandEnable=false
</code></pre>
<p>4. Save and then restart/reboot your system.</p>
<p>5. After restart, if we open up the terminal and type the command.</p>
<pre><code class="lang-plaintext">echo $XDG_SESSION_TYPE
</code></pre>
<p>We can see the output has changed from wayland to x11.</p>
<p>Now you can share your screen.</p>
<p>Reposted from <a target="_blank" href="https://lizenshakya.medium.com/screen-share-not-working-in-ubuntu-fixed-1b81741a07c1">lizenshakya</a></p>
]]></content:encoded></item><item><title><![CDATA[Instalando e Configurando o Soketi: um Servidor WebSocket Baseado em Pusher]]></title><description><![CDATA[O Soketi é baseado no uWebSocket.js, um servidor WebSocket baseado em Node.js, transpilado a partir da linguagem C. Ele oferece uma solução robusta e eficiente para comunicação em tempo real entre aplicações.
Se você está procurando uma maneira fácil...]]></description><link>https://luanrodrigues.com.br/instalando-e-configurando-o-soketi-um-servidor-websocket-baseado-em-pusher</link><guid isPermaLink="true">https://luanrodrigues.com.br/instalando-e-configurando-o-soketi-um-servidor-websocket-baseado-em-pusher</guid><category><![CDATA[realtime]]></category><category><![CDATA[realtime apps]]></category><category><![CDATA[DigitalOcean]]></category><category><![CDATA[PHP]]></category><category><![CDATA[websockets]]></category><dc:creator><![CDATA[Luan Rodrigues]]></dc:creator><pubDate>Thu, 15 Jun 2023 03:21:08 GMT</pubDate><content:encoded><![CDATA[<p>O <a target="_blank" href="https://docs.soketi.app">Soketi</a> é baseado no <a target="_blank" href="https://github.com/uNetworking/uWebSockets.js">uWebSocket.js</a>, um servidor WebSocket baseado em Node.js, transpilado a partir da linguagem C. Ele oferece uma solução robusta e eficiente para comunicação em tempo real entre aplicações.</p>
<p>Se você está procurando uma maneira fácil de habilitar a comunicação bidirecional entre um servidor e um cliente em tempo real, o <a target="_blank" href="https://docs.soketi.app">Soketi</a> é a escolha ideal. Ele permite que você transmita informações instantaneamente e de forma assíncrona, sem a necessidade de atualizações constantes da página ou consultas repetitivas ao servidor.</p>
<p>Neste tutorial, você aprenderá como instalar e configurar o <a target="_blank" href="https://docs.soketi.app">Soketi</a> em uma máquina virtual hospedada na <a target="_blank" href="https://m.do.co/c/b7582264f56f">DigitalOcean</a>, uma plataforma de computação em nuvem confiável e escalável.</p>
<p>Não é meu objetivo mostrar como configurar uma máquina na <a target="_blank" href="https://m.do.co/c/b7582264f56f">DO</a>. Vou assumir que você já possui esse conhecimento.</p>
<p>Vamos lá.</p>
<h2 id="heading-instalacao"><strong>Instalação</strong></h2>
<p><mark>É necessário ter o Node.js LTS (14.x, 16.x, etc.) devido às limitações de compilação do uWebSockets.js.</mark></p>
<p>O Soketi pode ser facilmente instalado através do NPM</p>
<pre><code class="lang-basic">npm install -g @soketi/soketi
</code></pre>
<p>Após a instalação, um servidor Soketi com a configuração padrão pode ser iniciado usando o comando</p>
<pre><code class="lang-basic">soketi start
</code></pre>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1686814155656/d527e0a4-fc1b-4455-a7e8-74d4f66bbbbe.png" alt class="image--center mx-auto" /></p>
<p>Por padrão, o comando irá iniciar um servidor em <code>127.0.0.1:6001</code> com as seguintes credenciais de aplicativo:</p>
<ul>
<li><p>App ID: <code>app-id</code></p>
</li>
<li><p>App Key: <code>app-key</code></p>
</li>
<li><p>Secret: <code>app-secret</code></p>
</li>
</ul>
<p>Essas credenciais são usadas pra autenticar seus aplicativos no frontend e backend, permitindo que você mande e receba mensagens em tempo real.</p>
<p>Logo mais abaixo, te explico como você pode alterar.</p>
<h2 id="heading-configuracao-do-servidor"><strong>Configuração do Servidor</strong></h2>
<p>Você pode declarar as configuração do servidor soketi usando variáveis de ambiente ao invocar diretamente o servidor soketi no console, ou como atributos chave-valor em um arquivo .env que é colocado no mesmo diretório onde o comando do servidor soketi é executado.</p>
<p>Exemplo de um arquivo <code>.env</code></p>
<pre><code class="lang-basic">SOKETI_DEBUG=<span class="hljs-number">1</span>
SOKETI_DEFAULT_APP_ID=<span class="hljs-number">1111</span>
SOKETI_DEFAULT_APP_KEY=<span class="hljs-number">2222</span>
SOKETI_DEFAULT_APP_SECRET=<span class="hljs-number">3333</span>
</code></pre>
<p>Uma lista completa de variaveis de ambiente pode ser encontrada <a target="_blank" href="https://docs.soketi.app/app-management/array-driver">clicando aqui</a>.</p>
<p>Exemplo de um arquivo de configuração <code>config.json</code></p>
<pre><code class="lang-JSON">{
    <span class="hljs-attr">"debug"</span>:<span class="hljs-literal">true</span>,
    <span class="hljs-attr">"appManager.array.apps"</span>:[
        {
            <span class="hljs-attr">"id"</span>:<span class="hljs-string">"1111"</span>,
            <span class="hljs-attr">"key"</span>:<span class="hljs-string">"2222"</span>,
            <span class="hljs-attr">"secret"</span>:<span class="hljs-string">"3333"</span>
        }
    ]
}
</code></pre>
<p>Uma lista completa de opções a serem configuradas pode ser encontrada <a target="_blank" href="https://github.com/soketi/soketi/blob/master/src/options.ts">clicando aqui</a>.</p>
<p>Note que em ambos os arquivos de configuração, temos as informações de APP-ID, APP-KEY e APP-SECRET, você pode modificar esses valores livremente. O importante é que uma vez definidos, você use-os no momento de se conectar ao servidor soketi, seja no frontend ou no backend.</p>
<h2 id="heading-iniciando-o-servico">Iniciando o serviço</h2>
<p>Lembre-se, se você optou por usar um arquivo de configuração json, deve iniciar o serviço como mostrado abaixo</p>
<pre><code class="lang-basic">soketi start --config=/path/<span class="hljs-keyword">to</span>/config.json
</code></pre>
<p>Já se tiver optado por usar um arquivo <code>.env,</code> você deve iniciar o serviço no mesmo diretório onde o arquivo <code>.env</code> foi criado. Então a inicialização ficaria:</p>
<pre><code class="lang-basic">soketi start
</code></pre>
<p>Após iniciar o serviço, você deve ver algo como a figura abaixo:</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1686817802406/2685fc44-4077-48bd-9fe4-1d2569e082ac.png" alt class="image--center mx-auto" /></p>
<h2 id="heading-instalando-o-supervisor">Instalando o Supervisor</h2>
<p>Para manter o servidor soketi permanentemente ativo, você deve instalar um gerenciador de processos, no nosso exemplo, iremos utilizar o supervisor, um daemon que pode executar e reiniciar processos em segundo plano.</p>
<p><strong><em>Passo 1</em></strong></p>
<p>Comece atualizando suas fontes de pacotes e instalando o Supervisor:</p>
<pre><code class="lang-basic">sudo apt update &amp;&amp; sudo apt install supervisor
</code></pre>
<p>O serviço do Supervisor é executado automaticamente após a instalação. Você pode verificar o seu status utilizando o comando:</p>
<pre><code class="lang-basic">sudo systemctl status supervisor
</code></pre>
<p>Você deve ver algo no seu console parecido com:</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1686818486267/95bb1000-2910-4788-99d6-5e808a00b42e.png" alt /></p>
<p><strong><em>Passo 2</em></strong></p>
<p>Uma prática recomendada ao trabalhar com o Supervisor é escrever um arquivo de configuração para cada programa que ele irá gerenciar.</p>
<p>Crie o arquivo de configuração executando o comando abaixo:</p>
<pre><code class="lang-basic">sudo nano /etc/supervisor/conf.d/soketi.conf
</code></pre>
<p>Em seguida, cole o conteudo abaixo:</p>
<pre><code class="lang-basic">[program:soketi] 
process_name=%(program_name)s_%(process_num)<span class="hljs-number">02d</span> 
command=soketi start --config=/PATH/<span class="hljs-keyword">TO</span>/CONFIG-FILE
autostart=true 
autorestart=true 
stopasgroup=true 
killasgroup=true 
user=ubuntu 
numprocs=<span class="hljs-number">1</span> 
redirect_stderr=true 
stdout_logfile=/var/<span class="hljs-keyword">log</span>/soketi-supervisor.<span class="hljs-keyword">log</span> 
stopwaitsecs=<span class="hljs-number">60</span> 
stopsignal=sigint 
minfds=<span class="hljs-number">10240</span>
</code></pre>
<p>Como você pode ver na configuração acima, um único servidor soketi será iniciado e este servidor reiniciará automaticamente em caso de falha. Os registros de log serão gravados em <code>/var/log/soketi-supervisor.log</code>.</p>
<p>É importante observar que as opções de configuração <code>stopwaitsecs</code> e <code>stopsignal</code> devem ser definidas como no exemplo acima. Se necessário, você pode aumentar o valor de <code>stopwaitsecs</code> para um valor maior. Esse é o número de segundos que o Supervisor permitirá que o soketi encerre todas as conexões de forma adequada quando o servidor estiver parando ou reiniciando.</p>
<p>Em ambientes Linux, tudo é um arquivo, incluindo os sockets ativos. Para rastrear as conexões de socket, o soketi cria um descritor de arquivo para cada conexão. Em alguns casos, você pode encontrar um limite suave de descritores de arquivo definido pelo seu sistema operacional. Nessa situação, você pode definir a opção de configuração <code>minfds</code> do Supervisor para um valor mais alto, permitindo que o sistema operacional gerencie mais conexões.</p>
<p>Um ponto importante a destacar é de que se você tiver optado por configurar o soketi com arquivo <code>.env</code> você precisa configurar o Supervisor para que o serviço seja executado em um diretório especifico, aquele onde você colocou o arquivo <code>.env</code> a configuração ficaria levemente diferente.</p>
<pre><code class="lang-basic">[program:soketi] 
process_name=%(program_name)s_%(process_num)<span class="hljs-number">02d</span> 
directory=/PATH/WHERE/ENV-FILE/IS
command=soketi start 
...
</code></pre>
<p>É isso, se te ajudei, comente! Obrigado.</p>
]]></content:encoded></item></channel></rss>