# vernette/amneziawg-docker architecture

> Architecture diagram of the GitHub repository vernette/amneziawg-docker, generated by GitDiagram from its file tree, README and a sample of source files (last updated 2026-09-30). It is an AI-made overview: check details against the source.

- Interactive diagram: https://gitdiagram.com/vernette/amneziawg-docker
- Repository: https://github.com/vernette/amneziawg-docker

## Overview

This repository packages AmneziaWG as a Docker client/server container. The main workflow is to prepare a peer config, mount it into the container, and start an interface through awg-quick; the config determines the role. The README also documents key and obfuscation-parameter generation and userspace versus kernel operation. Runtime relationships below are based on README statements only; no source excerpts were provided.

Main entry points: [`compose.yaml`](https://github.com/vernette/amneziawg-docker/blob/master/compose.yaml) (Compose setup), [`scripts/entrypoint.sh`](https://github.com/vernette/amneziawg-docker/blob/master/scripts/entrypoint.sh) (Interface startup), [`examples/client.conf`](https://github.com/vernette/amneziawg-docker/blob/master/examples/client.conf) (Client template), [`examples/server.conf`](https://github.com/vernette/amneziawg-docker/blob/master/examples/server.conf) (Server template)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_deployment["Container runtime"]
  node_compose["Compose setup<br/>[compose.yaml]"]
  node_entrypoint["Interface startup<br/>[entrypoint.sh]"]
  node_quick["awg-quick"]
  node_userspace["Userspace backend"]
  node_kernel["Kernel backend"]
end

subgraph group_configs["Peer configuration"]
  node_client["Client template<br/>[client.conf]"]
  node_server["Server template<br/>[server.conf]"]
end

subgraph group_tools["Key and parameters"]
  node_keytool["awg key commands"]
  node_paramgen["Obfuscation generator<br/>[awg-genparams.sh]"]
end

node_operator(("Operator"))
node_peer(("VPN peer"))

node_operator -->|"edits template"| node_client
node_operator -->|"edits template"| node_server
node_operator -->|"starts container"| node_compose
node_compose -.->|"starts runtime"| node_entrypoint
node_entrypoint -->|"starts interfaces"| node_quick
node_quick -->|"uses by default"| node_userspace
node_quick -->|"uses if available"| node_kernel
node_client -->|"configures client side"| node_peer
node_server -->|"configures server side"| node_peer
node_operator -->|"runs key commands"| node_keytool
node_operator -->|"runs generator"| node_paramgen

click node_compose "https://github.com/vernette/amneziawg-docker/blob/master/compose.yaml"
click node_entrypoint "https://github.com/vernette/amneziawg-docker/blob/master/scripts/entrypoint.sh"
click node_client "https://github.com/vernette/amneziawg-docker/blob/master/examples/client.conf"
click node_server "https://github.com/vernette/amneziawg-docker/blob/master/examples/server.conf"
click node_paramgen "https://github.com/vernette/amneziawg-docker/blob/master/scripts/awg-genparams.sh"

classDef toneNeutral fill:#f8fafc,stroke:#334155,stroke-width:1.5px,color:#0f172a
classDef toneBlue fill:#dbeafe,stroke:#2563eb,stroke-width:1.5px,color:#172554
classDef toneAmber fill:#fef3c7,stroke:#d97706,stroke-width:1.5px,color:#78350f
classDef toneMint fill:#dcfce7,stroke:#16a34a,stroke-width:1.5px,color:#14532d
classDef toneRose fill:#ffe4e6,stroke:#e11d48,stroke-width:1.5px,color:#881337
classDef toneIndigo fill:#e0e7ff,stroke:#4f46e5,stroke-width:1.5px,color:#312e81
classDef toneTeal fill:#ccfbf1,stroke:#0f766e,stroke-width:1.5px,color:#134e4a
class node_compose,node_entrypoint,node_quick,node_userspace,node_kernel toneBlue
class node_client,node_server toneAmber
class node_keytool,node_paramgen toneMint
class node_operator,node_peer toneIndigo
```

## Components

### Container runtime

- [Compose setup](https://github.com/vernette/amneziawg-docker/blob/master/compose.yaml): `compose.yaml`
- [Interface startup](https://github.com/vernette/amneziawg-docker/blob/master/scripts/entrypoint.sh): `scripts/entrypoint.sh`
- **awg-quick**
- **Userspace backend**
- **Kernel backend**

### Peer configuration

- [Client template](https://github.com/vernette/amneziawg-docker/blob/master/examples/client.conf): `examples/client.conf`
- [Server template](https://github.com/vernette/amneziawg-docker/blob/master/examples/server.conf): `examples/server.conf`

### Key and parameters

- **awg key commands**
- [Obfuscation generator](https://github.com/vernette/amneziawg-docker/blob/master/scripts/awg-genparams.sh): `scripts/awg-genparams.sh`

### Other components

- **Operator**
- **VPN peer**

## Connections

- Operator → Client template: edits template (evidence: `README.md`)
- Operator → Server template: edits template (evidence: `README.md`)
- Operator → Compose setup: starts container (evidence: `README.md`)
- Compose setup → Interface startup: starts runtime
- Interface startup → awg-quick: starts interfaces (evidence: `README.md`)
- awg-quick → Userspace backend: uses by default (evidence: `README.md`)
- awg-quick → Kernel backend: uses if available (evidence: `README.md`)
- Client template → VPN peer: configures client side (evidence: `README.md`)
- Server template → VPN peer: configures server side (evidence: `README.md`)
- Operator → awg key commands: runs key commands (evidence: `README.md`)
- Operator → Obfuscation generator: runs generator (evidence: `README.md`)
