<?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: Jookllo</title>
    <description>The latest articles on DEV Community by Jookllo (@jookllo).</description>
    <link>https://dev.to/jookllo</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.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F150820%2F1947f423-2bc0-455c-81b3-75b13c2c2934.png</url>
      <title>DEV Community: Jookllo</title>
      <link>https://dev.to/jookllo</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/jookllo"/>
    <language>en</language>
    <item>
      <title>The Issues of Deploying Laravel on Dokploy: Database Connection Hell</title>
      <dc:creator>Jookllo</dc:creator>
      <pubDate>Mon, 03 Aug 2026 07:38:08 +0000</pubDate>
      <link>https://dev.to/jookllo/the-issues-of-deploying-laravel-on-dokploy-database-connection-hell-5ael</link>
      <guid>https://dev.to/jookllo/the-issues-of-deploying-laravel-on-dokploy-database-connection-hell-5ael</guid>
      <description>&lt;p&gt;If you’ve tried deploying a Laravel application on &lt;strong&gt;Dokploy&lt;/strong&gt; (the self-hosted Heroku alternative built on Docker) and immediately ran into a wall of &lt;code&gt;Database connection refused&lt;/code&gt; or &lt;code&gt;SQLSTATE[HY000] [2002]&lt;/code&gt; errors, you are not alone. &lt;/p&gt;

&lt;p&gt;It works perfectly on your local machine, but the moment it hits the server, it falls apart. Here is a real-world breakdown of the database connectivity issues we experienced, why they happened, and how to fix them.&lt;/p&gt;




&lt;h2&gt;
  
  
  1. The "Localhost" Trap (The &lt;code&gt;127.0.0.1&lt;/code&gt; Connection Refused)
&lt;/h2&gt;

&lt;h3&gt;
  
  
  The Issue
&lt;/h3&gt;

&lt;p&gt;On your local computer, you probably set your &lt;code&gt;.env&lt;/code&gt; to:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;DB_HOST=127.0.0.1
DB_PORT=3306
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;When you deploy this to Dokploy, your Laravel application crashes on start because it cannot connect to the database.&lt;/p&gt;

&lt;h3&gt;
  
  
  The Reason
&lt;/h3&gt;

&lt;p&gt;Dokploy runs everything in isolated &lt;strong&gt;Docker Containers&lt;/strong&gt;. &lt;br&gt;
Inside a container, &lt;code&gt;127.0.0.1&lt;/code&gt; or &lt;code&gt;localhost&lt;/code&gt; refers to &lt;strong&gt;the Laravel container itself&lt;/strong&gt;, not the host machine or your database container. Since there is no database running &lt;em&gt;inside&lt;/em&gt; your Laravel code container, it refuses the connection.&lt;/p&gt;
&lt;h3&gt;
  
  
  The Solution
&lt;/h3&gt;

&lt;p&gt;You must use Docker's internal networking. &lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;If your database is created inside Dokploy, Dokploy assigns it a specific network service name (e.g. &lt;code&gt;dokploy-db-mysql&lt;/code&gt; or the service name you typed in the database creation wizard).&lt;/li&gt;
&lt;li&gt;Change your host in the Dokploy Environment Variables UI to match that service name:
&lt;/li&gt;
&lt;/ol&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;DB_HOST=dokploy-db-mysql  # Use Dokploy's internal container name
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  2. The Config Caching Nightmare (Why changing Env Variables in the UI did nothing)
&lt;/h2&gt;
&lt;h3&gt;
  
  
  The Issue
&lt;/h3&gt;

&lt;p&gt;You realized the host was wrong, went to the Dokploy dashboard, updated the &lt;code&gt;DB_HOST&lt;/code&gt; environment variable to the correct container hostname, saved, and redeployed. &lt;br&gt;
Yet, the app &lt;em&gt;still&lt;/em&gt; threw the old connection error looking for &lt;code&gt;127.0.0.1&lt;/code&gt;. You checked the container logs, confirmed the new environment variables were set, but Laravel simply ignored them.&lt;/p&gt;
&lt;h3&gt;
  
  
  The Reason
&lt;/h3&gt;

