# Rocketeers > Self hosting made effortless for developers and agencies. Marketing site and knowledge base: https://rocketeersapp.com Application dashboard: https://rocketeersapp.com ## Site structure - **Home**: https://rocketeersapp.com/ — product overview - **Features**: https://rocketeersapp.com/features — core product features and capabilities - **Providers**: https://rocketeersapp.com/providers — supported cloud, DNS, email and notification providers - **Pricing**: https://rocketeersapp.com/pricing - **Knowledge base**: https://rocketeersapp.com/knowledge — 170 technical articles on self-hosting, server management, DNS, email deliverability, SSL and web performance - **Documentation**: https://rocketeersapp.com/docs — app guides and API reference - **Tools**: https://rocketeersapp.com/tools — free DNS, email, SSL and performance checkers ## Knowledge base ### AI - [Use the OpenAI API in Laravel](https://rocketeersapp.com/use-the-openai-api-in-laravel): Adding AI to a Laravel app comes down to a few lines: install the client, store your key, and call the chat endpoint. Here is how to set it up cleanly, stream responses, and keep your key and your bill under control. - [Track AI bots visiting your website](https://rocketeersapp.com/track-ai-bots-visiting-your-website): AI crawlers like GPTBot, ClaudeBot and PerplexityBot scrape sites to train models and answer questions. Here is how to spot them in your logs, log them to their own file, and decide what to allow. - [Fix the OpenAI API rate limit (429) error](https://rocketeersapp.com/fix-openai-api-rate-limit-429-error): A 429 from the OpenAI API means you have sent requests faster than your account is allowed, or run out of quota. Here is what the error actually means and how to fix it with backoff, batching, and the right limits. - [Self-host an LLM on your own server](https://rocketeersapp.com/self-host-an-llm-on-your-own-server): Running a large language model on your own server keeps your data private and turns an unpredictable per-token bill into a fixed monthly cost. Here is how to size the machine, install a model, serve it over HTTP, and lock it down for production. - [Run DeepSeek locally](https://rocketeersapp.com/run-deepseek-locally): DeepSeek's open-weight reasoning models run on your own hardware, no API key required. Here is how to pull and run DeepSeek-R1 with Ollama, pick a size that fits your machine, and query it over HTTP. - [Run a local LLM with Ollama](https://rocketeersapp.com/run-a-local-llm-with-ollama): Ollama is the quickest way to download and run an open large language model on your own machine, no API keys and no per-token bill. Here is how to install it, pull a model, and talk to it from the command line and over HTTP. ### Command Line - [How to send GET and POST requests with curl](https://rocketeersapp.com/curl-post-get-api-requests): Send GET and POST API requests with curl, including JSON bodies, form data, auth headers and bearer tokens, and how to inspect the response. - [Essential Linux command line basics for developers](https://rocketeersapp.com/linux-command-line-basics): A practical primer on Linux command line basics: navigating, working with files, pipes and redirection, permissions, and where to go next. - [How to search file contents with grep](https://rocketeersapp.com/search-files-grep-command): Search inside files with grep — recursive search, case-insensitive matching, line numbers, context, regex and piping output from other commands into grep. - [The complete guide to the curl command](https://rocketeersapp.com/curl-command-complete-guide): A complete guide to the curl command: downloads, following redirects, headers, methods, data, auth, verbose output, and uploading files. - [Getting started with the AWS CLI](https://rocketeersapp.com/getting-started-aws-cli): Install the AWS CLI v2 on macOS and Linux, run aws configure, set up named profiles, and try real S3 and EC2 commands from your terminal. - [How to check your Ubuntu version from the command line](https://rocketeersapp.com/check-ubuntu-version-command-line): A quick guide to checking which Ubuntu release and kernel you're running, using lsb_release, /etc/os-release, hostnamectl and uname. - [How to copy files over SSH with scp](https://rocketeersapp.com/copy-files-over-ssh-scp): Copy files and directories between your machine and a remote server over SSH using scp, including custom ports, key files and host-to-host transfers. - [How to create and extract tar archives in Linux](https://rocketeersapp.com/create-extract-tar-archives-linux): Create, compress, list and extract tar archives in Linux — including .tar.gz files, extracting to a directory and pulling out a single file from an archive. - [How to run a command on a remote server over SSH](https://rocketeersapp.com/run-command-over-ssh): Run one-off commands on a remote server over SSH without an interactive session, including quoting, sudo, capturing output and running local scripts remotely. - [How to connect to a server with the ssh command](https://rocketeersapp.com/connect-to-server-ssh-command): Connect to a remote server with the ssh command, including custom ports, key files, the host key prompt, SSH config aliases, and verbose debugging. - [How to make a script executable with chmod +x](https://rocketeersapp.com/make-script-executable-chmod-x): Fix the Permission denied error when running a shell script by adding the execute bit with chmod +x, plus the shebang line and chmod 755. - [How to change file permissions with chmod](https://rocketeersapp.com/change-file-permissions-chmod-linux): Change Linux and macOS file permissions with chmod using symbolic and numeric modes, recursive changes, and why 777 is rarely the answer. - [How to find your IP address from the Linux command line](https://rocketeersapp.com/find-ip-address-linux-command-line): Find your local private IP with ip addr or hostname -I, and your public IP with curl, plus a note on the older ifconfig command. - [How to sync files and directories with rsync](https://rocketeersapp.com/sync-files-rsync-command): Learn how to sync files and directories with rsync, including syncing over SSH, dry runs, deleting, excluding, and the trailing-slash gotcha. - [How to install the Xcode Command Line Tools on macOS](https://rocketeersapp.com/install-xcode-command-line-tools): Install the Xcode Command Line Tools on macOS to get git, clang, make and more, plus how to verify, reset, and reinstall them. - [How to find files in Linux with the find command](https://rocketeersapp.com/find-files-linux-command): Locate files in Linux with the find command by name, type, size and modification time, and run actions on the results with -exec or -delete. - [How to update Ubuntu from the command line](https://rocketeersapp.com/update-ubuntu-command-line): Learn the difference between apt update and apt upgrade, how to install all updates, clean up old packages, and upgrade to a new Ubuntu release. - [How to kill the process running on a port in Linux](https://rocketeersapp.com/kill-process-on-port-linux): Find the PID listening on a port with lsof, ss or netstat, then kill it cleanly, with one-liner shortcuts using kill, fuser and lsof. - [How to generate SSH keys with ssh-keygen](https://rocketeersapp.com/generate-ssh-keys-ssh-keygen): Generate SSH keys with ssh-keygen, choose ed25519 over RSA, copy your public key to a server, load it into ssh-agent, and add it to GitHub. - [How to forward ports with SSH tunneling](https://rocketeersapp.com/ssh-tunnel-port-forwarding): Forward ports over SSH with local, remote, and dynamic SOCKS tunnels, including reaching a remote MySQL database safely from your laptop. - [How to install Composer packages locally](https://rocketeersapp.com/install-composer-packages-locally): - [Argument list too long (Bash: /bin/rm)](https://rocketeersapp.com/argument-list-too-long): ### Databases - [How to install MySQL on Ubuntu](https://rocketeersapp.com/how-to-install-mysql): Install the latest MySQL on Ubuntu, secure it, and create your first database and user — the right way, from the official MySQL repository. - [MySQL max_allowed_packet: packet too large](https://rocketeersapp.com/mysql-max-allowed-packet-packet-too-large): This error means a single query or row exceeded the maximum packet size MySQL accepts. It shows up most often when importing a large dump or storing big blobs. - [MySQL ERROR 1205: Lock wait timeout exceeded](https://rocketeersapp.com/mysql-1205-lock-wait-timeout-exceeded): This error means a transaction waited too long for a row lock held by another transaction and gave up. Usually a long-running or stuck transaction is holding the lock. - [MySQL ERROR 1040: Too many connections](https://rocketeersapp.com/mysql-1040-too-many-connections): This error means MySQL hit its max_connections limit and is refusing new clients. Raise the limit if it is genuinely too low, but first rule out leaked connections. - [MySQL ERROR 1698: Access denied for user 'root'@'localhost'](https://rocketeersapp.com/mysql-1698-access-denied-auth-socket): On a fresh Ubuntu install, logging into MySQL as root fails even with the right password. The cause is the auth_socket plugin, not a wrong password. - [SQLSTATE[23000] 1062 Duplicate entry](https://rocketeersapp.com/sqlstate-23000-1062-duplicate-entry): This MySQL error means you tried to insert or update a row with a value that already exists in a unique or primary key column. It is an integrity constraint doing exactly its job. - [MySQL ERROR 2006: server has gone away](https://rocketeersapp.com/mysql-2006-server-has-gone-away): This error means the connection to MySQL was lost mid-query. The usual causes are an idle timeout, a query larger than max_allowed_packet, or the server restarting. - [MySQL ERROR 1064: SQL syntax error](https://rocketeersapp.com/mysql-1064-sql-syntax-error): Error 1064 means MySQL could not parse your query. The message points at exactly where parsing failed, the cause is usually a reserved word, a typo, or a quoting problem. - [SQLSTATE[HY000] [1045] Access denied for user](https://rocketeersapp.com/sqlstate-hy000-1045-access-denied-for-user): This MySQL error means the username, password or host your application uses to connect is wrong, or the user has no privileges on the database. It is the most common database connection error there is. - [SQLSTATE[42S02] Base table or view not found](https://rocketeersapp.com/sqlstate-42s02-base-table-or-view-not-found): This MySQL error means your query references a table that does not exist in the connected database. In Laravel it almost always means migrations have not run, or you are connected to the wrong database. - [SQLSTATE[HY000] [2002] Connection refused](https://rocketeersapp.com/sqlstate-hy000-2002-connection-refused): This error means your application could not even reach the MySQL server. Unlike access denied, the credentials were never checked, the host or port is wrong or the database is not running. - [How to rename a MySQL database](https://rocketeersapp.com/rename-mysql-database): Unlike renaming a table, you can't rename a database in MySQL sadly enough. So there is no SQL query you can execute to achieve this. However, it is possible with a workaround. - [Import MySQL database without timezone difference](https://rocketeersapp.com/mysql-import-without-timezone-difference): When you import a MySQL database from a server to your local computer, you might notice that the dates and times are different. - [How to install PostgreSQL with pgvector on Ubuntu](https://rocketeersapp.com/install-postgresql-pgvector-ubuntu): Turn PostgreSQL in a vector database using the pgvector extension on Ubuntu 22. - [How to upgrade MySQL 5.7 to 8.0 on Ubuntu](https://rocketeersapp.com/upgrade-mysql-5-7-to-8-0-ubuntu): Learn how to safely upgrade your database server from MySQL 5.7 to MySQL 8.0 on Ubuntu. - [Backup MySQL databases in separate files](https://rocketeersapp.com/backup-mysql-databases-separate-files): How to dump existing MySQL databases on a server in separate backup files. - [Backup MySQL databases in single file](https://rocketeersapp.com/backup-mysql-databases-single-file): How to dump existing MySQL databases on a server in a single file. - [Backup MySQL databases except system databases in a single file](https://rocketeersapp.com/backup-mysql-databases-except-system): How to dump all MySQL databases on a server in a single file with the exception of certain (system) databases. - [Importing database in MySQL using command line](https://rocketeersapp.com/import-database-mysql-command-line): Importing a database in MySQL is quick & easy using the command line. - [Export MySQL database using command line](https://rocketeersapp.com/export-database-mysql-command-line): Exporting a MySQL database is a task you will need very often when working with databases. - [Stream MySQL backup directly to S3 bucket](https://rocketeersapp.com/stream-mysql-backup-s3-bucket): Backing up your database is very important. Creating a backup in the most efficient way is essential when you do not have unlimited disk space. ### Development - [How to install Node.js on Ubuntu](https://rocketeersapp.com/how-to-install-nodejs): Modern PHP sites still need Node.js to build their frontend assets. Here is how to install Node.js on Ubuntu with nvm, so you can switch versions per project without touching the system. - [git stash pop vs apply: save and restore changes](https://rocketeersapp.com/git-stash-pop): git stash shelves your uncommitted changes so you can switch context. git stash pop restores them and removes the stash; git stash apply restores them but keeps the stash around. - [npm ci vs npm install: when to use which](https://rocketeersapp.com/npm-ci-vs-npm-install): npm install resolves dependencies and updates your lockfile as it goes. npm ci does a clean, exact install straight from the lockfile, which is what you want in CI and production builds. - [How to delete a local (and remote) Git branch](https://rocketeersapp.com/git-delete-local-branch): Deleting a branch locally uses git branch -d, with a capital -D to force it. Deleting it on the remote is a separate command that people often forget. - [docker compose up: options and common flags](https://rocketeersapp.com/docker-compose-up): docker compose up reads your compose file and starts every service in it. The flags you reach for most are -d to run in the background and --build to rebuild images first. - [How to checkout a Git tag](https://rocketeersapp.com/git-checkout-tag): Checking out a tag puts you in a detached HEAD state, which is fine for inspecting a release but not for committing. If you want to make changes, create a branch from the tag. - [What port does SSH use (and how to change it)](https://rocketeersapp.com/ssh-port): SSH uses TCP port 22 by default. You can change it in the SSH daemon config, but the port itself is not a security feature, so know what changing it does and does not buy you. - [git reset --hard explained (soft vs mixed vs hard)](https://rocketeersapp.com/git-reset-hard): git reset moves your branch to another commit. The --soft, --mixed and --hard flags decide what happens to your staged and working changes, and --hard is the one that actually throws work away. - [docker exec: run a command in a running container](https://rocketeersapp.com/docker-exec): docker exec runs a command inside a container that is already running. The classic use is opening an interactive shell with docker exec -it, but it is just as useful for one-off commands. - [Fix: Cannot connect to the Docker daemon at unix:///var/run/docker.sock](https://rocketeersapp.com/cannot-connect-to-docker-daemon): This error means your Docker client could not reach the Docker daemon. Either the daemon is not running, or your user does not have permission to talk to its socket. - [How to rename a Git branch (local and remote)](https://rocketeersapp.com/git-rename-branch): Renaming a branch locally is one command. The part people miss is updating the remote: Git cannot rename a remote branch directly, so you push the new name and delete the old one. - [How to remove untracked files in Git (git clean)](https://rocketeersapp.com/git-remove-untracked-files): git clean deletes untracked files from your working directory. Always dry-run it first with -n, because unlike most Git operations these deletions cannot be undone. - [How to clean up Docker with prune (images, volumes, system)](https://rocketeersapp.com/docker-prune): Docker hangs on to stopped containers, unused images and dangling volumes, which quietly eat disk space. The prune commands clean them up, but a couple of flags decide how aggressive that cleanup is. - [Install PHP memcached extension on macOS](https://rocketeersapp.com/install-php-memcached-extension-on-macos): ### Email - [Best practices for sending email](https://rocketeersapp.com/best-practices-sending-email): Improve the emails you're sending from your website or web app by following these best practices.5555 - [Improving email deliverability](https://rocketeersapp.com/improving-email-deliverability): How to prevent emails going to spam and improve the overall deliverability of your email domain. ### Errors - [403 Forbidden in nginx](https://rocketeersapp.com/403-forbidden-nginx): A 403 Forbidden means nginx found the resource but refuses to serve it. Almost always a file permission problem, a missing index file, or an explicit deny rule. - [ERR_TOO_MANY_REDIRECTS (redirect loop)](https://rocketeersapp.com/err-too-many-redirects): This error means the browser was bounced between URLs until it gave up. The classic cause is a redirect loop between HTTP and HTTPS, very often a Cloudflare SSL setting fighting your server config. - [CORS error: No Access-Control-Allow-Origin header](https://rocketeersapp.com/cors-error-no-access-control-allow-origin): A CORS error means the browser blocked a cross-origin request because the server did not return the right headers. The fix is to send Access-Control-Allow-Origin from the API, not to disable browser security. - [curl (60) SSL certificate problem: unable to get local issuer certificate](https://rocketeersapp.com/curl-60-ssl-certificate-problem-unable-to-get-local-issuer-certificate): This curl error means it could not verify the remote server certificate against a trusted root. Usually the local CA bundle is outdated or missing, not a problem with the remote site. - [NET::ERR_CERT_AUTHORITY_INVALID](https://rocketeersapp.com/net-err-cert-authority-invalid): This browser error means the SSL certificate was not issued by a trusted authority, or the chain is incomplete. Usually a self-signed certificate, a missing intermediate, or an untrusted CA. - [SSL handshake failed in nginx (ERR_SSL_PROTOCOL_ERROR)](https://rocketeersapp.com/ssl-handshake-failed-nginx): A failed TLS handshake means the browser and nginx could not agree on a secure connection. The top causes are an expired certificate and a missing intermediate chain. - [504 Gateway Timeout in nginx](https://rocketeersapp.com/504-gateway-timeout-nginx): A 504 Gateway Timeout means nginx reached your application, but the application took too long to respond. Unlike a 502, the backend is alive, it is just slow. - [Your connection is not private](https://rocketeersapp.com/your-connection-is-not-private): This browser warning means the SSL certificate could not be validated. As a site owner it usually points at an expired certificate, a missing chain, or a domain mismatch you can fix on the server. - [502 Bad Gateway in nginx](https://rocketeersapp.com/502-bad-gateway-nginx): A 502 Bad Gateway means nginx reached your application but got an invalid response back. In almost every case the backend (PHP-FPM) crashed, never started, or is unreachable. - [503 Service Unavailable](https://rocketeersapp.com/503-service-unavailable): A 503 means the server is temporarily unable to handle the request. With Laravel it often means maintenance mode is on; on a busy server it means PHP-FPM has no free workers. - [413 Request Entity Too Large in nginx](https://rocketeersapp.com/413-request-entity-too-large): When uploading files you can encounter this error, which is caused by a limit in the nginx configuration. - [Error in the HTTP2 framing layer](https://rocketeersapp.com/error-in-the-http2-framing-layer): Once in a while I got this error when connecting to an external service on servers running Ubuntu 18.x or 20.x. After some research I got this flaky bug resolved! ### Git - [Git fatal: refusing to merge unrelated histories](https://rocketeersapp.com/git-refusing-to-merge-unrelated-histories): This error means Git found no common ancestor between the two branches you are merging. It is a safety check, and there is a one-flag override once you are sure the merge is intentional. - [GitHub Permission denied (publickey)](https://rocketeersapp.com/github-permission-denied-publickey): When git clone, pull or push over SSH fails with this error, GitHub did not accept your SSH key. Usually the key is not generated, not added to your account, or not loaded into the agent. - [Git fatal: not a git repository](https://rocketeersapp.com/git-not-a-git-repository): This error means you ran a git command somewhere git does not recognise as a repository. Usually you are in the wrong directory, or the repo was never initialised. - [Git: Updates were rejected (non-fast-forward)](https://rocketeersapp.com/git-updates-were-rejected-non-fast-forward): A rejected push means the remote branch has commits you do not have locally. Git refuses to overwrite them. The fix is to integrate the remote changes first, not to force-push. - [Change casing of file or directory in Git](https://rocketeersapp.com/change-casing-of-file-or-directory-in-git): Renaming already commited files or directories only for casing in Git will be ignored and will not show up as a change you can commit. - [Removing tracked files in Git that should have been ignored](https://rocketeersapp.com/removing-tracked-files-git): Removing files that has been committed earlier in your repository is something you encouter once in a while. Read here how you can do this. ### Hosting - [Improving PHP performance](https://rocketeersapp.com/php-performance): The performance and speed of PHP can be improved in different ways. Find out the multiple pathways to better performance. - [What is Cloudflare?](https://rocketeersapp.com/what-is-cloudflare): Cloudflare sits between your visitors and your server, acting as a CDN, DNS host, and security layer all at once. Here is what it actually does and how it fits in front of your site. - [How to host your own website](https://rocketeersapp.com/how-to-host-your-own-website): Hosting a website yourself means turning a bare server into a secure, fast, production-ready machine. Here is the full picture — every step, in order, with a guide for each one. - [Website launch checklist](https://rocketeersapp.com/website-checklist): A practical checklist of everything to verify before you put a website live — security, performance, backups, and the things that are painful to fix after launch. - [Why do you need Cloudflare?](https://rocketeersapp.com/why-do-you-need-cloudflare): You can run a website without Cloudflare — but here is what it gives you for free, when it genuinely matters, and the honest trade-offs. - [Address already in use (port already bound)](https://rocketeersapp.com/address-already-in-use-port): This error means another process is already listening on the port you tried to bind. Find what is using it and either stop that process or pick a different port. - [No space left on device on Ubuntu](https://rocketeersapp.com/no-space-left-on-device-ubuntu): This error means a filesystem is full, or out of inodes. Here is how to find what is eating the disk and reclaim it safely without breaking your server. - [SSH Permission denied (publickey)](https://rocketeersapp.com/ssh-permission-denied-publickey): This SSH error means the server rejected every key your client offered. Usually the right key is not being sent, or the file permissions on the server are wrong. - [How many CPU cores on Ubuntu](https://rocketeersapp.com/how-many-cpu-cores-on-ubuntu): This command for Ubuntu shows how many CPU cores are available on your machine. - [How much RAM memory on Ubuntu](https://rocketeersapp.com/how-much-memory-on-ubuntu): This command for Ubuntu shows you the RAM memory on your server - [Zero downtime deployments using PHP-FPM and nginx](https://rocketeersapp.com/zero-downtime-php-deployments): Let me show you how you can deploy your PHP website or web applications without any downtime, using separate releases so you can rollback to a previous release quickly. - [How to check Ubuntu version](https://rocketeersapp.com/ubuntu-version): Learn how to quickly get the Ubuntu version you're running using the command line. - [Disable unnecessary and unused PHP versions (FPM pools)](https://rocketeersapp.com/disable-unused-php-fpm-pools): Hosting your application optimally means you need to take care of the valuable server resources. PHP FPM can keep memory occupied even when not actively used. - [Reclaim disk space on Ubuntu server](https://rocketeersapp.com/reclaim-diskspace-on-ubuntu): Your server disk space can clog up very quickly with a lot of unneeded files. Let's find out how to reclaim your precious disk space back. - [How to add Swap Space on Ubuntu servers](https://rocketeersapp.com/add-swap-space-on-ubuntu): Servers with little resources can benefit greatly from adding some swap space for memory usage.3333 - [How to get top processes with highest memory usage](https://rocketeersapp.com/top-processes-memory): This command shows you which processes are eating all of your server memory. - [How to get top processes with highest CPU usage](https://rocketeersapp.com/top-processes-cpu): Want to know what's causing your server to slow down or what's keeping all these resources for itself. This command shows you which processes take it all. ### Laravel - [Setting process priority for Laravel Horizon workers](https://rocketeersapp.com/laravel-horizon-nice-process-priority): Laravel Horizon lets you set the Linux nice value for worker processes, giving them more or less CPU scheduling priority. - [No application encryption key has been specified](https://rocketeersapp.com/no-application-encryption-key-has-been-specified): This Laravel error appears when the APP_KEY is missing. It is one of the first things you hit after cloning a project. The fix is a single artisan command. - [Redis connection refused in Laravel](https://rocketeersapp.com/redis-connection-refused-laravel): When Laravel uses Redis for cache, sessions or queues, a "Connection refused" error means it cannot reach the Redis server. Usually the service is down or the host is wrong, especially in Docker. - [MySQL 1071: Specified key was too long (Laravel migration)](https://rocketeersapp.com/mysql-1071-specified-key-was-too-long): This migration error happens on older MySQL with the utf8mb4 charset, where indexed string columns exceed the index size limit. The fix is a one-line default in your service provider. - [500 Internal Server Error in Laravel](https://rocketeersapp.com/500-internal-server-error-laravel): A 500 error is a generic "something broke" on the server. The error itself tells you nothing, the real message is in your logs. Here is where to look and the usual culprits. - [CSRF token mismatch in Laravel](https://rocketeersapp.com/csrf-token-mismatch-laravel): A CSRF token mismatch means Laravel rejected a request because its token was missing, wrong, or expired. It is the same protection behind the 419 page, here is how to send the token correctly. - [Vite manifest not found in Laravel](https://rocketeersapp.com/vite-manifest-not-found-laravel): This error means Laravel cannot find your compiled frontend assets. Either the dev server is not running, or you never built your assets for production. - [Laravel failed to open stream: Permission denied](https://rocketeersapp.com/laravel-failed-to-open-stream-permission-denied): A blank page or 500 error right after deploying is almost always a permission problem on the storage or bootstrap/cache directory. Here is how to fix the ownership properly. - [Target class does not exist in Laravel](https://rocketeersapp.com/target-class-does-not-exist-laravel): This error means Laravel cannot resolve a controller or class you referenced in a route or container binding. Almost always a namespace, typo or autoload issue. - [Environment variables in Laravel](https://rocketeersapp.com/environment-variables-laravel): A complete list of all available environment variables used in the latest Laravel (version 11). - [419 Page Expired error in Laravel](https://rocketeersapp.com/419-page-expired-laravel): When working with Laravel you will encounter this error from time to time. Here's how you can fix this error. - [How to clear cache in Laravel](https://rocketeersapp.com/clear-cache-laravel): Laravel uses caching for a lot of parts of the framework, here's how you can clear all of them. - [Complete list of Laravel events](https://rocketeersapp.com/laravel-events): Laravel provides quite a lot of events that are fired by default, which makes it easy to hook into using listeners. - [Laravel Valet](https://rocketeersapp.com/laravel-valet): For Mac users Laravel Valet is an execellent tool to develop all your PHP projects locally. - [Creating an encrypted cookie value in Laravel](https://rocketeersapp.com/creating-an-encrypted-cookie-value-in-laravel): - [Disable CSRF in Laravel](https://rocketeersapp.com/disable-csrf-in-laravel): Sometimes you need to disable the CSRF token verification in Laravel. A common use case is when you want to receive POST webhooks. - [Logging in Laravel](https://rocketeersapp.com/laravel-logging): When you have an web app running, it is important to know what it does and how it's going. To get more insight into this, using the extensive logging features of Laravel is key. - [How to check which Laravel version of your app is using](https://rocketeersapp.com/check-laravel-version): Check which Laravel version your app is running on. - [Disable cookies in Laravel](https://rocketeersapp.com/disable-cookies-in-laravel): When you don't need cookies, it's a good practice to prevent your app from creating them in the first place. - [How to use different PHP versions with Laravel Valet](https://rocketeersapp.com/different-php-versions-laravel-valet): Laravel Valet is an awesome tool to quickly setup an development environment on your Mac. Here's how you can switch between different PHP versions while developing multiple projects. ### Nginx - [Detect Googlebot visits using nginx](https://rocketeersapp.com/detect-googlebot-nginx): How to detect when and how often Googlebot visits your website using a few configuration lines in nginx. - [Use nginx try_files to make your site static](https://rocketeersapp.com/nginx-try-files): The `try_files` directive in nginx is incredibly powerful and useful when you want to make your dynamic website more performant. Learn how to leverage this to make your website fully static. - [Log bot requests in nginx](https://rocketeersapp.com/log-bot-requests-nginx): If you want to know when and how often bots visit your website, you can easily track this using the following configuration in nginx. - [How to install Nginx on Ubuntu](https://rocketeersapp.com/how-to-install-nginx): Nginx is the web server that sits in front of your application and answers every request. Here is how to install it on Ubuntu, serve your first site, and set it up the way a production server should be. - [nginx rewrite or internal redirection cycle](https://rocketeersapp.com/nginx-rewrite-or-internal-redirection-cycle): This error means nginx kept redirecting a request back to itself until it gave up. Almost always a try_files directive that loops, producing a 500 error. - [nginx: upstream sent too big header](https://rocketeersapp.com/nginx-upstream-sent-too-big-header): This 502 variant happens when your application sends response headers larger than the buffers nginx reserves for them. Common with big cookies, large session data, or many headers. - [Configure Content Security Policy with nonce using nginx](https://rocketeersapp.com/content-security-policy): How to configure Content Security Policy (CSP) with secure and easy to configure nonces in nginx. - [Server Side Includes (SSI) in nginx](https://rocketeersapp.com/server-side-includes-ssi-nginx): Server Side Includes can be a very handy feature when dealing with caching or including (dynamic) files into static files. Here's how to use it and configure nginx to enable the power of SSI. ### PHP - [Enable JIT in PHP 8.x OPcache](https://rocketeersapp.com/php-8-opcache-jit): Using OPcache can greatly improve [PHP performance](/php-performance). By enabling Just In Time (JIT) compiling in OPcache you can improve it even more. - [How to install multiple PHP versions on the same server](https://rocketeersapp.com/how-to-install-multiple-php-versions-on-same-server): One server, several sites, different PHP versions. Here is how to install PHP 8.2, 8.3, and 8.4 side by side and point each site at the version it needs. - [How to install PHP on Ubuntu](https://rocketeersapp.com/how-to-install-php): A modern PHP install means more than one apt package — you need PHP-FPM and the right set of extensions for your application. Here is how to install PHP on Ubuntu and wire it into Nginx. - [Important PHP config options](https://rocketeersapp.com/important-php-config-options): The default php.ini is built to be safe, not to run a real website. These are the settings that actually matter in production and what to set them to. - [PHP file upload exceeds upload_max_filesize](https://rocketeersapp.com/php-file-upload-exceeds-upload-max-filesize): When a file upload silently fails or is empty, PHP itself is usually rejecting it because it is larger than upload_max_filesize or post_max_size. This is the PHP-side companion to the nginx 413 error. - [PHP Warning: Undefined array key](https://rocketeersapp.com/undefined-array-key-php): PHP 8 turned accessing a missing array key into a warning instead of a silent notice. The fix is to check the key exists or provide a default before reading it. - [PHP Fatal error: Allowed memory size exhausted](https://rocketeersapp.com/php-allowed-memory-size-exhausted): This fatal error means a PHP script tried to use more memory than the configured limit. Raise the limit, but first ask why the script needs that much. - [PHP: Call to a member function on null](https://rocketeersapp.com/call-to-a-member-function-on-null): This error means you called a method on a variable that turned out to be null. The variable you expected to hold an object was empty, often a database lookup that found nothing. - [PHP Fatal error: Class "X" not found](https://rocketeersapp.com/php-class-not-found): This fatal error means PHP could not load a class you referenced. Almost always a namespace mismatch, a wrong file name, or an autoloader that needs regenerating. - [Composer out of memory (allowed memory size exhausted)](https://rocketeersapp.com/composer-out-of-memory-allowed-memory-size-exhausted): Composer can run out of memory while resolving dependencies, especially on small VPSes. The real fix is usually swap space, not a bigger memory limit. - [PHP Maximum execution time of N seconds exceeded](https://rocketeersapp.com/php-maximum-execution-time-exceeded): This fatal error means a PHP script ran longer than the allowed time limit and was killed. Raise the limit for legitimately long work, but the real fix is usually to make the script faster or move it to a queue. - [How to run PHP files](https://rocketeersapp.com/run-php-files): You cannot execute PHP files directly on your computer without any additional tools. You need a (local) webserver that can run the PHP files. ### Performance - [Tools to validate your website](https://rocketeersapp.com/tools-to-validate-website): Before and after you launch, a handful of free tools tell you whether your site is secure, fast, and correctly configured. Here are the ones worth running. - [How to enable and configure OPcache for faster PHP](https://rocketeersapp.com/enable-opcache-php): OPcache caches compiled PHP bytecode so your code skips recompilation on every request. Here is how to enable and tune OPcache for a real production server. - [A complete guide to caching in Laravel](https://rocketeersapp.com/laravel-cache): The Laravel cache gives you one API in front of file, Redis, database, and memcached stores. Here is how to configure drivers, cache slow queries, invalidate by tag, and clear it all. - [How database indexing works (with MySQL examples)](https://rocketeersapp.com/database-indexing): An index is the single biggest lever you have on query speed. Here is what a database index actually is, how it works under the hood, and how to add the right ones in MySQL. - [Brotli vs Gzip: which compression should you use?](https://rocketeersapp.com/brotli-vs-gzip): Brotli vs Gzip is the practical choice for compressing text responses. Here is how the two differ on ratio, speed, and support, and which one to serve. - [How to optimize MySQL performance](https://rocketeersapp.com/optimize-mysql-performance): A practical guide to MySQL performance tuning that starts with measurement, then covers indexes, the InnoDB buffer pool, connections, and server resources. - [How to clear the Redis cache](https://rocketeersapp.com/clear-redis-cache): A practical guide to clear the Redis cache, from flushing a single database with redis-cli to safely deleting keys by pattern and clearing the cache from Laravel. - [How to enable Gzip and Brotli compression in Nginx](https://rocketeersapp.com/enable-gzip-compression-nginx): Learn how to enable Gzip compression in Nginx (and add Brotli) to shrink text assets and speed up page loads, with real config and verification commands. - [How to improve Laravel performance](https://rocketeersapp.com/laravel-performance): Laravel performance is mostly a configuration problem. Here are the production caches, queue offloading, and server tweaks that give you the biggest speedups for the least effort. - [How to find and optimize slow MySQL queries](https://rocketeersapp.com/mysql-query-optimization): A repeatable process for MySQL query optimization, find slow MySQL queries with the slow query log, diagnose them with EXPLAIN, and fix them with the right indexes and query rewrites. - [How to increase the PHP memory limit](https://rocketeersapp.com/increase-php-memory-limit): The PHP memory limit caps how much memory a single script can use. Here is how to check it, find the right php.ini, and raise it safely for CLI, FPM, and per-app cases. - [How to measure TTFB (Time To First Byte)](https://rocketeersapp.com/measure-ttfb): TTFB is one of the most important metrics to measure your website or webapp performance. Because only after the first byte the browser can begin to render it. - [How to optimize server performance](https://rocketeersapp.com/optimize-server-performance): Server performance is determinded by a lot of moving parts inside your server. Lets dig in on every aspect that can make a big difference. - [How to optimize website performance](https://rocketeersapp.com/optimize-website-performance): Learn how to improve your website or web app performance by leveraging different techniques that optimize the loading speed drastically for your users. ### Security - [How to install Certbot](https://rocketeersapp.com/how-to-install-certbot): Certbot issues free, trusted SSL certificates from Let's Encrypt and renews them before they expire. Here is how to install it on Ubuntu, issue your first certificate, and keep it renewing on its own. - [How to renew SSL certificates automatically](https://rocketeersapp.com/renew-ssl-certificates-automatically): Let's Encrypt certificates last 90 days, so renewal has to be automatic. Here is how to set up Certbot to renew every certificate and reload Nginx on its own. - [How to generate a CSR with OpenSSL](https://rocketeersapp.com/generate-csr-with-openssl): A CSR (Certificate Signing Request) is the file you send to a certificate authority to request an SSL certificate. Here is how to generate one, and its private key, with openssl. - [What is an SSH key](https://rocketeersapp.com/what-is-an-ssh-key): An SSH key is a pair of cryptographic keys used to log in to servers and services without a password. The public key lives on the server, the private key stays on your machine, and only the two together grant access. - [How to generate a self-signed certificate with OpenSSL](https://rocketeersapp.com/generate-self-signed-certificate-openssl): A self-signed certificate lets you serve HTTPS for local development or internal services without going through a certificate authority. Here is how to create one with openssl. - [Convert SSL certificate formats with OpenSSL](https://rocketeersapp.com/convert-ssl-certificate-formats): Certificates come in PEM, CRT, CER, DER, and PFX formats, and software is picky about which one it wants. Here are the openssl commands to convert between all of them. - [How to generate an SSH key](https://rocketeersapp.com/generate-ssh-key): Here is how to generate an SSH key pair on Linux, macOS, or Windows and add the public key to a server, GitHub, or GitLab. - [How to check SSL certificate expiration](https://rocketeersapp.com/check-ssl-certificate-expiration): Here is how to check when an SSL certificate expires, both for a live website and for a certificate file on disk, using openssl from the command line. - [How to change the SSH port on Ubuntu](https://rocketeersapp.com/change-ssh-port-ubuntu): Moving SSH off the default port 22 cuts down on automated brute-force noise in your logs. Here is how to do it safely on Ubuntu, including the socket-activation change that catches people out on 24.04, without locking yourself out. - [How to configure rate limiting in nginx](https://rocketeersapp.com/nginx-rate-limiting): Rate limiting protects login pages, APIs, and expensive endpoints from abuse and brute-force attacks. nginx does this with the built-in limit_req module. Here is how to configure it. - [What is an SSL certificate chain](https://rocketeersapp.com/what-is-an-ssl-certificate-chain): An SSL certificate chain links your website's certificate back to a trusted root certificate. When a link in that chain is missing, browsers and command line tools reject the connection even though the certificate itself is perfectly valid. - [How to setup OpenClaw securely on your own VPS](https://rocketeersapp.com/setup-openclaw-vps-securely): OpenClaw is a powerful open-source AI assistant that runs on your own infrastructure. Learn how to deploy it securely on a VPS to avoid common security pitfalls. - [How to get A+ grade SSL using Cloudflare](https://rocketeersapp.com/a-plus-grade-ssl-using-cloudflare): By default Cloudflare configures your security for SSL and HTTPS traffic for maximum connectivity and not for best security. Connectivity and security are unexchangeable, by letting more old insecure clients connect, you lower the bar for all clients that connect to your website. - [How to optimize web application security](https://rocketeersapp.com/optimize-web-application-security): There are a lot of features you can use to increase overall security of your website or web app. - [How to extract the certificate from a PFX file](https://rocketeersapp.com/extract-certificate-from-pfx-file): Sometimes you receive a PFX file, which is a file that bundles both certificate and private key of a SSL certificate. Here's how to extract the certificate. - [How to extract private key from PFX file](https://rocketeersapp.com/extract-private-key-from-pfx-file): Sometimes you receive a PFX file, which is a file that bundles both certificate and private key of a SSL certificate. Here's how to extract the private key.