From 0da38860bff3ce66176036de6f158cc5c53ee308 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Thu, 23 Jan 2025 12:43:34 +0000 Subject: [PATCH] Deployed 2cf2341 to master with MkDocs 1.6.1 and mike 2.1.3 --- master/404.html | 2 +- .../documentation/getting-started/helm.png | Bin 0 -> 35102 bytes .../getting-started/kubernetes.png | Bin 40281 -> 0 bytes .../configuration/examples/index.html | 2 +- .../configuration/overview/index.html | 2 +- .../getting-started/binaries/index.html | 2 +- .../getting-started/docker/index.html | 2 +- .../getting-started/helm/index.html | 67 ++++++++++++++++++ .../getting-started/kubernetes/index.html | 67 ------------------ .../getting-started/sources/index.html | 2 +- .../monitoring/prometheus/index.html | 2 +- master/documentation/overview/index.html | 2 +- .../documentation/rest-api/api-doc/index.html | 2 +- master/documentation/upgrade/v1/index.html | 2 +- master/index.html | 2 +- master/search/search_index.json | 2 +- master/sitemap.xml | 2 +- master/sitemap.xml.gz | Bin 308 -> 305 bytes 18 files changed, 80 insertions(+), 80 deletions(-) create mode 100644 master/assets/images/social/documentation/getting-started/helm.png delete mode 100644 master/assets/images/social/documentation/getting-started/kubernetes.png create mode 100644 master/documentation/getting-started/helm/index.html delete mode 100644 master/documentation/getting-started/kubernetes/index.html diff --git a/master/404.html b/master/404.html index d5a81bb..6ac391e 100644 --- a/master/404.html +++ b/master/404.html @@ -1 +1 @@ - WireGuard Portal

404 - Not found

\ No newline at end of file + WireGuard Portal

404 - Not found

\ No newline at end of file diff --git a/master/assets/images/social/documentation/getting-started/helm.png b/master/assets/images/social/documentation/getting-started/helm.png new file mode 100644 index 0000000000000000000000000000000000000000..077b87227a36e39a82b28972057495d2b6d677ed GIT binary patch literal 35102 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 literal 0 HcmV?d00001 diff --git a/master/assets/images/social/documentation/getting-started/kubernetes.png b/master/assets/images/social/documentation/getting-started/kubernetes.png deleted file mode 100644 index bed463eb378ea10d992671549672774049f70da9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 40281 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 - Examples - WireGuard Portal

Examples

Below are some sample YAML configurations demonstrating how to override some default values.

Basic

core:
+ Examples - WireGuard Portal      

Examples

Below are some sample YAML configurations demonstrating how to override some default values.

Basic

core:
   admin_user: test@example.com
   admin_password: password
   import_existing: false
diff --git a/master/documentation/configuration/overview/index.html b/master/documentation/configuration/overview/index.html
index f4fd67b..abf60f7 100644
--- a/master/documentation/configuration/overview/index.html
+++ b/master/documentation/configuration/overview/index.html
@@ -1,5 +1,5 @@
 
- Overview - WireGuard Portal      

Overview

This page provides an overview of all available configuration options for WireGuard Portal.

You can supply these configurations in a YAML file (e.g. config.yaml) when starting the Portal. The path of the configuration file defaults to config/config.yml in the working directory of the executable.
It is possible to override configuration filepath using the environment variable WG_PORTAL_CONFIG. For example: WG_PORTAL_CONFIG=/etc/wg-portal/config.yaml ./wg-portal.
Also, environment variable substitution in config file is supported. Refer to syntax.

Configuration examples are available on the Examples page.

Default configuration
core:
+ Overview - WireGuard Portal      

Overview

This page provides an overview of all available configuration options for WireGuard Portal.

You can supply these configurations in a YAML file (e.g. config.yaml) when starting the Portal. The path of the configuration file defaults to config/config.yml in the working directory of the executable.
It is possible to override configuration filepath using the environment variable WG_PORTAL_CONFIG. For example: WG_PORTAL_CONFIG=/etc/wg-portal/config.yaml ./wg-portal.
Also, environment variable substitution in config file is supported. Refer to syntax.