&lt;p&gt;This happens if you run configuration caching in your &lt;code&gt;Dockerfile&lt;/code&gt; during the build step:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight docker"&gt;&lt;code&gt;&lt;span class="k"&gt;RUN &lt;/span&gt;php artisan config:cache
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;When Laravel builds your container, it runs &lt;code&gt;config:cache&lt;/code&gt; and &lt;strong&gt;bakes&lt;/strong&gt; whatever &lt;code&gt;.env&lt;/code&gt; values exist at build-time directly into a static cache file (&lt;code&gt;bootstrap/cache/config.php&lt;/code&gt;). &lt;br&gt;
At runtime, Laravel completely ignores your Dokploy UI environment variables and loads the baked-in values instead.&lt;/p&gt;
&lt;h3&gt;
  
  
  The Solution
&lt;/h3&gt;

&lt;p&gt;Never cache your configuration during the Docker build stage if you plan to change environment variables dynamically.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Remove &lt;code&gt;RUN php artisan config:cache&lt;/code&gt; from your build steps.&lt;/li&gt;
&lt;li&gt;If you want caching for speed in production, clear it on boot by running &lt;code&gt;php artisan config:clear&lt;/code&gt; or &lt;code&gt;php artisan optimize:clear&lt;/code&gt; inside your container's startup command / entrypoint script.&lt;/li&gt;
&lt;/ol&gt;


&lt;h2&gt;
  
  
  3. The Race Condition (Migrations crashing the build)
&lt;/h2&gt;
&lt;h3&gt;
  
  
  The Issue
&lt;/h3&gt;

&lt;p&gt;You configured your Docker container to automatically run migrations on deployment:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;php artisan migrate &lt;span class="nt"&gt;--force&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;But your deployment failed during this step because the database connection timed out or was refused, even though all credentials were 100% correct.&lt;/p&gt;

&lt;h3&gt;
  
  
  The Reason
&lt;/h3&gt;

&lt;p&gt;When Dokploy restarts or provisions your stack, it starts both the Laravel container and the MySQL/PostgreSQL container simultaneously.&lt;br&gt;
Laravel boots up in milliseconds and immediately tries to run migrations. However, MySQL is still executing its slow initial setup scripts, checking schemas, and opening sockets. The database container isn't ready to receive queries yet, so Laravel's migration command crashes, failing the entire Dokploy deployment.&lt;/p&gt;
&lt;h3&gt;
  
  
  The Solution
&lt;/h3&gt;

&lt;p&gt;You need to make Laravel "wait" for the database to boot. Add a small bash loop to your entrypoint script (&lt;code&gt;entrypoint.sh&lt;/code&gt;) that pings the database port before running migrations:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;echo&lt;/span&gt; &lt;span class="s2"&gt;"Waiting for MySQL to boot..."&lt;/span&gt;
&lt;span class="k"&gt;until &lt;/span&gt;nc &lt;span class="nt"&gt;-z&lt;/span&gt; &lt;span class="nt"&gt;-v&lt;/span&gt; &lt;span class="nt"&gt;-w30&lt;/span&gt; &lt;span class="nv"&gt;$DB_HOST&lt;/span&gt; &lt;span class="nv"&gt;$DB_PORT&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="k"&gt;do
  &lt;/span&gt;&lt;span class="nb"&gt;echo&lt;/span&gt; &lt;span class="s2"&gt;"MySQL is not ready yet. Retrying in 2 seconds..."&lt;/span&gt;
  &lt;span class="nb"&gt;sleep &lt;/span&gt;2
&lt;span class="k"&gt;done
&lt;/span&gt;&lt;span class="nb"&gt;echo&lt;/span&gt; &lt;span class="s2"&gt;"MySQL is up! Running migrations..."&lt;/span&gt;
php artisan migrate &lt;span class="nt"&gt;--force&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  4. Port Mapping Confusion (Internal vs. External Ports)
&lt;/h2&gt;

&lt;h3&gt;
  
  
  The Issue
&lt;/h3&gt;

&lt;p&gt;Mapping your Dokploy MySQL database port to &lt;code&gt;3306&lt;/code&gt; (or &lt;code&gt;3307&lt;/code&gt;) externally so you could connect via TablePlus/DBeaver from your laptop, but when configuring your Laravel &lt;code&gt;.env&lt;/code&gt; inside Dokploy, you weren't sure which port to use.&lt;/p&gt;

