# Client Deployment

We recommend deploying the Client via Docker. However, installing directly on the target machine allows you to run commands as root via a remote terminal, which can simplify upgrades and management.

**Note ⚠️:** The startup commands for `client` and `server` may change as the project evolves. Although we strive for backward compatibility, always use the commands generated by the Master’s Web UI.

## Preparation

Open the Master’s Web UI and log in. If you don’t have an account, register—the first user becomes the administrator.

In the sidebar, navigate to **Client**, click **New**, enter a unique Client ID, and click **Save**.

![](../public/images/cn_client_list.png)

After refreshing, your new Client appears in the list.

Before deploying the Client, ensure the corresponding Server’s configuration is correct; otherwise, the Client cannot connect.

---

## Deploying on Linux

### Direct Execution

1. Create a dedicated directory on your system.  
2. In the Master’s Web UI, click the **ID (show install command)** field for your Client. Copy the Linux install command, for example:

   ```bash
   curl -fSL https://raw.githubusercontent.com/VaalaCat/frp-panel/main/install.sh \
     | bash -s -- client -s abc -i user.c.client1 \
     --api-url http://frpp.example.com:9000 \
     --rpc-url grpc://frpp-rpc.example.com:9001
   ```

3. If you’re in mainland China, you may want to use a GitHub proxy. For example, with `ghfast`:

   ```bash
   curl -fSL https://ghfast.top/https://raw.githubusercontent.com/VaalaCat/frp-panel/main/install.sh \
     | bash -s -- --github-proxy https://ghfast.top/ client -s abc -i user.c.client1 \
     --api-url http://frpp.example.com:9000 \
     --rpc-url grpc://frpp-rpc.example.com:9001
   ```

4. If you use a reverse-proxy with TLS (443 → Master 9000/API), adjust the command:

   ```bash
   curl -fSL https://ghfast.top/https://raw.githubusercontent.com/VaalaCat/frp-panel/main/install.sh \
     | bash -s -- --github-proxy https://ghfast.top/ client -s abc -i user.c.client1 \
     --api-url https://frpp.example.com:443 \
     --rpc-url wss://frpp.example.com:443
   ```

### Docker Compose Deployment

1. In the Master’s Web UI, click **Key (show startup command)** for your Client. Copy the command:

   ```bash
   ./frp-panel client -s abc -i user.c.client1 \
     --api-url http://frpp.example.com:9000 \
     --rpc-url grpc://frpp-rpc.example.com:9001
   ```

2. If using TLS proxy, modify:

   ```bash
   ./frp-panel client -s abc -i user.c.client1 \
     --api-url https://frpp.example.com:443 \
     --rpc-url wss://frpp.example.com:443
   ```

3. Create `docker-compose.yaml`:

   ```yaml
   version: '3'
   services:
     frp-panel-client:
       image: vaalacat/frp-panel
       container_name: frp-panel-client
       network_mode: host
       restart: unless-stopped
       command: client -s abc -i user.c.client1 \
         --api-url https://frpp.example.com:443 \
         --rpc-url wss://frpp.example.com:443
   ```

### Install as a systemd Service

The `frp-panel` binary can manage a systemd service named `frpp`. Use `frp-panel --help` to view available commands. Examples:

- Install Client (or Server) with specific parameters:

  ```bash
  sudo ./frp-panel install client -s abc -i user.c.client1 \
    --api-url https://frpp.example.com:443 \
    --rpc-url wss://frpp.example.com:443
  ```

- Uninstall the `frpp` service:

  ```bash
  sudo ./frp-panel uninstall
  ```

- Start the `frpp` service:

  ```bash
  sudo ./frp-panel start
  ```

- Stop the `frpp` service:

  ```bash
  sudo ./frp-panel stop
  ```

- Restart the `frpp` service:

  ```bash
  sudo ./frp-panel restart
  ```

---

## Deploying on Windows

### Direct Execution

In PowerShell, in the directory containing the executable, run the startup command copied from the Web UI:

```powershell
.\frp-panel.exe client -s abc -i user.c.client1 \
  --api-url https://frpp.example.com:443 \
  --rpc-url wss://frpp.example.com:443
```

### Install as a Windows Service

Use the same commands as on Linux without `sudo` and adjust the executable path:

```powershell
C:\frpp\frp-panel.exe install client -s abc -i user.c.client1 \
  --api-url https://frpp.example.com:443 \
  --rpc-url wss://frpp.example.com:443

# Then manage the service:
C:\frpp\frp-panel.exe start
C:\frpp\frp-panel.exe stop
C:\frpp\frp-panel.exe uninstall
```