Configuration examples are available on the Examples page.

Default configuration
core:
   admin_user: admin@wgportal.local
   admin_password: wgportal
   editable_keys: true
diff --git a/master/documentation/getting-started/binaries/index.html b/master/documentation/getting-started/binaries/index.html
index a92387a..ea56982 100644
--- a/master/documentation/getting-started/binaries/index.html
+++ b/master/documentation/getting-started/binaries/index.html
@@ -1,5 +1,5 @@
 
- Binaries - WireGuard Portal      

Binaries

Starting from v2, each release includes compiled binaries for supported platforms. These binary versions can be manually downloaded and installed.

Download

With curl:

curl -L -o wg-portal https://github.com/h44z/wg-portal/releases/download/${WG_PORTAL_VERSION}/wg-portal_linux_amd64 
+ Binaries - WireGuard Portal      

Binaries

Starting from v2, each release includes compiled binaries for supported platforms. These binary versions can be manually downloaded and installed.

Download

With curl:

curl -L -o wg-portal https://github.com/h44z/wg-portal/releases/download/${WG_PORTAL_VERSION}/wg-portal_linux_amd64 
 

With wget:

wget -O wg-portal https://github.com/h44z/wg-portal/releases/download/${WG_PORTAL_VERSION}/wg-portal_linux_amd64
 

with gh cli:

gh release download ${WG_PORTAL_VERSION} --repo h44z/wg-portal --output wg-portal --pattern '*amd64'
 

Install

sudo mkdir -p /opt/wg-portal
diff --git a/master/documentation/getting-started/docker/index.html b/master/documentation/getting-started/docker/index.html
index 0ca312a..a0bfb65 100644
--- a/master/documentation/getting-started/docker/index.html
+++ b/master/documentation/getting-started/docker/index.html
@@ -1,5 +1,5 @@
 
- Docker - WireGuard Portal      

Docker

Image Usage

The preferred way to start WireGuard Portal as Docker container is to use Docker Compose.

A sample docker-compose.yml:

---
+ Docker - WireGuard Portal      

Docker

Image Usage

The preferred way to start WireGuard Portal as Docker container is to use Docker Compose.

A sample docker-compose.yml:

---
 services:
   wg-portal:
     image: wgportal/wg-portal:latest
diff --git a/master/documentation/getting-started/helm/index.html b/master/documentation/getting-started/helm/index.html
new file mode 100644
index 0000000..f921902
--- /dev/null
+++ b/master/documentation/getting-started/helm/index.html
@@ -0,0 +1,67 @@
+
+ Helm - WireGuard Portal      

Helm

Installing the Chart

To install the chart with the release name wg-portal:

helm install wg-portal oci://ghcr.io/h44z/charts/wg-portal
+

This command deploy wg-portal on the Kubernetes cluster in the default configuration. The Values section lists the parameters that can be configured during installation.

Values

