---
title: Private location worker
description: "How to access applications that are not publicly available"
icon: "key"
---
## Overview
The **private location worker** allows customers to include non-publicly available applications in Octomind test generation and execution. It is run by the customer within their private network, enabling it to reach internal applications for testing.
The worker acts as a combination of a proxy and tunneling mechanism, connecting the private network with the Octomind tool. This feature ensures secure access to applications hosted behind firewalls or other private environments.
## Features
### Tunneling with FRP
The tunneling is managed using [FRP](https://github.com/fatedier/frp), connecting the worker’s frp-client to Octomind’s proxy servers (EU or US).
It requires access permission to specific public IPs: `35.192.162.70`, `34.159.153.198` or `34.129.193.156`.
### Access to private web applications
The embedded Squid proxy server allows requests from the private network, mimicking public proxy requests from within the customer’s network.
### Test execution and generation
After registering the worker with Octomind, users can configure the proxy location for executing generation or test runs.
## Usage
Customer can run and build the private location worker on their premises using a **container**.
Container image will be provided by Octomind, [see registry](https://eu.gcr.io/octomind-dev/plw:latest), or it can be built on your own. [See below](#build) to run the container a few environment variables are needed.
## Environment vars
- **APIKEY**: the octomind APIKEY for your organization
- **PLW_NAME**: name of the private locations worker as registered in the octomind platform (name must match)
- **PROXY_USER**: username for the (squid) proxy
- **PROXY_PASS**: password for the (squid) proxy
- **SERVER_ADDR**: the address of the server that the worker will connect (default: `35.159.153.198`)
The PROXY_USER and PROXY_PASS will protect your local proxy from authenticated access. When the worker starts it will register with the octomind platform and set the proxy user and pass, so that the octomind agent and test runner can of course use the proxy.
You can start as many private location worker as you like, but each must be registered by name with octomind first. The name must
be unique for your organization.
{" "}
Currently, only one instance of the worker is supported. We will support
multiple instances of the worker with the same name as we scale.
## Run
Private location worker can simply run as docker container:
```
docker run --rm -e PLW_NAME=worker1 -e APIKEY=12345 -e PROXY_PASS=secret -e PROXY_USER=octo eu.gcr.io/octomind-dev/plw:latest
```
or use a docker composed like this:
```yaml
services:
private-location-worker:
image: eu.gcr.io/octomind-dev/plw:latest
environment:
APIKEY: 1234
PLW_NAME: worker1
PROXY_USER: foo
PROXY_PASS: bar
restart: on-failure
```
or on kubernetes it would look like this:
```yaml
apiVersion: v1
kind: Pod
metadata:
name: private-location-worker
spec:
containers:
- name: plw
image: eu.gcr.io/octomind-dev/plw:latest
env:
- name: APIKEY
value:
- name: PLW_NAME
value: staging
- name: PROXY_USER
value: proxy
- name: PROXY_PASS
value: secret11
```
## Security considerations
- The container image is open-source, allowing customers to review and build their own versions. Check out its [GitHub repo](https://github.com/OctoMind-dev/private-location-worker).
- Network access can be restricted to the tunnel server and test targets.
- The Squid proxy requires authentication, ensuring secure access. Username and password is controlled by the customer.
### Sequence on connect
```mermaid
sequenceDiagram
autonumber
title: private location worker: open a proxy with frp
frp-client->>+frp-server: NewProxy (proxyname)
frp-server->>+frp-server-plugin: create proxy allowed?
frp-server-plugin->>octo-service: known APIKEY, proxyname?
octo-service->>frp-server-plugin: yes
frp-server-plugin->>+frp-server: yes
frp-server->>frp-client: created
frp-server-plugin->>frp-server: getProxyInfo( proxyname )
frp-server->>frp-server-plugin: info incl. ip & port
frp-server-plugin->>octo-service: register proxy (name, info)
Note over octo-service: proxy will marked as online with IP & port
```
### Sequence on disconnect
```mermaid
sequenceDiagram
autonumber
title: private location worker: close a proxy with frp
frp-client->>+frp-server: CloseProxy (name)
frp-server->>+frp-server-plugin: close proxy (name)
frp-server-plugin->>octo-service: unregister proxy ( name )
Note over octo-service: proxy will marked as offline
octo-service->>frp-server-plugin: void
frp-server-plugin->>+frp-server: void
frp-server->>frp-client: close
```
## Additional links
- [Docs: IP addresses](/data-governance/no-code-access#two-ip-addresses)
- [Quickstart guide for API key](/integrations/quickstart-GitHub#1-create-an-api-key)
- [Github Fast reverse proxy](https://github.com/fatedier/frp)
- [Private location worker GitHub repo](https://github.com/OctoMind-dev/private-location-worker)
- [API reference: register a private location](https://octomind.dev/docs/api-reference/register-a-private-location)