wg-manager/README.md

108 lines
2.8 KiB
Markdown
Raw Normal View History

2024-10-06 12:56:12 +02:00
# WG-MANAGER
This simple Django web interface helps to manage wg connections in a client/server scenario.
Users are allowed to create, enable and disable wg peers.
**Warning**
this program is **alpha quality**, not fully tested and can break your computer :D
also it must run with *root privileges* :(
feat: containers and celery worker Squashed commit of the following: commit f3c87deb32418b3042a4a976608f7bc6b7686c04 Author: Andrea Zucchelli <zukka77@gmail.com> Date: Sun Oct 13 23:47:36 2024 +0200 chore: refresh button commit e7c831e0c20a438a0ee9240fe637a81f2f454d81 Author: Andrea Zucchelli <zukka77@gmail.com> Date: Sun Oct 13 23:37:56 2024 +0200 feat: wrapping up containers commit e571b00c3d1f310dba99b187b4009ed8247bd845 Author: Andrea Zucchelli <zukka77@gmail.com> Date: Sun Oct 13 21:27:52 2024 +0200 fix: sort out sub commit 4a75d4561b30392908f95d7f052467594de6b049 Author: Andrea Zucchelli <zukka77@gmail.com> Date: Sun Oct 13 21:24:56 2024 +0200 fix: sort out sub commit 3c1030a2fe1cf7380aa6dfb5827bc3a4a48fbcb7 Author: Andrea Zucchelli <zukka77@gmail.com> Date: Sun Oct 13 20:29:29 2024 +0200 chore: optimize image build commit f63d1b185b90bd8db8712089f339e5fe9ddc5af6 Author: Andrea Zucchelli <zukka77@gmail.com> Date: Sun Oct 13 20:28:11 2024 +0200 chore: optimize image build commit 0d9a1754384c4012ba486fccc33cc43ca41f1ed4 Author: Andrea Zucchelli <zukka77@gmail.com> Date: Sun Oct 13 20:26:16 2024 +0200 chore: optimize image build commit bb510718d2a684fff873418e745ce8bebbd02b7b Author: Andrea Zucchelli <zukka77@gmail.com> Date: Sun Oct 13 20:08:22 2024 +0200 fix: toggle_connection commit b48a12c1f31c524325be17032f8148160035829d Author: Andrea Zucchelli <zukka77@gmail.com> Date: Sun Oct 13 20:02:30 2024 +0200 fix: toggle_connection commit 343c36002b1dd445781611199a0c532a5b111185 Author: Andrea Zucchelli <zukka77@gmail.com> Date: Sun Oct 13 19:27:14 2024 +0200 fix: serialization commit 880909912c740e72e4be9642088a708b8e088bd3 Author: Andrea Zucchelli <zukka77@gmail.com> Date: Sun Oct 13 19:24:06 2024 +0200 fix: sync command commit fbabd0cfcad23a79477e2fbf9109253ee0702d87 Author: Andrea Zucchelli <zukka77@gmail.com> Date: Sun Oct 13 19:13:10 2024 +0200 fix: import Peer commit 444f612452170698c74c0a9e8c0731bfd14f67e0 Author: Andrea Zucchelli <zukka77@gmail.com> Date: Sun Oct 13 19:09:28 2024 +0200 chore: use celery commit 2f9699129436432d92b0fb487fd4de3b3d663fd1 Author: Andrea Zucchelli <zukka77@gmail.com> Date: Sun Oct 13 19:02:40 2024 +0200 fix: make gunicorn listen on 0.0.0.0 commit 313f23e23ca6acb1bddb0b4b89ebcb951ad36f32 Author: Andrea Zucchelli <zukka77@gmail.com> Date: Sun Oct 13 18:59:22 2024 +0200 chore: docker stuff compat commit c17153112bc1a000e57ffe2346ec516056714777 Author: Andrea Zucchelli <zukka77@gmail.com> Date: Sun Oct 13 18:55:39 2024 +0200 feat: celery decoupling
2024-10-13 23:49:48 +02:00
## Quickstart container
The container version is made of 3 containers a valkey/redis container a celery worker backend and the django app as frontend.
The django apps invokes the worker via celery through valkey, the worker executes the privileged operations on the wireguard interfaces, the celery worker container ha **NET_ADMIN** capability and lives in the **host network**
there's a sample compose file `compose.yaml`.
### first prepare the environment
in `wg_manager` dir
create your own `settings.py`:
```python
from .settings_dist import *
# your customization here
```
or simply make a symbolic link:
```bash
ln -s settings_dist.py settings.py
```
copy `.env-dist` and create your own `.env` set the variable `WG_INTERFACE` according to the name of the wg interface you want to manage
### star the service
you can start the service running:
```bash
docker compose up
```
The you can connect to the web interface on [http://127.0.0.1:4000](http://127.0.0.1:4000) default superuser credentials are:
* user: admin
* password: admin
you can import existing wireguard peer by visiting the `/sync` url [http://127.0.0.1:4000/sync](http://127.0.0.1:4000/sync)
Remember that the db insiede the container get destroyed every time the container get destroyed.
You can mount the db as a volume by adding the db as volume in the `wg-manager` service:
```yaml
volumes:
#...
- ./db.sqlite3:/app/db.sqlite3
#...
```
## Quickstart standalone
2024-10-06 12:56:12 +02:00
create a python venv:
```bash
python -m venv venv
```
activate it
```bash
. venv/bin/activate
```
install the requirements
```bash
2024-10-11 14:55:05 +02:00
pip install -r requirements.txt
2024-10-06 12:56:12 +02:00
```
in `wg_manager` dir
create your own `settings.py`:
```python
from .settings_dist import *
# your customization here
```
or simply make a symbolic link:
```bash
ln -s settings_dist.py settings.py
```
copy `.env-dist` and create your own `.env` set the variable `WG_INTERFACE` according to the name of the wg interface you want to manage
feat: containers and celery worker Squashed commit of the following: commit f3c87deb32418b3042a4a976608f7bc6b7686c04 Author: Andrea Zucchelli <zukka77@gmail.com> Date: Sun Oct 13 23:47:36 2024 +0200 chore: refresh button commit e7c831e0c20a438a0ee9240fe637a81f2f454d81 Author: Andrea Zucchelli <zukka77@gmail.com> Date: Sun Oct 13 23:37:56 2024 +0200 feat: wrapping up containers commit e571b00c3d1f310dba99b187b4009ed8247bd845 Author: Andrea Zucchelli <zukka77@gmail.com> Date: Sun Oct 13 21:27:52 2024 +0200 fix: sort out sub commit 4a75d4561b30392908f95d7f052467594de6b049 Author: Andrea Zucchelli <zukka77@gmail.com> Date: Sun Oct 13 21:24:56 2024 +0200 fix: sort out sub commit 3c1030a2fe1cf7380aa6dfb5827bc3a4a48fbcb7 Author: Andrea Zucchelli <zukka77@gmail.com> Date: Sun Oct 13 20:29:29 2024 +0200 chore: optimize image build commit f63d1b185b90bd8db8712089f339e5fe9ddc5af6 Author: Andrea Zucchelli <zukka77@gmail.com> Date: Sun Oct 13 20:28:11 2024 +0200 chore: optimize image build commit 0d9a1754384c4012ba486fccc33cc43ca41f1ed4 Author: Andrea Zucchelli <zukka77@gmail.com> Date: Sun Oct 13 20:26:16 2024 +0200 chore: optimize image build commit bb510718d2a684fff873418e745ce8bebbd02b7b Author: Andrea Zucchelli <zukka77@gmail.com> Date: Sun Oct 13 20:08:22 2024 +0200 fix: toggle_connection commit b48a12c1f31c524325be17032f8148160035829d Author: Andrea Zucchelli <zukka77@gmail.com> Date: Sun Oct 13 20:02:30 2024 +0200 fix: toggle_connection commit 343c36002b1dd445781611199a0c532a5b111185 Author: Andrea Zucchelli <zukka77@gmail.com> Date: Sun Oct 13 19:27:14 2024 +0200 fix: serialization commit 880909912c740e72e4be9642088a708b8e088bd3 Author: Andrea Zucchelli <zukka77@gmail.com> Date: Sun Oct 13 19:24:06 2024 +0200 fix: sync command commit fbabd0cfcad23a79477e2fbf9109253ee0702d87 Author: Andrea Zucchelli <zukka77@gmail.com> Date: Sun Oct 13 19:13:10 2024 +0200 fix: import Peer commit 444f612452170698c74c0a9e8c0731bfd14f67e0 Author: Andrea Zucchelli <zukka77@gmail.com> Date: Sun Oct 13 19:09:28 2024 +0200 chore: use celery commit 2f9699129436432d92b0fb487fd4de3b3d663fd1 Author: Andrea Zucchelli <zukka77@gmail.com> Date: Sun Oct 13 19:02:40 2024 +0200 fix: make gunicorn listen on 0.0.0.0 commit 313f23e23ca6acb1bddb0b4b89ebcb951ad36f32 Author: Andrea Zucchelli <zukka77@gmail.com> Date: Sun Oct 13 18:59:22 2024 +0200 chore: docker stuff compat commit c17153112bc1a000e57ffe2346ec516056714777 Author: Andrea Zucchelli <zukka77@gmail.com> Date: Sun Oct 13 18:55:39 2024 +0200 feat: celery decoupling
2024-10-13 23:49:48 +02:00
set `USE_CELERY=False` in environemnt to use only the django app without the privileged worker
2024-10-06 12:56:12 +02:00
create the sqlite db:
```bash
./manage.py migrate
```
2024-10-11 14:55:05 +02:00
collect static assets:
```bash
./manage.py collectstatic
```
2024-10-06 12:56:12 +02:00
create the superuser:
```bash
./manage.py createsuperuser
```
if you already have connections you can import them in the db with:
```bash
./manage.py sync
```
you can test with the integrated dev server:
```bash
./manage.py runserver
```
and then deploy it using a proper web server like [gunicorn](https://gunicorn.org/):
```bash
gunicorn wg_manager.wsgi
```
with a proper tls enabled reverse proxy before it.