&lt;h3&gt;
  
  
  The Reason
&lt;/h3&gt;

&lt;p&gt;Docker has two layers of ports:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Internal Port:&lt;/strong&gt; The port the service listens to inside the Docker private network (always &lt;code&gt;3306&lt;/code&gt; for MySQL).&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;External/Exposed Port:&lt;/strong&gt; The port mapped to the public server IP so you can connect from the outside world (e.g., mapping host &lt;code&gt;3307&lt;/code&gt; to container &lt;code&gt;3306&lt;/code&gt;).&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Inside Dokploy, your Laravel app and your MySQL container share the same private network. Therefore, they communicate &lt;strong&gt;internally&lt;/strong&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  The Solution
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;For &lt;strong&gt;Laravel (.env on Dokploy)&lt;/strong&gt;: Always use the internal port (&lt;code&gt;DB_PORT=3306&lt;/code&gt;).&lt;/li&gt;
&lt;li&gt;For &lt;strong&gt;TablePlus/DBeaver (External laptop)&lt;/strong&gt;: Use the exposed host port (&lt;code&gt;3307&lt;/code&gt;) and the public server IP.&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  Summary Checklist for Dokploy deployments
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Set &lt;code&gt;DB_HOST&lt;/code&gt; to the internal Docker container/service name, not &lt;code&gt;127.0.0.1&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Set &lt;code&gt;DB_PORT&lt;/code&gt; to the internal port (&lt;code&gt;3306&lt;/code&gt; for MySQL), not the exposed host port.&lt;/li&gt;
&lt;li&gt;Avoid running &lt;code&gt;php artisan config:cache&lt;/code&gt; during Docker build time.&lt;/li&gt;
&lt;li&gt;Implement a &lt;code&gt;wait-for-it&lt;/code&gt; check in your startup script so migrations don't run before MySQL is fully booted.&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>laravel</category>
      <category>dokploy</category>
      <category>selfhosted</category>
    </item>
    <item>
      <title>Mastering Self-Hosted Convex: A Complete Deployment Guide</title>
      <dc:creator>Jookllo</dc:creator>
      <pubDate>Wed, 10 Jun 2026 23:44:00 +0000</pubDate>
      <link>https://dev.to/jookllo/mastering-self-hosted-convex-a-complete-deployment-guide-3mp5</link>
      <guid>https://dev.to/jookllo/mastering-self-hosted-convex-a-complete-deployment-guide-3mp5</guid>
      <description>&lt;h1&gt;
  
  
  Mastering Self-Hosted Convex: A Complete Deployment Guide
&lt;/h1&gt;

&lt;p&gt;So, you've decided to take control of your data and self-host &lt;strong&gt;Convex&lt;/strong&gt;. Great choice! But if you've tried pushing your functions to a local or private server, you might have run into cryptic errors about "Relative import paths" or "Missing modules."&lt;/p&gt;

&lt;p&gt;The secret? You don't need custom deployment scripts. In fact, you &lt;em&gt;shouldn't&lt;/em&gt; use them. The official Convex CLI is actually powerful enough to handle self-hosted deployments perfectly—if you know which buttons to press.&lt;/p&gt;

&lt;p&gt;In this guide, I’ll show you exactly how to configure your project and deploy your functions like a pro.&lt;/p&gt;




&lt;h2&gt;
  
  
  1. Before You Start
&lt;/h2&gt;

&lt;p&gt;Before we dive into the code, make sure you have the following ready:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  &lt;strong&gt;Your Convex Instance&lt;/strong&gt;: Whether you're using Dokploy, Docker, or a raw VPS, your backend should be up and running.&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;The Admin Key&lt;/strong&gt;: You'll need the master key for your server. 

&lt;ul&gt;
&lt;li&gt;  &lt;em&gt;Tip&lt;/em&gt;: If you're using Dokploy, you can usually generate this by running &lt;code&gt;./generate_admin_key.sh&lt;/code&gt; inside your backend container's terminal.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;The CLI&lt;/strong&gt;: Make sure you have the latest version of Convex installed locally:&lt;br&gt;
&lt;/p&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;npm &lt;span class="nb"&gt;install &lt;/span&gt;convex
&lt;/code&gt;&lt;/pre&gt;

