+
+
+
+
diff --git a/edge/search/search_index.json b/edge/search/search_index.json
index 6d469f1b..63044780 100644
--- a/edge/search/search_index.json
+++ b/edge/search/search_index.json
@@ -1 +1 @@
-{"config":{"lang":["en"],"separator":"[\\s\\-]+","pipeline":["stopWordFilter"]},"docs":[{"location":"","title":"Welcome to the Documentation for wg-easy","text":"
\u00a0This Documentation is Versioned
Make sure to select the correct version of this documentation! It should match the version of the image you are using. The default version corresponds to the :latest image tag - the most recent stable release.
This documentation provides you not only with the basic setup and configuration of wg-easy but also with advanced configuration, elaborate usage scenarios, detailed examples, hints and more.
"},{"location":"#about","title":"About","text":"
wg-easy is the easiest way to run WireGuard VPN + Web-based Admin UI.
If you're new to wg-easy, make sure to read the Getting Started chapter first. If you want to look at examples for Docker Run and Compose, we have an Examples page.
If you are migrating from an older version of wg-easy, please read the Migration chapter.
"},{"location":"faq/","title":"FAQ","text":"
Here are some frequently asked questions or errors about wg-easy. If you have a question that is not answered here, please feel free to open a discussion on GitHub.
"},{"location":"faq/#error-wireguard-exited-with-the-error-cannot-find-device-wg0","title":"Error: WireGuard exited with the error: Cannot find device \"wg0\"","text":"
This error indicates that the WireGuard interface wg0 does not exist. This can happen if the WireGuard kernel module is not loaded or if the interface was not created properly.
To resolve this issue, you can try the following steps:
Load the WireGuard kernel module: If the WireGuard kernel module is not loaded, you can load it manually by running:
sudo modprobe wireguard\n
Load the WireGuard kernel module on boot: If you want to ensure that the WireGuard kernel module is loaded automatically on boot, you can add it to the /etc/modules file:
echo \"wireguard\" | sudo tee -a /etc/modules\n
"},{"location":"faq/#cant-initialize-iptables-table-nat-table-does-not-exist-do-you-need-to-insmod","title":"can't initialize iptables table `nat': Table does not exist (do you need to insmod?)","text":"
This error indicates that the nat table in iptables does not exist. This can happen if the iptables kernel module is not loaded or if the nat table is not supported by your kernel.
To resolve this issue, you can try the following steps:
Load the nat kernel module: If the nat kernel module is not loaded, you can load it manually by running:
sudo modprobe iptable_nat\n
Load the nat kernel module on boot: If you want to ensure that the nat kernel module is loaded automatically on boot, you can add it to the /etc/modules file:
echo \"iptable_nat\" | sudo tee -a /etc/modules\n
"},{"location":"faq/#cant-initialize-ip6tables-table-nat-table-does-not-exist-do-you-need-to-insmod","title":"can't initialize ip6tables table `nat': Table does not exist (do you need to insmod?)","text":"
This error indicates that the nat table in ip6tables does not exist. This can happen if the ip6tables kernel module is not loaded or if the nat table is not supported by your kernel.
To resolve this issue, you can try the following steps:
Load the nat kernel module: If the nat kernel module is not loaded, you can load it manually by running:
sudo modprobe ip6table_nat\n
Load the nat kernel module on boot: If you want to ensure that the nat kernel module is loaded automatically on boot, you can add it to the /etc/modules file:
echo \"ip6table_nat\" | sudo tee -a /etc/modules\n
This error indicates that the filter table in iptables cannot be initialized due to permission issues. This can happen if you are not running the command with sufficient privileges.
To resolve this issue, you can try the following steps:
Load the filter kernel module: If the filter kernel module is not loaded, you can load it manually by running:
sudo modprobe iptable_filter\n
Load the filter kernel module on boot: If you want to ensure that the filter kernel module is loaded automatically on boot, you can add it to the /etc/modules file:
echo \"iptable_filter\" | sudo tee -a /etc/modules\n
This error indicates that the filter table in ip6tables cannot be initialized due to permission issues. This can happen if you are not running the command with sufficient privileges.
To resolve this issue, you can try the following steps:
Load the filter kernel module: If the filter kernel module is not loaded, you can load it manually by running:
sudo modprobe ip6table_filter\n
Load the filter kernel module on boot: If you want to ensure that the filter kernel module is loaded automatically on boot, you can add it to the /etc/modules file:
echo \"ip6table_filter\" | sudo tee -a /etc/modules\n
This page explains how to get started with wg-easy. The guide uses Docker Compose as a reference. In our examples, we mount the named volume etc_wireguard to /etc/wireguard inside the container.
There are a few requirements for a suitable host system:
You need to have a container runtime installed
About the Container Runtime
On the host, you need to have a suitable container runtime (like Docker or Podman) installed. We assume Docker Compose is installed. We have aligned file names and configuration conventions with the latest Docker Compose specification. If you're using podman, make sure to read the related documentation.
"},{"location":"getting-started/#deploying-the-actual-image","title":"Deploying the Actual Image","text":""},{"location":"getting-started/#tagging-convention","title":"Tagging Convention","text":"
To understand which tags you should use, read this section carefully. Our CI will automatically build, test and push new images to the following container registry:
All workflows are using the tagging convention listed below. It is subsequently applied to all images.
tag Type Example Description 15 latest minor for that major tag ghcr.io/wg-easy/wg-easy:15 latest features for specific major versions, no breaking changes, recommended latest latest tag ghcr.io/wg-easy/wg-easy:latest or ghcr.io/wg-easy/wg-easy points to latest release, can include breaking changes 15.0 latest patch for that minor tag ghcr.io/wg-easy/wg-easy:15.0 latest patches for specific minor version 15.0.0 specific tag ghcr.io/wg-easy/wg-easy:15.0.0 specific release, no updates edge push to masterghcr.io/wg-easy/wg-easy:edge mostly unstable, gets frequent package and code updates development pull requests ghcr.io/wg-easy/wg-easy:development used for development, testing code from PRs
When publishing a tag we follow the Semantic Versioning specification. The latest tag is always pointing to the latest stable release. If you want to avoid breaking changes, use the major version tag (e.g. 15).
Basic Installation with Docker Compose (Recommended)
Simple Installation with Docker Run
Advanced Installation with Podman
Use the Correct Commands For Stopping and Starting wg-easy
Use sudo docker compose up / down, not sudo docker compose start / stop. Otherwise, the container is not properly destroyed and you may experience problems during startup because of inconsistent state.
This API is not yet stable and may change in the future. The API is currently in development and is subject to change without notice. The API is not yet documented, but we will add documentation as the API stabilizes.
You can use the API to interact with the application programmatically. The API is available at /api and supports both GET and POST requests. The API is designed to be simple and easy to use, with a focus on providing a consistent interface for all endpoints.
There is no documentation for the API yet, but this will be added as the underlying library supports it.
To use the API, you need to authenticate using Basic Authentication. The username and password are the same as the ones you use to log in to the web application. If you use 2FA, the API will not work. You need to disable 2FA in the web application to use the API.
The Endpoints are not yet documented. But as file-based routing is used, you can find the endpoints in the src/server/api folder. The method is defined in the file name.
"},{"location":"advanced/api/#endpoints-example","title":"Endpoints Example","text":"File Name Endpoint Method src/server/api/client.get.ts/api/client GET src/server/api/setup/2.post.ts/api/setup/2 POST"},{"location":"advanced/config/optional-config/","title":"Optional Configuration","text":"
You can set these environment variables to configure the container. They are not required, but can be useful in some cases.
Env Default Example Description PORT518216789 TCP port for Web UI. HOST0.0.0.0localhost IP address web UI binds to. INSECUREfalsetrue If access over http is allowed"},{"location":"advanced/config/unattended-setup/","title":"Unattended Setup","text":"
If you want to run the setup without any user interaction, e.g. with a tool like Ansible, you can use these environment variables to configure the setup.
These will only be used during the first start of the container. After that, the setup will be disabled.
Env Example Description Group INIT_ENABLEDtrue Enables the below env vars 0 INIT_USERNAMEadmin Sets admin username 1 INIT_PASSWORDSe!ureP%ssw Sets admin password 1 INIT_HOSTvpn.example.com Host clients will connect to 1 INIT_PORT51820 Port clients will connect to and wireguard will listen on 1 INIT_DNS1.1.1.1,8.8.8.8 Sets global dns setting 2 INIT_IPV4_CIDR10.8.0.0/24 Sets IPv4 cidr 3 INIT_IPV6_CIDR2001:0DB8::/32 Sets IPv6 cidr 3
\u00a0Variables have to be used together
If variables are in the same group, you have to set all of them. For example, if you set INIT_IPV4_CIDR, you also have to set INIT_IPV6_CIDR.
If you want to skip the setup process, you have to configure group 1
Security
The initial username and password is not checked for complexity. Make sure to set a long enough username and password. Otherwise, the user won't be able to log in.
It's recommended to remove the variables after the setup is done to prevent the password from being exposed.
To monitor the WireGuard server, you can use Prometheus and Grafana. The container exposes a /metrics/prometheus endpoint that can be scraped by Prometheus.
You can use the following Grafana dashboard to visualize the metrics:
21733
Unofficial
The Grafana dashboard is not official and is not maintained by the wg-easy team. If you have any issues with the dashboard, please contact the author of the dashboard. See #1299 for more information.
When refactoring, writing or altering files, adhere to these rules:
Adjust your style of coding to the style that is already present! Even if you do not like it, this is due to consistency. There was a lot of work involved in making all files consistent.
Use pnpm lint to check your scripts! Your contributions are checked by GitHub Actions too, so you will need to do this.
Make sure to select edge in the dropdown menu at the top. Navigate to the page you would like to edit and click the edit button in the top right. This allows you to make changes and create a pull-request.
Alternatively you can make the changes locally. For that you'll need to have Docker installed. Run
pnpm docs:serve\n
This serves the documentation on your local machine on port 8080. Each change will be hot-reloaded onto the page you view, just edit, save and look at the result.
"},{"location":"contributing/issues-and-pull-requests/","title":"Issues and Pull Requests","text":"
This project is Open Source. That means that you can contribute on enhancements, bug fixing or improving the documentation.
"},{"location":"contributing/issues-and-pull-requests/#opening-an-issue","title":"Opening an Issue","text":"
Attention
Before opening an issue, read the README carefully, study the docs for your version (maybe latest) and your search engine you trust. The issue tracker is not meant to be used for unrelated questions!
When opening an issue, please provide details use case to let the community reproduce your problem.
Attention
Use the issue templates to provide the necessary information. Issues which do not use these templates are not worked on and closed.
By raising issues, I agree to these terms and I understand, that the rules set for the issue tracker will help both maintainers as well as everyone to find a solution.
Maintainers take the time to improve on this project and help by solving issues together. It is therefore expected from others to make an effort and comply with the rules.
"},{"location":"contributing/issues-and-pull-requests/#filing-a-bug-report","title":"Filing a Bug Report","text":"
Thank you for participating in this project and reporting a bug. wg-easy is a community-driven project, and each contribution counts!
Maintainers and moderators are volunteers. We greatly appreciate reports that take the time to provide detailed information via the template, enabling us to help you in the best and quickest way. Ignoring the template provided may seem easier, but discourages receiving any support.
Markdown formatting can be used in almost all text fields (unless stated otherwise in the description).
Be as precise as possible, and if in doubt, it's best to add more information that too few.
When an option is marked with \"not officially supported\" / \"unsupported\", then support is dependent on availability from specific maintainers.
You want to add a feature? Feel free to start creating an issue explaining what you want to do and how you're thinking doing it. Other users may have the same need and collaboration may lead to better results.
"},{"location":"contributing/issues-and-pull-requests/#submit-a-pull-request","title":"Submit a Pull-Request","text":"
The development workflow is the following:
Fork the project
Write the code that is needed :D
Document your improvements if necessary
Commit (and sign your commit), push and create a pull-request to merge into master. Please use the pull-request template to provide a minimum of contextual information and make sure to meet the requirements of the checklist.
Pull requests are automatically tested against the CI and will be reviewed when tests pass. When your changes are validated, your branch is merged. CI builds the new :edge image on every push to the master branch and your changes will be included in the next version release.
If you want the updates to be fully automatic you can install Watchtower. This will check for updates every day at 4:00 AM and update the container if a new version is available.
# Caddyfile\n\n{\n # setup your email address\n email mail@example.com\n}\n\nwg-easy.example.com {\n # since the container will share the network with wg-easy\n # we can use the proper container name\n reverse_proxy wg-easy:80\n tls internal\n}\n
...and start it with:
sudo docker-compose up -d\n
"},{"location":"examples/tutorials/caddy/#adapt-the-docker-composition-of-wg-easy","title":"Adapt the docker composition of wg-easy","text":"
services:\n wg-easy:\n # sync container name and port according to Caddyfile\n container_name: wg-easy\n environment:\n - PORT=80\n # no need to publish the HTTP server anymore\n ports:\n - \"51820:51820/udp\"\n # add to caddy network\n networks:\n caddy:\n ...\n\nnetworks:\n caddy:\n external: true\n ...\n
...and restart it with:
sudo docker-compose up -d\n
You can now access wg-easy at https://wg-easy.example.com and start the setup.
Create a file /etc/containers/systemd/wg-easy/wg-easy.container with the following content:
[Container]\nContainerName=wg-easy\nImage=ghcr.io/wg-easy/wg-easy:15\nAutoUpdate=registry\n\nVolume=/etc/containers/volumes/wg-easy:/etc/wireguard:Z\nNetwork=wg-easy.network\nPublishPort=51820:51820/udp\nPublishPort=51821:51821/tcp\n\n# this is used to allow access over HTTP\n# remove this when using a reverse proxy\nEnvironment=INSECURE=true\n\nAddCapability=NET_ADMIN\nAddCapability=SYS_MODULE\nAddCapability=NET_RAW\nSysctl=net.ipv4.ip_forward=1\nSysctl=net.ipv4.conf.all.src_valid_mark=1\nSysctl=net.ipv6.conf.all.disable_ipv6=0\nSysctl=net.ipv6.conf.all.forwarding=1\nSysctl=net.ipv6.conf.default.forwarding=1\n\n[Install]\n# this is used to start the container on boot\nWantedBy=default.target\n
Create a file /etc/containers/systemd/wg-easy/wg-easy.network with the following content:
cd /etc/docker/containers/wg-easy\ndocker compose exec -it wg-easy cli db:admin:reset --password <new_password>\n
This will reset the password for the admin user to the new password you provided. If you include special characters in the password, make sure to escape them properly.
Host: The host of the server. The clients will connect to this address. This can be a domain name or an IP address. Make sure to wrap it in brackets if it is an IPv6 address. For example: [::1] or [2001:db8::1].
Port: The port of the server. The clients will connect to this port. The server will listen on this port.
Select the wg0.json file from the previous version. Read Migrate from v14 to v15 for more information.
"}]}
\ No newline at end of file
+{"config":{"lang":["en"],"separator":"[\\s\\-]+","pipeline":["stopWordFilter"]},"docs":[{"location":"","title":"Welcome to the Documentation for wg-easy","text":"
\u00a0This Documentation is Versioned
Make sure to select the correct version of this documentation! It should match the version of the image you are using. The default version corresponds to the :latest image tag - the most recent stable release.
This documentation provides you not only with the basic setup and configuration of wg-easy but also with advanced configuration, elaborate usage scenarios, detailed examples, hints and more.
"},{"location":"#about","title":"About","text":"
wg-easy is the easiest way to run WireGuard VPN + Web-based Admin UI.
If you're new to wg-easy, make sure to read the Getting Started chapter first. If you want to look at examples for Docker Run and Compose, we have an Examples page.
If you are migrating from an older version of wg-easy, please read the Migration chapter.
"},{"location":"faq/","title":"FAQ","text":"
Here are some frequently asked questions or errors about wg-easy. If you have a question that is not answered here, please feel free to open a discussion on GitHub.
"},{"location":"faq/#error-wireguard-exited-with-the-error-cannot-find-device-wg0","title":"Error: WireGuard exited with the error: Cannot find device \"wg0\"","text":"
This error indicates that the WireGuard interface wg0 does not exist. This can happen if the WireGuard kernel module is not loaded or if the interface was not created properly.
To resolve this issue, you can try the following steps:
Load the WireGuard kernel module: If the WireGuard kernel module is not loaded, you can load it manually by running:
sudo modprobe wireguard\n
Load the WireGuard kernel module on boot: If you want to ensure that the WireGuard kernel module is loaded automatically on boot, you can add it to the /etc/modules file:
echo \"wireguard\" | sudo tee -a /etc/modules\n
"},{"location":"faq/#cant-initialize-iptables-table-nat-table-does-not-exist-do-you-need-to-insmod","title":"can't initialize iptables table `nat': Table does not exist (do you need to insmod?)","text":"
This error indicates that the nat table in iptables does not exist. This can happen if the iptables kernel module is not loaded or if the nat table is not supported by your kernel.
To resolve this issue, you can try the following steps:
Load the nat kernel module: If the nat kernel module is not loaded, you can load it manually by running:
sudo modprobe iptable_nat\n
Load the nat kernel module on boot: If you want to ensure that the nat kernel module is loaded automatically on boot, you can add it to the /etc/modules file:
echo \"iptable_nat\" | sudo tee -a /etc/modules\n
"},{"location":"faq/#cant-initialize-ip6tables-table-nat-table-does-not-exist-do-you-need-to-insmod","title":"can't initialize ip6tables table `nat': Table does not exist (do you need to insmod?)","text":"
This error indicates that the nat table in ip6tables does not exist. This can happen if the ip6tables kernel module is not loaded or if the nat table is not supported by your kernel.
To resolve this issue, you can try the following steps:
Load the nat kernel module: If the nat kernel module is not loaded, you can load it manually by running:
sudo modprobe ip6table_nat\n
Load the nat kernel module on boot: If you want to ensure that the nat kernel module is loaded automatically on boot, you can add it to the /etc/modules file:
echo \"ip6table_nat\" | sudo tee -a /etc/modules\n
This error indicates that the filter table in iptables cannot be initialized due to permission issues. This can happen if you are not running the command with sufficient privileges.
To resolve this issue, you can try the following steps:
Load the filter kernel module: If the filter kernel module is not loaded, you can load it manually by running:
sudo modprobe iptable_filter\n
Load the filter kernel module on boot: If you want to ensure that the filter kernel module is loaded automatically on boot, you can add it to the /etc/modules file:
echo \"iptable_filter\" | sudo tee -a /etc/modules\n
This error indicates that the filter table in ip6tables cannot be initialized due to permission issues. This can happen if you are not running the command with sufficient privileges.
To resolve this issue, you can try the following steps:
Load the filter kernel module: If the filter kernel module is not loaded, you can load it manually by running:
sudo modprobe ip6table_filter\n
Load the filter kernel module on boot: If you want to ensure that the filter kernel module is loaded automatically on boot, you can add it to the /etc/modules file:
echo \"ip6table_filter\" | sudo tee -a /etc/modules\n
This page explains how to get started with wg-easy. The guide uses Docker Compose as a reference. In our examples, we mount the named volume etc_wireguard to /etc/wireguard inside the container.
There are a few requirements for a suitable host system:
You need to have a container runtime installed
About the Container Runtime
On the host, you need to have a suitable container runtime (like Docker or Podman) installed. We assume Docker Compose is installed. We have aligned file names and configuration conventions with the latest Docker Compose specification. If you're using podman, make sure to read the related documentation.
"},{"location":"getting-started/#deploying-the-actual-image","title":"Deploying the Actual Image","text":""},{"location":"getting-started/#tagging-convention","title":"Tagging Convention","text":"
To understand which tags you should use, read this section carefully. Our CI will automatically build, test and push new images to the following container registry:
All workflows are using the tagging convention listed below. It is subsequently applied to all images.
tag Type Example Description 15 latest minor for that major tag ghcr.io/wg-easy/wg-easy:15 latest features for specific major versions, no breaking changes, recommended latest latest tag ghcr.io/wg-easy/wg-easy:latest or ghcr.io/wg-easy/wg-easy points to latest release, can include breaking changes 15.0 latest patch for that minor tag ghcr.io/wg-easy/wg-easy:15.0 latest patches for specific minor version 15.0.0 specific tag ghcr.io/wg-easy/wg-easy:15.0.0 specific release, no updates edge push to masterghcr.io/wg-easy/wg-easy:edge mostly unstable, gets frequent package and code updates development pull requests ghcr.io/wg-easy/wg-easy:development used for development, testing code from PRs
When publishing a tag we follow the Semantic Versioning specification. The latest tag is always pointing to the latest stable release. If you want to avoid breaking changes, use the major version tag (e.g. 15).
Basic Installation with Docker Compose (Recommended)
Simple Installation with Docker Run
Advanced Installation with Podman
Use the Correct Commands For Stopping and Starting wg-easy
Use sudo docker compose up / down, not sudo docker compose start / stop. Otherwise, the container is not properly destroyed and you may experience problems during startup because of inconsistent state.
This API is not yet stable and may change in the future. The API is currently in development and is subject to change without notice. The API is not yet documented, but we will add documentation as the API stabilizes.
You can use the API to interact with the application programmatically. The API is available at /api and supports both GET and POST requests. The API is designed to be simple and easy to use, with a focus on providing a consistent interface for all endpoints.
There is no documentation for the API yet, but this will be added as the underlying library supports it.
To use the API, you need to authenticate using Basic Authentication. The username and password are the same as the ones you use to log in to the web application. If you use 2FA, the API will not work. You need to disable 2FA in the web application to use the API.
The Endpoints are not yet documented. But as file-based routing is used, you can find the endpoints in the src/server/api folder. The method is defined in the file name.
"},{"location":"advanced/api/#endpoints-example","title":"Endpoints Example","text":"File Name Endpoint Method src/server/api/client.get.ts/api/client GET src/server/api/setup/2.post.ts/api/setup/2 POST"},{"location":"advanced/config/optional-config/","title":"Optional Configuration","text":"
You can set these environment variables to configure the container. They are not required, but can be useful in some cases.
Env Default Example Description PORT518216789 TCP port for Web UI. HOST0.0.0.0localhost IP address web UI binds to. INSECUREfalsetrue If access over http is allowed"},{"location":"advanced/config/unattended-setup/","title":"Unattended Setup","text":"
If you want to run the setup without any user interaction, e.g. with a tool like Ansible, you can use these environment variables to configure the setup.
These will only be used during the first start of the container. After that, the setup will be disabled.
Env Example Description Group INIT_ENABLEDtrue Enables the below env vars 0 INIT_USERNAMEadmin Sets admin username 1 INIT_PASSWORDSe!ureP%ssw Sets admin password 1 INIT_HOSTvpn.example.com Host clients will connect to 1 INIT_PORT51820 Port clients will connect to and wireguard will listen on 1 INIT_DNS1.1.1.1,8.8.8.8 Sets global dns setting 2 INIT_IPV4_CIDR10.8.0.0/24 Sets IPv4 cidr 3 INIT_IPV6_CIDR2001:0DB8::/32 Sets IPv6 cidr 3
\u00a0Variables have to be used together
If variables are in the same group, you have to set all of them. For example, if you set INIT_IPV4_CIDR, you also have to set INIT_IPV6_CIDR.
If you want to skip the setup process, you have to configure group 1
Security
The initial username and password is not checked for complexity. Make sure to set a long enough username and password. Otherwise, the user won't be able to log in.
It's recommended to remove the variables after the setup is done to prevent the password from being exposed.
To monitor the WireGuard server, you can use Prometheus and Grafana. The container exposes a /metrics/prometheus endpoint that can be scraped by Prometheus.
You can use the following Grafana dashboard to visualize the metrics:
21733
Unofficial
The Grafana dashboard is not official and is not maintained by the wg-easy team. If you have any issues with the dashboard, please contact the author of the dashboard. See #1299 for more information.
When refactoring, writing or altering files, adhere to these rules:
Adjust your style of coding to the style that is already present! Even if you do not like it, this is due to consistency. There was a lot of work involved in making all files consistent.
Use pnpm lint to check your scripts! Your contributions are checked by GitHub Actions too, so you will need to do this.
Make sure to select edge in the dropdown menu at the top. Navigate to the page you would like to edit and click the edit button in the top right. This allows you to make changes and create a pull-request.
Alternatively you can make the changes locally. For that you'll need to have Docker installed. Run
pnpm docs:serve\n
This serves the documentation on your local machine on port 8080. Each change will be hot-reloaded onto the page you view, just edit, save and look at the result.
"},{"location":"contributing/issues-and-pull-requests/","title":"Issues and Pull Requests","text":"
This project is Open Source. That means that you can contribute on enhancements, bug fixing or improving the documentation.
"},{"location":"contributing/issues-and-pull-requests/#opening-an-issue","title":"Opening an Issue","text":"
Attention
Before opening an issue, read the README carefully, study the docs for your version (maybe latest) and your search engine you trust. The issue tracker is not meant to be used for unrelated questions!
When opening an issue, please provide details use case to let the community reproduce your problem.
Attention
Use the issue templates to provide the necessary information. Issues which do not use these templates are not worked on and closed.
By raising issues, I agree to these terms and I understand, that the rules set for the issue tracker will help both maintainers as well as everyone to find a solution.
Maintainers take the time to improve on this project and help by solving issues together. It is therefore expected from others to make an effort and comply with the rules.
"},{"location":"contributing/issues-and-pull-requests/#filing-a-bug-report","title":"Filing a Bug Report","text":"
Thank you for participating in this project and reporting a bug. wg-easy is a community-driven project, and each contribution counts!
Maintainers and moderators are volunteers. We greatly appreciate reports that take the time to provide detailed information via the template, enabling us to help you in the best and quickest way. Ignoring the template provided may seem easier, but discourages receiving any support.
Markdown formatting can be used in almost all text fields (unless stated otherwise in the description).
Be as precise as possible, and if in doubt, it's best to add more information that too few.
When an option is marked with \"not officially supported\" / \"unsupported\", then support is dependent on availability from specific maintainers.
You want to add a feature? Feel free to start creating an issue explaining what you want to do and how you're thinking doing it. Other users may have the same need and collaboration may lead to better results.
"},{"location":"contributing/issues-and-pull-requests/#submit-a-pull-request","title":"Submit a Pull-Request","text":"
The development workflow is the following:
Fork the project
Write the code that is needed :D
Document your improvements if necessary
Commit (and sign your commit), push and create a pull-request to merge into master. Please use the pull-request template to provide a minimum of contextual information and make sure to meet the requirements of the checklist.
Pull requests are automatically tested against the CI and will be reviewed when tests pass. When your changes are validated, your branch is merged. CI builds the new :edge image on every push to the master branch and your changes will be included in the next version release.
If you want the updates to be fully automatic you can install Watchtower. This will check for updates every day at 4:00 AM and update the container if a new version is available.
# Caddyfile\n\n{\n # setup your email address\n email mail@example.com\n}\n\nwg-easy.example.com {\n # since the container will share the network with wg-easy\n # we can use the proper container name\n reverse_proxy wg-easy:80\n tls internal\n}\n
...and start it with:
sudo docker-compose up -d\n
"},{"location":"examples/tutorials/caddy/#adapt-the-docker-composition-of-wg-easy","title":"Adapt the docker composition of wg-easy","text":"
services:\n wg-easy:\n # sync container name and port according to Caddyfile\n container_name: wg-easy\n environment:\n - PORT=80\n # no need to publish the HTTP server anymore\n ports:\n - \"51820:51820/udp\"\n # add to caddy network\n networks:\n caddy:\n ...\n\nnetworks:\n caddy:\n external: true\n ...\n
...and restart it with:
sudo docker-compose up -d\n
You can now access wg-easy at https://wg-easy.example.com and start the setup.
Create a file /etc/containers/systemd/wg-easy/wg-easy.container with the following content:
[Container]\nContainerName=wg-easy\nImage=ghcr.io/wg-easy/wg-easy:15\nAutoUpdate=registry\n\nVolume=/etc/containers/volumes/wg-easy:/etc/wireguard:Z\nNetwork=wg-easy.network\nPublishPort=51820:51820/udp\nPublishPort=51821:51821/tcp\n\n# this is used to allow access over HTTP\n# remove this when using a reverse proxy\nEnvironment=INSECURE=true\n\nAddCapability=NET_ADMIN\nAddCapability=SYS_MODULE\nAddCapability=NET_RAW\nSysctl=net.ipv4.ip_forward=1\nSysctl=net.ipv4.conf.all.src_valid_mark=1\nSysctl=net.ipv6.conf.all.disable_ipv6=0\nSysctl=net.ipv6.conf.all.forwarding=1\nSysctl=net.ipv6.conf.default.forwarding=1\n\n[Install]\n# this is used to start the container on boot\nWantedBy=default.target\n
Create a file /etc/containers/systemd/wg-easy/wg-easy.network with the following content:
cd /etc/docker/containers/wg-easy\ndocker compose exec -it wg-easy cli db:admin:reset --password <new_password>\n
This will reset the password for the admin user to the new password you provided. If you include special characters in the password, make sure to escape them properly.
Host: The host of the server. The clients will connect to this address. This can be a domain name or an IP address. Make sure to wrap it in brackets if it is an IPv6 address. For example: [::1] or [2001:db8::1].
Port: The port of the server. The clients will connect to this port. The server will listen on this port.