Key Type Default Description
nameOverride string "" Partially override resource names (adds suffix)
fullnameOverride string "" Fully override resource names
extraDeploy list [] Array of extra objects to deploy with the release
config.advanced tpl/object {} Advanced configuration options.
config.auth tpl/object {} Auth configuration options.
config.core tpl/object {} Core configuration options.
If external admins in auth are not defined and there are no admin_user and admin_password defined here, the default credentials will be generated.
config.database tpl/object {} Database configuration options
config.mail tpl/object {} Mail configuration options
config.statistics tpl/object {} Statistics configuration options
config.web tpl/object {} Web configuration options.
listening_address will be set automatically from service.web.port. external_url is required to enable ingress and certificate resources.
revisionHistoryLimit string 10 The number of old ReplicaSets to retain to allow rollback.
workloadType string "Deployment" Workload type - Deployment or StatefulSet
strategy object {"type":"RollingUpdate"} Update strategy for the workload Valid values are: RollingUpdate or Recreate for Deployment, RollingUpdate or OnDelete for StatefulSet
image.repository string "ghcr.io/h44z/wg-portal" Image repository
image.pullPolicy string "IfNotPresent" Image pull policy
image.tag string "" Overrides the image tag whose default is the chart appVersion
imagePullSecrets list [] Image pull secrets
podAnnotations tpl/object {} Extra annotations to add to the pod
podLabels object {} Extra labels to add to the pod
podSecurityContext object {} Pod Security Context
securityContext.capabilities.add list ["NET_ADMIN"] Add capabilities to the container
initContainers tpl/list [] Pod init containers
sidecarContainers tpl/list [] Pod sidecar containers
dnsPolicy string "ClusterFirst" Set DNS policy for the pod. Valid values are ClusterFirstWithHostNet, ClusterFirst, Default or None.
restartPolicy string "Always" Restart policy for all containers within the pod. Valid values are Always, OnFailure or Never.
hostNetwork string false. Use the host's network namespace.
resources object {} Resources requests and limits
command list [] Overwrite pod command
args list [] Additional pod arguments
env tpl/list [] Additional environment variables
envFrom tpl/list [] Additional environment variables from a secret or configMap
livenessProbe object {} Liveness probe configuration
readinessProbe object {} Readiness probe configuration
startupProbe object {} Startup probe configuration
volumes tpl/list [] Additional volumes
volumeMounts tpl/list [] Additional volumeMounts
nodeSelector object {"kubernetes.io/os":"linux"} Node Selector configuration
tolerations list [] Tolerations configuration
affinity object {} Affinity configuration
service.mixed.enabled bool false Whether to create a single service for the web and wireguard interfaces
service.mixed.type string "LoadBalancer" Service type
service.web.annotations object {} Annotations for the web service
service.web.type string "ClusterIP" Web service type
service.web.port int 8888 Web service port Used for the web interface listener
service.web.appProtocol string "http" Web service appProtocol. Will be auto set to https if certificate is enabled.
service.wireguard.annotations object {} Annotations for the WireGuard service
service.wireguard.type string "LoadBalancer" Wireguard service type
service.wireguard.ports list [51820] Wireguard service ports. Exposes the WireGuard ports for created interfaces. Lowerest port is selected as start port for the first interface. Increment next port by 1 for each additional interface.
service.metrics.port int 8787
ingress.enabled bool false Specifies whether an ingress resource should be created
ingress.className string "" Ingress class name
ingress.annotations object {} Ingress annotations
ingress.tls bool false Ingress TLS configuration. Enable certificate resource or add ingress annotation to create required secret
certificate.enabled bool false Specifies whether a certificate resource should be created
certificate.issuer.name string "" Certificate issuer name
certificate.issuer.kind string "" Certificate issuer kind (ClusterIssuer or Issuer)
certificate.issuer.group string "cert-manager.io" Certificate issuer group
certificate.duration string "" Optional. Documentation
certificate.renewBefore string "" Optional. Documentation
certificate.commonName string "" Optional. Documentation
certificate.emailAddresses list [] Optional. Documentation
certificate.ipAddresses list [] Optional. Documentation
certificate.keystores object {} Optional. Documentation
certificate.privateKey object {} Optional. Documentation
certificate.secretTemplate object {} Optional. Documentation
certificate.subject object {} Optional. Documentation
certificate.uris list [] Optional. Documentation
certificate.usages list [] Optional. Documentation
persistence.enabled bool false Specifies whether an persistent volume should be created
persistence.annotations object {} Persistent Volume Claim annotations
persistence.storageClass string "" Persistent Volume storage class. If undefined (the default) cluster's default provisioner will be used.
persistence.accessMode string "ReadWriteOnce" Persistent Volume Access Mode
persistence.size string "1Gi" Persistent Volume size
serviceAccount.create bool true Specifies whether a service account should be created
serviceAccount.annotations object {} Service account annotations
serviceAccount.automount bool false Automatically mount a ServiceAccount's API credentials
serviceAccount.name string "" The name of the service account to use. If not set and create is true, a name is generated using the fullname template
monitoring.enabled bool false Enable Prometheus monitoring.
monitoring.apiVersion string "monitoring.coreos.com/v1" API version of the Prometheus resource. Use azmonitoring.coreos.com/v1 for Azure Managed Prometheus.
monitoring.kind string "PodMonitor" Kind of the Prometheus resource. Could be PodMonitor or ServiceMonitor.
monitoring.labels object {} Resource labels.
monitoring.annotations object {} Resource annotations.
monitoring.interval string 1m Interval at which metrics should be scraped. If not specified config.statistics.data_collection_interval interval is used.
monitoring.metricRelabelings list [] Relabelings to samples before ingestion.
monitoring.relabelings list [] Relabelings to samples before scraping.
monitoring.scrapeTimeout string "" Timeout after which the scrape is ended If not specified, the Prometheus global scrape interval is used.
monitoring.jobLabel string "" The label to use to retrieve the job name from.
monitoring.podTargetLabels object {} Transfers labels on the Kubernetes Pod onto the target.
monitoring.dashboard.enabled bool false Enable Grafana dashboard.
monitoring.dashboard.annotations object {} Annotations for the dashboard ConfigMap.
monitoring.dashboard.labels object {} Additional labels for the dashboard ConfigMap.
monitoring.dashboard.namespace string "" Dashboard ConfigMap namespace Overrides the namespace for the dashboard ConfigMap.
\ No newline at end of file diff --git a/master/documentation/getting-started/kubernetes/index.html b/master/documentation/getting-started/kubernetes/index.html deleted file mode 100644 index 0524b1e..0000000 --- a/master/documentation/getting-started/kubernetes/index.html +++ /dev/null @@ -1,67 +0,0 @@ - - Kubernetes - WireGuard Portal