&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  2. Preparing Your Project
&lt;/h2&gt;

&lt;p&gt;For a smooth deployment, your &lt;code&gt;convex/&lt;/code&gt; folder needs to be a bit more "independent."&lt;/p&gt;

&lt;h3&gt;
  
  
  Step 1: Give Convex its own Identity
&lt;/h3&gt;

&lt;p&gt;Create a &lt;code&gt;package.json&lt;/code&gt; inside your &lt;code&gt;convex/&lt;/code&gt; directory. This ensures the CLI knows exactly which dependencies to bundle when it prepares your code for the server.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"name"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"my-convex-backend"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"private"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"type"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"module"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"dependencies"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"convex"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"^1.16.0"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"typescript"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"^5.0.0"&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Step 2: Fix your Config
&lt;/h3&gt;

&lt;p&gt;Ensure your &lt;code&gt;convex/convex.config.ts&lt;/code&gt; is using the modern &lt;code&gt;defineApp&lt;/code&gt; export. The server expects this structure to understand your app's layout.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;defineApp&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;convex/server&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="k"&gt;export&lt;/span&gt; &lt;span class="k"&gt;default&lt;/span&gt; &lt;span class="nf"&gt;defineApp&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  3. The Magic Environment Variables
&lt;/h2&gt;

&lt;p&gt;The Convex CLI is "Cloud-first" by default, but we can tell it to target our own server by setting two specific environment variables.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Variable&lt;/th&gt;
&lt;th&gt;What it does&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;CONVEX_SELF_HOSTED_URL&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Points the CLI to your backend URL (e.g., &lt;code&gt;https://api.myapp.com&lt;/code&gt;).&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;CONVEX_SELF_HOSTED_ADMIN_KEY&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Your secret key. &lt;strong&gt;Crucial&lt;/strong&gt;: It must include the `convex-self-hosted&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;




&lt;h2&gt;
  
  
  4. The Big Moment: Deploying
&lt;/h2&gt;

&lt;p&gt;Now, let's push your code. We're going to use the official {% raw %}&lt;code&gt;deploy&lt;/code&gt; command. &lt;/p&gt;

&lt;p&gt;Run this from your &lt;strong&gt;root&lt;/strong&gt; or &lt;strong&gt;convex&lt;/strong&gt; directory:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nv"&gt;CONVEX_SELF_HOSTED_URL&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"https://your-api-url.com"&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
&lt;span class="nv"&gt;CONVEX_SELF_HOSTED_ADMIN_KEY&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"convex-self-hosted|your-key-here"&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
npx convex deploy &lt;span class="nt"&gt;--typecheck&lt;/span&gt; disable
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Why this works where other scripts fail:
&lt;/h3&gt;

&lt;p&gt;When you use a custom &lt;code&gt;fetch&lt;/code&gt; script to send files, you're just sending raw text. The server has no idea where &lt;code&gt;convex/server&lt;/code&gt; is. &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The CLI is smarter.&lt;/strong&gt; It uses &lt;code&gt;esbuild&lt;/code&gt; to "bundle" your code into a single, self-contained JavaScript package. It finds all your imports and bakes them right into the file so the server can run them instantly.&lt;/p&gt;




&lt;h2&gt;
  
  
  5. Pro Tip: Automate Everything
&lt;/h2&gt;

&lt;p&gt;Don't type those long variables every time. Add a script to your &lt;code&gt;convex/package.json&lt;/code&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="nl"&gt;"scripts"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"deploy"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"CONVEX_SELF_HOSTED_URL=... CONVEX_SELF_HOSTED_ADMIN_KEY=... npx convex deploy --typecheck disable"&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Now, all it takes is a simple:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;npm run deploy
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  Troubleshooting common "Gotchas"
&lt;/h2&gt;

&lt;h3&gt;
  
  
  "Relative import path 'convex/server' not found"
&lt;/h3&gt;

&lt;p&gt;If you see this, you likely bypassed the CLI. Always use &lt;code&gt;npx convex deploy&lt;/code&gt; so the bundler can do its job!&lt;/p&gt;

&lt;h3&gt;
  
  
  "BadAdminKey"
&lt;/h3&gt;

&lt;p&gt;Double-check your key. Most people forget the &lt;code&gt;convex-self-hosted|&lt;/code&gt; prefix. Without it, the server will reject your request every time.&lt;/p&gt;

&lt;h3&gt;
  
  
  Missing &lt;code&gt;_generated&lt;/code&gt; files in your frontend
&lt;/h3&gt;

&lt;p&gt;Run &lt;code&gt;npx convex codegen&lt;/code&gt; while your &lt;code&gt;CONVEX_SELF_HOSTED_URL&lt;/code&gt; is set to update your local TypeScript types to match what you just deployed.&lt;/p&gt;




&lt;p&gt;Happy hosting! Your Convex backend is now truly yours.&lt;/p&gt;

</description>
      <category>convex</category>
      <category>selfhosted</category>
      <category>tutorial</category>
    </item>
    <item>
      <title>How to Structure your Resume After your First Job</title>
      <dc:creator>Jookllo</dc:creator>
      <pubDate>Sat, 04 Nov 2023 08:49:46 +0000</pubDate>
      <link>https://dev.to/jookllo/how-to-structure-your-resume-after-your-first-job-50ai</link>
      <guid>https://dev.to/jookllo/how-to-structure-your-resume-after-your-first-job-50ai</guid>
      <description>&lt;p&gt;After about one or two years experience in software development, how did you strucutre your resume? Like did it still have personal projects and work experience or did you just focus on adding the projects that you have done for your organization because I am genuinely stuck about this. Advice would be appreciated.😁&lt;/p&gt;

</description>
      <category>questions</category>
      <category>career</category>
      <category>resume</category>
      <category>discuss</category>
    </item>
    <item>
      <title>A Beginner trying to understand and use node by doing a project </title>
      <dc:creator>Jookllo</dc:creator>
      <pubDate>Wed, 02 Oct 2019 11:00:30 +0000</pubDate>
      <link>https://dev.to/jookllo/a-beginner-trying-to-understand-and-use-node-by-doing-a-project-2llm</link>
      <guid>https://dev.to/jookllo/a-beginner-trying-to-understand-and-use-node-by-doing-a-project-2llm</guid>
      <description>&lt;h2&gt;
  
  
  Hello,
&lt;/h2&gt;

&lt;p&gt;This is probably super random for me but I decided to create a simple node js project. My classmate had seen me using php ,&lt;em&gt;he doesn't hold php in high regard&lt;/em&gt;, recommended that I use node. He believed that javascript isn't going anywhere and recommended nodejs.&lt;/p&gt;

&lt;h3&gt;
  
  
  The Hand Dealing
&lt;/h3&gt;

&lt;p&gt;I decided that since I had seen node around various blogs and videos whats the harm in actually trying. So, &lt;em&gt;after a few installations and plugins for vs code later&lt;/em&gt;, I have node set up and will create a simple news applicaiton for financial news (not something big but still...). This will allow things like requesting apis for the news and maybe a few stock tips. An update will be done hopefully every week and I hope to receive helpful feedback and criticism.&lt;br&gt;
&lt;strong&gt;The repo will be added later for those interested&lt;/strong&gt;.&lt;br&gt;
Have a good day :) &lt;/p&gt;

</description>
      <category>node</category>
      <category>beginners</category>
    </item>
    <item>
      <title>Is it lazy for someone to make a site from a template?</title>
      <dc:creator>Jookllo</dc:creator>
      <pubDate>Sat, 15 Jun 2019 05:26:30 +0000</pubDate>
      <link>https://dev.to/jookllo/do-you-make-your-site-from-scratch-or-use-an-online-template-31c2</link>
      <guid>https://dev.to/jookllo/do-you-make-your-site-from-scratch-or-use-an-online-template-31c2</guid>
      <description>&lt;p&gt;Hello&lt;br&gt;
A beginner here. When making a site do you make it from pure nothingness or use the already existing sources online to make one. Is it also lazy for someone to make a site using a template? I get a feeling that it doesn't come out as original to use an online template. &lt;/p&gt;

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