--- title: Get started with self-hosting description: This is a simple guide how to get started with OpenPanel on your own VPS. --- import { Step, Steps } from 'fumadocs-ui/components/steps'; ## Instructions ### Prerequisites - VPS of any kind (only tested on Ubuntu 24.04) - We recommend using [Hetzner (affiliate link)](https://hetzner.cloud/?ref=7Hq0H5mQh7tM). Use the link if you want to support us. 🫶 - 🙋‍♂️ This should work on any system if you have pre-installed docker, node and pnpm ### Quickstart ```bash git clone https://github.com/Openpanel-dev/openpanel && cd openpanel/self-hosting && ./setup # After setup is complete run `./start` to start OpenPanel ``` ### Clone Clone the repository to your VPS ```bash git clone https://github.com/Openpanel-dev/openpanel.git ``` ### Run the setup script The setup script will do 3 things 1. Install node (if you accept) 2. Install docker (if you accept) 3. Execute a node script that will ask some questions about your setup > Setup takes 30s to 2 minutes depending on your VPS ```bash cd openpanel/self-hosting ./setup ``` ⚠️ If the `./setup` script fails to run, you can do it manually. 1. Install docker 2. Install node 3. Install npm 4. Run the `npm run quiz` script inside the self-hosting folder ### Start 🚀 Run the `./start` script located inside the self-hosting folder ```bash ./start ``` ## Good to know ### Always use correct api url When self-hosting you'll need to provide your api url when initializing the SDK. The path should be `/api` and the domain should be your domain. ```html title="index.html" ``` ```js title="op.ts" import { OpenPanel } from '@openpanel/sdk'; const op = new OpenPanel({ apiUrl: 'https://your-domain.com/api', // [!code highlight] clientId: 'YOUR_CLIENT_ID', trackScreenViews: true, trackOutgoingLinks: true, trackAttributes: true, }); ``` ### E-mail Some of OpenPanel's features require e-mail. We use Resend as our transactional e-mail provider. So to get this working you'll need to create an account on Resend and set the `RESEND_API_KEY` environment variable. This is nothing that is required for the basic setup, but it is required for some features. Features that require e-mail: - Password reset - Invitations - more will be added over time ### Managed Redis If you use a managed Redis service, you may need to set the `notify-keyspace-events` manually. Without this setting we wont be able to listen for expired keys which we use for caluclating currently active vistors. > You will see a warning in the logs if this needs to be set manually. ### Registration / Invitations By default registrations are disabled after the first user is created. You can change this by setting the `ALLOW_REGISTRATION` environment variable to `true`. ```bash title=".env" ALLOW_REGISTRATION=true ``` Invitations are enabled by default. You can also disable invitations by setting the `ALLOW_INVITATION` environment variable to `false`. ```bash title=".env" ALLOW_INVITATION=false ``` ## Helpful scripts OpenPanel comes with several utility scripts to help manage your self-hosted instance: ### Basic Operations ```bash ./start # Start all OpenPanel services ./stop # Stop all OpenPanel services ./logs # View real-time logs from all services ``` ### Maintenance ```bash ./rebuild # Rebuild and restart a specific service # Example: ./rebuild op-dashboard ``` ### Troubleshooting ```bash ./danger_wipe_everything # ⚠️ Removes all containers, volumes, and data # Only use this if you want to start fresh! ``` The `danger_wipe_everything` script will delete all your OpenPanel data including databases, configurations, and cached files. Use with extreme caution! All these scripts should be run from within the `self-hosting` directory. Make sure the scripts are executable (`chmod +x script-name` if needed). ## Updating To grab the latest and greatest from OpenPanel you should just run the `./update` script inside the self-hosting folder. If you don't have the `./update` script, you can run `git pull` and then `./update` Also read any changes in the [changelog](/changelog) and apply them to your instance.