boringproxy/docs/systemd.md
Zavaar Shah 9d0d5e6fa9
Broken URLs
Fixed broken proxy client systemd urls
2022-07-13 15:19:28 -04:00

4.3 KiB

Systemd Integration

These instructions assume that you have followed the Installation instruction and installed the boringproxy binary to /usr/local/bin/

If you install the binary to a different path you will need to update the path in the service files.


System User and WorkingDirectory Setup

The following steps setup a user and working directory for boringproxy to match with standard best practices as not running processes as the root user.

Admin Server & Client Setup

Currently the boringproxy client does not need

# create the system user - We are using a system user as we don't want regular user permissions assigned since all it is going to be doing is running boringproxy for us. We also specify the shell as /bin/false so that nothing can login as this user just incase.
sudo useradd -d /opt/boringproxy -m --system --shell /bin/false boringproxy

# Since the boringproxy working directory houses data that we dont want to be exposed to other services/users are all we will make it so that ony the boringproxy user itself us able to access files and directories in the working directory
sudo chmod 700 /opt/boringproxy

boringproxy Server Service

Download the boringproxy-server.service file

# with wget
wget https://raw.githubusercontent.com/boringproxy/boringproxy/master/systemd/boringproxy-server.service -O /tmp/boringproxy-server.service

# or with curl
curl https://raw.githubusercontent.com/boringproxy/boringproxy/master/systemd/boringproxy-server.service --output /tmp/boringproxy-server.service

# move the systemd file into the correct location
sudo mv /tmp/boringproxy-server.service /etc/systemd/system/boringproxy-server.service

Edit /etc/systemd/system/boringproxy-server.service and replace the admin domain bp.example.com with the domain that the server will be available at. EX: -admin-domain proxy.bpuser.me

Enable and start the boringproxy server service with the following command

sudo systemctl enable --now boringproxy-server.service

This will make sure that boringproxy server will always start backup if the host is restarted.


boringproxy Client Service

Download the boringproxy-client@.service file

# with wget
wget https://raw.githubusercontent.com/boringproxy/boringproxy/master/systemd/boringproxy-client.service -O "/tmp/boringproxy-client@.service"

# or with curl
curl https://raw.githubusercontent.com/boringproxy/boringproxy/master/systemd/boringproxy-client.service --output "/tmp/boringproxy-client@.service"

sudo mv /tmp/boringproxy-client@.service /etc/systemd/system/boringproxy-client@.service

Edit /etc/systemd/system/boringproxy-client@.service and replace the server address bp.example.com with the domain that the server is located at. EX: -server proxy.bpuser.me

also edit the token value your-bp-server-token with the token from when you installed the server. EX: -token rt42g.......3fn

Enable and start the boringproxy server service with the following command

# the value after the @ symbol in the service name is what will determine the name of the client in the Admin UI
sudo systemctl enable --now boringproxy-client@default.service

This will make sure that boringproxy client will always start backup and reconnect to the boringclient server if the host is restarted or goes down for some reason.

Notes

Updating an existing boringproxy Server instance

If you have already ran the admin server you will need to migrate the db and change its permissions to keep your existing settings.

sudo mv /root/boringproxy_db.json /opt/boringproxy/boringproxy_db.json
sudo chown boringproxy:boringproxy /opt/boringproxy/boringproxy_db.json

Client Service Unit File

This systemd service file is a template service which allows you to spawn multiple clients with a specified name.

If you do not need/want the ability to launch multiple clients with a single service file and do not want to have to specify boringproxy-client@<client-name>.service when interacting with the service, rename the service file to boringproxy-client.service and remove the %I from the Description field and replace the %i after -client-name with the name you want the client to have. after those modifications you can use the service as boringproxy-client.service