Kubernetes

Installing the Chart

To install the chart with the release name wg-portal:

helm install wg-portal oci://ghcr.io/h44z/charts/wg-portal
-

This command deploy wg-portal on the Kubernetes cluster in the default configuration. The Values section lists the parameters that can be configured during installation.

Values

Key Type Default Description
nameOverride string "" Partially override resource names (adds suffix)
fullnameOverride string "" Fully override resource names
extraDeploy list [] Array of extra objects to deploy with the release
config.advanced tpl/object {} Advanced configuration options.
config.auth tpl/object {} Auth configuration options.
config.core tpl/object {} Core configuration options.
If external admins in auth are not defined and there are no admin_user and admin_password defined here, the default credentials will be generated.
config.database tpl/object {} Database configuration options
config.mail tpl/object {} Mail configuration options
config.statistics tpl/object {} Statistics configuration options
config.web tpl/object {} Web configuration options.
listening_address will be set automatically from service.web.port. external_url is required to enable ingress and certificate resources.
revisionHistoryLimit string 10 The number of old ReplicaSets to retain to allow rollback.
workloadType string "Deployment" Workload type - Deployment or StatefulSet
strategy object {"type":"RollingUpdate"} Update strategy for the workload Valid values are: RollingUpdate or Recreate for Deployment, RollingUpdate or OnDelete for StatefulSet
image.repository string "ghcr.io/h44z/wg-portal" Image repository
image.pullPolicy string "IfNotPresent" Image pull policy
image.tag string "" Overrides the image tag whose default is the chart appVersion
imagePullSecrets list [] Image pull secrets
podAnnotations tpl/object {} Extra annotations to add to the pod
podLabels object {} Extra labels to add to the pod
podSecurityContext object {} Pod Security Context
securityContext.capabilities.add list ["NET_ADMIN"] Add capabilities to the container
initContainers tpl/list [] Pod init containers
sidecarContainers tpl/list [] Pod sidecar containers
dnsPolicy string "ClusterFirst" Set DNS policy for the pod. Valid values are ClusterFirstWithHostNet, ClusterFirst, Default or None.
restartPolicy string "Always" Restart policy for all containers within the pod. Valid values are Always, OnFailure or Never.
hostNetwork string false. Use the host's network namespace.
resources object {} Resources requests and limits
command list [] Overwrite pod command
args list [] Additional pod arguments
env tpl/list [] Additional environment variables
envFrom tpl/list [] Additional environment variables from a secret or configMap
livenessProbe object {} Liveness probe configuration
readinessProbe object {} Readiness probe configuration
startupProbe object {} Startup probe configuration
volumes tpl/list [] Additional volumes
volumeMounts tpl/list [] Additional volumeMounts
nodeSelector object {"kubernetes.io/os":"linux"} Node Selector configuration
tolerations list [] Tolerations configuration
affinity object {} Affinity configuration
service.mixed.enabled bool false Whether to create a single service for the web and wireguard interfaces
service.mixed.type string "LoadBalancer" Service type
service.web.annotations object {} Annotations for the web service
service.web.type string "ClusterIP" Web service type
service.web.port int 8888 Web service port Used for the web interface listener
service.wireguard.annotations object {} Annotations for the WireGuard service
service.wireguard.type string "LoadBalancer" Wireguard service type
service.wireguard.ports list [51820] Wireguard service ports. Exposes the WireGuard ports for created interfaces. Lowerest port is selected as start port for the first interface. Increment next port by 1 for each additional interface.
service.metrics.port int 8787
ingress.enabled bool false Specifies whether an ingress resource should be created
ingress.className string "" Ingress class name
ingress.annotations object {} Ingress annotations
ingress.tls bool false Ingress TLS configuration. Enable certificate resource or add ingress annotation to create required secret
certificate.enabled bool false Specifies whether a certificate resource should be created
certificate.issuer.name string "" Certificate issuer name
certificate.issuer.kind string "" Certificate issuer kind (ClusterIssuer or Issuer)
certificate.issuer.group string "cert-manager.io" Certificate issuer group
certificate.duration string "" Optional. Documentation
certificate.renewBefore string "" Optional. Documentation
certificate.commonName string "" Optional. Documentation
certificate.emailAddresses list [] Optional. Documentation
certificate.ipAddresses list [] Optional. Documentation
certificate.keystores object {} Optional. Documentation
certificate.privateKey object {} Optional. Documentation
certificate.secretTemplate object {} Optional. Documentation
certificate.subject object {} Optional. Documentation
certificate.uris list [] Optional. Documentation
certificate.usages list [] Optional. Documentation
persistence.enabled bool false Specifies whether an persistent volume should be created
persistence.annotations object {} Persistent Volume Claim annotations
persistence.storageClass string "" Persistent Volume storage class. If undefined (the default) cluster's default provisioner will be used.
persistence.accessMode string "ReadWriteOnce" Persistent Volume Access Mode
persistence.size string "1Gi" Persistent Volume size
serviceAccount.create bool true Specifies whether a service account should be created
serviceAccount.annotations object {} Service account annotations
serviceAccount.automount bool false Automatically mount a ServiceAccount's API credentials
serviceAccount.name string "" The name of the service account to use. If not set and create is true, a name is generated using the fullname template
monitoring.enabled bool false Enable Prometheus monitoring.
monitoring.apiVersion string "monitoring.coreos.com/v1" API version of the Prometheus resource. Use azmonitoring.coreos.com/v1 for Azure Managed Prometheus.
monitoring.kind string "PodMonitor" Kind of the Prometheus resource. Could be PodMonitor or ServiceMonitor.
monitoring.labels object {} Resource labels.
monitoring.annotations object {} Resource annotations.
monitoring.interval string 1m Interval at which metrics should be scraped. If not specified config.statistics.data_collection_interval interval is used.
monitoring.metricRelabelings list [] Relabelings to samples before ingestion.
monitoring.relabelings list [] Relabelings to samples before scraping.
monitoring.scrapeTimeout string "" Timeout after which the scrape is ended If not specified, the Prometheus global scrape interval is used.
monitoring.jobLabel string "" The label to use to retrieve the job name from.
monitoring.podTargetLabels object {} Transfers labels on the Kubernetes Pod onto the target.
monitoring.dashboard.enabled bool false Enable Grafana dashboard.
monitoring.dashboard.annotations object {} Annotations for the dashboard ConfigMap.
monitoring.dashboard.labels object {} Additional labels for the dashboard ConfigMap.
monitoring.dashboard.namespace string "" Dashboard ConfigMap namespace Overrides the namespace for the dashboard ConfigMap.
\ No newline at end of file diff --git a/master/documentation/getting-started/sources/index.html b/master/documentation/getting-started/sources/index.html index cdbf75b..7679591 100644 --- a/master/documentation/getting-started/sources/index.html +++ b/master/documentation/getting-started/sources/index.html @@ -1,5 +1,5 @@ - Sources - WireGuard Portal

