Wireguard web interface
Find a file
Matthew Nickson 7d592b4f46
Added documentation for databases
Documentation has been added detailing how to use the different database
backends available. A minor gramatical error was also corrected.

Signed-off-by: Matthew Nickson <mnickson@sidingsmedia.com>
2022-03-16 22:49:50 +00:00
.github chore: update stale.yml 2021-11-21 21:46:51 +01:00
custom/js Change info box render size on large screens (#155) 2022-02-12 19:52:50 +01:00
db Add empty db directory in vcs 2020-04-23 23:47:19 +07:00
emailer Remove From prefix from SMTP (#154) 2022-02-12 19:52:42 +01:00
handler Changed GetAllocatedIPs to use IStore 2022-03-13 23:21:00 +00:00
model Allow passing extra allowed subnets (#114) 2022-01-29 08:45:00 +01:00
router Abstracts database storage & Status page UI (#88) 2021-08-28 15:10:30 +02:00
store Added MySQL as a datastore 2022-03-16 22:49:18 +00:00
templates Added MySQL as a datastore 2022-03-16 22:49:18 +00:00
util Added MySQL as a datastore 2022-03-16 22:49:18 +00:00
.dockerignore Single binary build (#10) 2020-05-21 15:51:24 +07:00
.gitignore Single binary build (#10) 2020-05-21 15:51:24 +07:00
docker-compose.yaml Fixed typo (#113) 2021-11-09 11:01:42 +01:00
Dockerfile Update Dockerfile 2021-12-04 09:02:29 +01:00
go.mod Added MySQL as a datastore 2022-03-16 22:49:18 +00:00
go.sum Added MySQL as a datastore 2022-03-16 22:49:18 +00:00
Jenkinsfile Create Jenkinsfile 2021-12-05 14:02:07 +01:00
LICENSE Create LICENSE 2020-04-25 11:07:12 +07:00
main.go Added MySQL as a datastore 2022-03-16 22:49:18 +00:00
package.json Add docker build 2020-04-25 00:33:22 +07:00
prepare_assets.sh I've modify the place where I inserted code to minimize the number of files touched. (#131) 2021-12-04 09:03:56 +01:00
README.md Added documentation for databases 2022-03-16 22:49:50 +00:00
yarn.lock Bump ssri from 8.0.0 to 8.0.1 (#51) 2021-03-26 20:02:02 +01:00

wireguard-ui

A web user interface to manage your WireGuard setup.

Features

  • Friendly UI
  • Authentication
  • Manage extra client's information (name, email, etc)
  • Retrieve configs using QR code / file

Run WireGuard-UI

Default username and password are admin.

Using docker compose

You can take a look at this example of docker-compose.yml. Please adjust volume mount points to work with your setup. Then run it like below:

docker-compose up

Note:

There is a Status option that needs docker to be able to access the network of the host in order to read the wireguard interface stats. See the cap_add and network_mode options on the docker-compose.yaml

Environment Variables

Set the SESSION_SECRET environment variable to a random value.

In order to send the wireguard configuration to clients via email, set the following environment variables:

  • using SendGrid API
SENDGRID_API_KEY: Your sendgrid api key
EMAIL_FROM_ADDRESS: the email address you registered on sendgrid
EMAIL_FROM_NAME: the sender's email address
  • using SMTP
SMTP_HOSTNAME
SMTP_PORT
SMTP_USERNAME
SMTP_PASSWORD
SMTP_AUTH_TYPE
EMAIL_FROM_ADDRESS: the sender's email address
EMAIL_FROM_NAME: the sender's name

In order to connect to a database, set the following environment variables:

DB_TYPE
DB_HOST
DB_PORT
DB_DATABASE
DB_USERNAME
DB_PASSWORD
DB_TLS: the TLS option

For details on the values that these variables should be set to, see the section for your desired database.

Using binary file

Download the binary file from the release and run it with command:

./wireguard-ui

Databases

By default, all the data for the application is stored in JSON files in the ./db directory. By using the --db-type command line option or by setting the DB_TYPE environment variable, you can choose to use a different backend. Note: for some backends, other options may need to be set.

Backend options:

Value Database Other options
jsondb JSON files in ./db None
mysql MySQL or MariaDB server DB_HOST DB_PORT DB_DATABASE DB_USERNAME DB_PASSWORD DB_TLS

JSONDB

When using the JSONDB database, all of the data is stored in separate JSON files in the ./db directory. This is the default database and no special configuration is required.

MySQL

In order to use a MySQL or MariaDB server, you will first have to set the DB_TYPE environment variable to mysql. You should then specify the hostname or IP address of the database server using DB_HOST as well as the port on which the database server is listening, if it is different from the default of 3306. DB_DATABASE is the name of the database that WireGuard-UI is to use. Please ensure that the database is empty before you start WireGuard-UI for the first time otherwise the tables will not be initialized properly. DB_USERNAME and DB_PASSWORD should contain the login details for a user with the following permissions for the database:

  • SELECT
  • INSERT
  • UPDATE
  • DELETE
  • CREATE
  • ALTER

DB_TLS sets the TLS configuration for the database connection. It defaults to false and can be one of the following values:

Option Description
false Never use TLS (default)
true Enable TLS / SSL encrypted connection to the server
prefered Use TLS when advertised by the server
skip-verify Use TLS, but don't check against a CA

After you have set these options, you should be able to start the WireGuard-UI server. The server will then initialize the database and insert the default configuration. If this process is interrupted, you will have to empty the database and restart the initialization.

Auto restart WireGuard daemon

WireGuard-UI only takes care of configuration generation. You can use systemd to watch for the changes and restart the service. Following is an example:

systemd

Create /etc/systemd/system/wgui.service

[Unit]
Description=Restart WireGuard
After=network.target

[Service]
Type=oneshot
ExecStart=/usr/bin/systemctl restart wg-quick@wg0.service

[Install]
RequiredBy=wgui.path

Create /etc/systemd/system/wgui.path

[Unit]
Description=Watch /etc/wireguard/wg0.conf for changes

[Path]
PathModified=/etc/wireguard/wg0.conf

[Install]
WantedBy=multi-user.target

Apply it

systemctl enable wgui.{path,service}
systemctl start wgui.{path,service}

openrc

Create and chmod +x /usr/local/bin/wgui

#!/bin/sh
wg-quick down wg0
wg-quick up wg0

Create and chmod +x /etc/init.d/wgui

#!/sbin/openrc-run

command=/sbin/inotifyd
command_args="/usr/local/bin/wgui /etc/wireguard/wg0.conf:w"
pidfile=/run/${RC_SVCNAME}.pid
command_background=yes

Apply it

rc-service wgui start
rc-update add wgui default

Build

Build docker image

Go to the project root directory and run the following command:

docker build -t wireguard-ui .

Build binary file

Prepare the assets directory

./prepare_assets.sh

Then you can embed resources by generating Go source code

rice embed-go
go build -o wireguard-ui

Or, append resources to executable as zip file

go build -o wireguard-ui
rice append --exec wireguard-ui

Screenshot

wireguard-ui

License

MIT. See LICENSE.

Support

If you like the project and want to support it, you can buy me a coffee

Buy Me A Coffee