The easiest way to run WireGuard VPN + Web-based Admin UI.
Go to file
2023-12-18 21:41:56 +01:00
.github node v20 → v18 2023-12-18 21:41:51 +01:00
assets update screenshot to @2x 2021-11-22 22:38:10 +01:00
docs node v20 → v18 2023-12-18 21:41:51 +01:00
src node v20 → v18 2023-12-18 21:41:51 +01:00
.gitignore allow edit of name + address 2021-07-13 20:51:23 +02:00 replace apexcharts with 'ye olde divs 2022-06-25 22:39:41 +02:00
docker-compose.yml weejewel → wg-easy 2023-12-17 22:37:34 +01:00
Dockerfile node v20 → v18 2023-12-18 21:41:51 +01:00 add license 2021-07-13 21:45:52 +02:00
package-lock.json eslint 2021-11-12 21:27:58 +00:00
package.json lock build again 2022-01-13 13:24:37 -08:00 fix badges 2023-12-17 22:55:44 +01:00

WireGuard Easy

Build & Publish Docker Image to Docker Hub Lint Docker Sponsor GitHub Stars

You have found the easiest way to install & manage WireGuard on any Linux host!


  • All-in-one: WireGuard + Web UI.
  • Easy installation, simple to use.
  • List, create, edit, delete, enable & disable clients.
  • Show a client's QR code.
  • Download a client's configuration file.
  • Statistics for which clients are connected.
  • Tx/Rx charts for each connected client.
  • Gravatar support.


  • A host with a kernel that supports WireGuard (all modern kernels).
  • A host with Docker installed.


1. Install Docker

If you haven't installed Docker yet, install it by running:

$ curl -sSL | sh
$ sudo usermod -aG docker $(whoami)
$ exit

And log in again.

2. Run WireGuard Easy

To automatically install & run wg-easy, simply run:

$ docker run -d \
  --name=wg-easy \
  -v ~/.wg-easy:/etc/wireguard \
  -p 51820:51820/udp \
  -p 51821:51821/tcp \
  --cap-add=NET_ADMIN \
  --cap-add=SYS_MODULE \
  --sysctl="net.ipv4.conf.all.src_valid_mark=1" \
  --sysctl="net.ipv4.ip_forward=1" \
  --restart unless-stopped \

💡 Replace YOUR_SERVER_IP with your WAN IP, or a Dynamic DNS hostname.

💡 Replace YOUR_ADMIN_PASSWORD with a password to log in on the Web UI.

The Web UI will now be available on

💡 Your configuration files will be saved in ~/.wg-easy

3. Sponsor

Are you enjoying this project? Buy me a beer! 🍻


These options can be configured by setting environment variables using -e KEY="VALUE" in the docker run command.

Env Default Example Description
PASSWORD - foobar123 When set, requires a password when logging in to the Web UI.
WG_HOST - The public hostname of your VPN server.
WG_DEVICE eth0 ens6f0 Ethernet device the wireguard traffic should be forwarded through.
WG_PORT 51820 12345 The public UDP port of your VPN server. WireGuard will always listen on 51820 inside the Docker container.
WG_MTU null 1420 The MTU the clients will use. Server uses default WG MTU.
WG_PERSISTENT_KEEPALIVE 0 25 Value in seconds to keep the "connection" open. If this value is 0, then connections won't be kept alive.
WG_DEFAULT_ADDRESS 10.8.0.x 10.6.0.x Clients IP address range.
WG_DEFAULT_DNS, DNS server clients will use.
WG_ALLOWED_IPS, ::/0, Allowed IPs clients will use.
WG_PRE_UP ... - See config.js for the default value.
WG_POST_UP ... iptables ... See config.js for the default value.
WG_PRE_DOWN ... - See config.js for the default value.
WG_POST_DOWN ... iptables ... See config.js for the default value.

If you change WG_PORT, make sure to also change the exposed port.


To update to the latest version, simply run:

docker stop wg-easy
docker rm wg-easy
docker pull

And then run the docker run -d \ ... command above again.

Common Use Cases