Sources

To build the application from source files, use the Makefile provided in the repository.

Requirements

Build

# Get source code
+ Sources - WireGuard Portal      

Sources

To build the application from source files, use the Makefile provided in the repository.

Requirements

Build

# Get source code
 git clone https://github.com/h44z/wg-portal -b ${WG_PORTAL_VERSION:-master} --depth 1
 cd wg-portal
 # Build the frontend
diff --git a/master/documentation/monitoring/prometheus/index.html b/master/documentation/monitoring/prometheus/index.html
index d2c6804..b664c50 100644
--- a/master/documentation/monitoring/prometheus/index.html
+++ b/master/documentation/monitoring/prometheus/index.html
@@ -1,5 +1,5 @@
 
- Monitoring - WireGuard Portal      

By default WG-Portal exposes Prometheus metrics on port 8787 if interface/peer statistic data collection is enabled.

Exposed Metrics

Metric Type Description
wireguard_interface_received_bytes_total gauge Bytes received through the interface.
wireguard_interface_sent_bytes_total gauge Bytes sent through the interface.
wireguard_peer_last_handshake_seconds gauge Seconds from the last handshake with the peer.
wireguard_peer_received_bytes_total gauge Bytes received from the peer.
wireguard_peer_sent_bytes_total gauge Bytes sent to the peer.
wireguard_peer_up gauge Peer connection state (boolean: 1/0).

Prometheus Config

Add following scrape job to your Prometheus config file:

# prometheus.yaml
+ Monitoring - WireGuard Portal      

By default WG-Portal exposes Prometheus metrics on port 8787 if interface/peer statistic data collection is enabled.

Exposed Metrics

Metric Type Description
wireguard_interface_received_bytes_total gauge Bytes received through the interface.
wireguard_interface_sent_bytes_total gauge Bytes sent through the interface.
wireguard_peer_last_handshake_seconds gauge Seconds from the last handshake with the peer.
wireguard_peer_received_bytes_total gauge Bytes received from the peer.
wireguard_peer_sent_bytes_total gauge Bytes sent to the peer.
wireguard_peer_up gauge Peer connection state (boolean: 1/0).

Prometheus Config

Add following scrape job to your Prometheus config file:

# prometheus.yaml
 scrape_configs:
   - job_name: wg-portal
     scrape_interval: 60s
diff --git a/master/documentation/overview/index.html b/master/documentation/overview/index.html
index da28a47..51d7559 100644
--- a/master/documentation/overview/index.html
+++ b/master/documentation/overview/index.html
@@ -1,5 +1,5 @@
 
- Overview - WireGuard Portal      

Overview

WireGuard Portal is a simple, web-based configuration portal for WireGuard server management. The portal uses the WireGuard wgctrl library to manage existing VPN interfaces. This allows for the seamless activation or deactivation of new users without disturbing existing VPN connections.

The configuration portal supports using a database (SQLite, MySQL, MsSQL or Postgres), OAuth or LDAP (Active Directory or OpenLDAP) as a user source for authentication and profile data.

Features

  • Self-hosted - the whole application is a single binary
  • Responsive multi-language web UI written in Vue.JS
  • Automatically selects IP from the network pool assigned to the client
  • QR-Code for convenient mobile client configuration
  • Sends email to the client with QR-code and client config
  • Enable / Disable clients seamlessly
  • Generation of wg-quick configuration file (wgX.conf) if required
  • User authentication (database, OAuth, or LDAP)
  • IPv6 ready
  • Docker ready
  • Can be used with existing WireGuard setups
  • Support for multiple WireGuard interfaces
  • Peer Expiry Feature
  • Handles route and DNS settings like wg-quick does
  • Exposes Prometheus metrics for monitoring and alertingt
  • REST API for management and client deployment

Overview

WireGuard Portal is a simple, web-based configuration portal for WireGuard server management. The portal uses the WireGuard wgctrl library to manage existing VPN interfaces. This allows for the seamless activation or deactivation of new users without disturbing existing VPN connections.

The configuration portal supports using a database (SQLite, MySQL, MsSQL or Postgres), OAuth or LDAP (Active Directory or OpenLDAP) as a user source for authentication and profile data.

Features

  • Self-hosted - the whole application is a single binary
  • Responsive multi-language web UI written in Vue.JS
  • Automatically selects IP from the network pool assigned to the client
  • QR-Code for convenient mobile client configuration
  • Sends email to the client with QR-code and client config
  • Enable / Disable clients seamlessly
  • Generation of wg-quick configuration file (wgX.conf) if required
  • User authentication (database, OAuth, or LDAP)
  • IPv6 ready
  • Docker ready
  • Can be used with existing WireGuard setups
  • Support for multiple WireGuard interfaces
  • Peer Expiry Feature
  • Handles route and DNS settings like wg-quick does
  • Exposes Prometheus metrics for monitoring and alertingt
  • REST API for management and client deployment

REST API

REST API

Upgrade

For production deployments of WireGuard Portal, we strongly recommend using version 1. If you want to use version 2, please be aware that it is still in beta and not feature complete.

Upgrade from v1 to v2

âš  Before upgrading from V1, make sure that you have a backup of your currently working configuration files and database!

To start the upgrade process, start the wg-portal binary with the -migrateFrom parameter. The configuration (config.yml) for WireGuard Portal must be updated and valid before starting the upgrade.

To upgrade from a previous SQLite database, start wg-portal like:

./wg-portal-amd64 -migrateFrom=old_wg_portal.db
+ Upgrade - WireGuard Portal      

Upgrade

For production deployments of WireGuard Portal, we strongly recommend using version 1. If you want to use version 2, please be aware that it is still in beta and not feature complete.

Upgrade from v1 to v2

âš  Before upgrading from V1, make sure that you have a backup of your currently working configuration files and database!

To start the upgrade process, start the wg-portal binary with the -migrateFrom parameter. The configuration (config.yml) for WireGuard Portal must be updated and valid before starting the upgrade.

To upgrade from a previous SQLite database, start wg-portal like:

./wg-portal-amd64 -migrateFrom=old_wg_portal.db
 

You can also specify the database type using the parameter -migrateFromType, supported types: mysql, mssql, postgres or sqlite. For example:

./wg-portal-amd64 -migrateFromType=mysql -migrateFrom='user:pass@tcp(1.2.3.4:3306)/dbname?charset=utf8mb4&parseTime=True&loc=Local'
 

The upgrade will transform the old, existing database and store the values in the new database specified in the config.yml configuration file. Ensure that the new database does not contain any data!

If you are using Docker, you can adapt the docker-compose.yml file to start the upgrade process:

services:
   wg-portal:
diff --git a/master/index.html b/master/index.html
index 9c80352..827a5bd 100644
--- a/master/index.html
+++ b/master/index.html
@@ -293,7 +293,7 @@
   background: var(--md-accent-fg-color--transparent);
 }
 
-  

A beautiful and simple UI to manage your WireGuard peers and interfaces

WireGuard Portal is an open source web-based user interface that makes it easy to setup and manage WireGuard VPN connections. It's built on top of WireGuard's official wgctrl library.

Get started

More information about WireGuard

WireGuard® is an extremely simple yet fast and modern VPN that utilizes state-of-the-art cryptography.

WireGuard uses state-of-the-art cryptography and still manages to be as easy to configure and deploy as SSH. A combination of extremely high-speed cryptographic primitives and the fact that WireGuard lives inside the Linux kernel means that secure networking can be very high-speed. It is suitable for both small embedded devices like smartphones and fully loaded backbone routers.