mirror of
https://github.com/seanmorley15/AdventureLog.git
synced 2025-08-02 11:45:17 +02:00
Merge pull request #407 from seanmorley15/dependabot/npm_and_yarn/documentation/npm_and_yarn-36c5dcd58e
Bump the npm_and_yarn group across 2 directories with 2 updates
This commit is contained in:
commit
57f2bdb8ba
9 changed files with 223 additions and 18 deletions
|
@ -1147,9 +1147,8 @@ class ReverseGeocodeViewSet(viewsets.ViewSet):
|
||||||
if not iso_code:
|
if not iso_code:
|
||||||
return {"error": "No region found"}
|
return {"error": "No region found"}
|
||||||
region = Region.objects.filter(id=iso_code).first()
|
region = Region.objects.filter(id=iso_code).first()
|
||||||
visited_region = VisitedRegion.objects.filter(region=region).first()
|
visited_region = VisitedRegion.objects.filter(region=region, user_id=self.request.user).first()
|
||||||
is_visited = False
|
is_visited = False
|
||||||
print(iso_code)
|
|
||||||
country_code = iso_code[:2]
|
country_code = iso_code[:2]
|
||||||
|
|
||||||
if region:
|
if region:
|
||||||
|
|
|
@ -59,7 +59,6 @@ class CountryViewSet(viewsets.ReadOnlyModelViewSet):
|
||||||
for adventure in adventures:
|
for adventure in adventures:
|
||||||
if adventure.latitude is not None and adventure.longitude is not None:
|
if adventure.latitude is not None and adventure.longitude is not None:
|
||||||
try:
|
try:
|
||||||
print(f"Adventure {adventure.id}: lat={adventure.latitude}, lon={adventure.longitude}")
|
|
||||||
point = Point(float(adventure.longitude), float(adventure.latitude), srid=4326)
|
point = Point(float(adventure.longitude), float(adventure.latitude), srid=4326)
|
||||||
region = Region.objects.filter(geometry__contains=point).first()
|
region = Region.objects.filter(geometry__contains=point).first()
|
||||||
if region:
|
if region:
|
||||||
|
|
|
@ -65,6 +65,10 @@ export default defineConfig({
|
||||||
{ text: "Docker 🐋", link: "/docs/install/docker" },
|
{ text: "Docker 🐋", link: "/docs/install/docker" },
|
||||||
{ text: "Proxmox LXC 🐧", link: "/docs/install/proxmox_lxc" },
|
{ text: "Proxmox LXC 🐧", link: "/docs/install/proxmox_lxc" },
|
||||||
{ text: "Synology NAS ☁️", link: "/docs/install/synology_nas" },
|
{ text: "Synology NAS ☁️", link: "/docs/install/synology_nas" },
|
||||||
|
{
|
||||||
|
text: "Kubernetes and Kustomize 🌐",
|
||||||
|
link: "/docs/install/kustomize",
|
||||||
|
},
|
||||||
|
|
||||||
{
|
{
|
||||||
text: "With A Reverse Proxy",
|
text: "With A Reverse Proxy",
|
||||||
|
@ -113,6 +117,10 @@ export default defineConfig({
|
||||||
text: "Guides",
|
text: "Guides",
|
||||||
collapsed: false,
|
collapsed: false,
|
||||||
items: [
|
items: [
|
||||||
|
{
|
||||||
|
text: "Admin Panel",
|
||||||
|
link: "/docs/guides/admin_panel",
|
||||||
|
},
|
||||||
{
|
{
|
||||||
text: "v0.7.1 Migration Guide",
|
text: "v0.7.1 Migration Guide",
|
||||||
link: "/docs/guides/v0-7-1_migration",
|
link: "/docs/guides/v0-7-1_migration",
|
||||||
|
|
11
documentation/docs/guides/admin_panel.md
Normal file
11
documentation/docs/guides/admin_panel.md
Normal file
|
@ -0,0 +1,11 @@
|
||||||
|
# AdventureLog Admin Panel
|
||||||
|
|
||||||
|
The AdventureLog Admin Panel, powered by Django, is a web-based interface that allows administrators to manage objects in the AdventureLog database. The Admin Panel is accessible at the `/admin` endpoint of the AdventureLog server. Example: `https://al-server.yourdomain.com/admin`.
|
||||||
|
|
||||||
|
Features of the Admin Panel include:
|
||||||
|
|
||||||
|
- **User Management**: Administrators can view and manage user accounts, including creating new users, updating user information, and deleting users.
|
||||||
|
- **Adventure Management**: Administrators can view and manage adventures, including creating new adventures, updating adventure information, and deleting adventures.
|
||||||
|
- **Security**: The Admin Panel enforces access control to ensure that only authorized administrators can access and manage the database. This means that only users with the `is_staff` flag set to `True` can access the Admin Panel.
|
||||||
|
|
||||||
|
Note: the `CSRF_TRUSTED_ORIGINS` setting in your `docker-compose.yml` file must include the domain of the server. For example, if your server is hosted at `https://al-server.yourdomain.com`, you should add `al-server.yourdomain.com` to the `CSRF_TRUSTED_ORIGINS` setting.
|
|
@ -5,6 +5,7 @@ AdventureLog can be installed in a variety of ways. The following are the most c
|
||||||
- [Docker](docker.md) 🐳
|
- [Docker](docker.md) 🐳
|
||||||
- [Proxmox LXC](proxmox_lxc.md) 🐧
|
- [Proxmox LXC](proxmox_lxc.md) 🐧
|
||||||
- [Synology NAS](synology_nas.md) ☁️
|
- [Synology NAS](synology_nas.md) ☁️
|
||||||
|
- [Kubernetes and Kustomize](kustomize.md) 🌐
|
||||||
|
|
||||||
### Other Options
|
### Other Options
|
||||||
|
|
||||||
|
|
34
documentation/docs/install/kustomize.md
Normal file
34
documentation/docs/install/kustomize.md
Normal file
|
@ -0,0 +1,34 @@
|
||||||
|
# Kubernetes and Kustomize (k8s)
|
||||||
|
|
||||||
|
_AdventureLog can be run inside a kubernetes cluster using [kustomize](https://kustomize.io/)._
|
||||||
|
|
||||||
|
## Prerequisites
|
||||||
|
|
||||||
|
A working kubernetes cluster. AdventureLog has been tested on k8s, but any Kustomize-capable flavor should be easy to use.
|
||||||
|
|
||||||
|
## Cluster Routing
|
||||||
|
|
||||||
|
Because the AdventureLog backend must be reachable by **both** the web browser and the AdventureLog frontend, k8s-internal routing mechanisms traditional for standing up other similar applications **cannot** be used.
|
||||||
|
|
||||||
|
In order to host AdventureLog in your cluster, you must therefor configure an internally and externally resolvable ingress that routes to your AdventureLog backend container.
|
||||||
|
|
||||||
|
Once you have made said ingress, set `PUBLIC_SERVER_URL` and `PUBLIC_URL` env variables below to the url of that ingress.
|
||||||
|
|
||||||
|
## Tailscale and Headscale
|
||||||
|
|
||||||
|
Many k8s homelabs choose to use [Tailscale](https://tailscale.com/) or similar projects to remove the need for open ports in your home firewall.
|
||||||
|
|
||||||
|
The [Tailscale k8s Operator](https://tailscale.com/kb/1185/kubernetes/) will set up an externally resolvable service/ingress for your AdventureLog instance,
|
||||||
|
but it will fail to resolve internally.
|
||||||
|
|
||||||
|
You must [expose tailnet IPs to your cluster](https://tailscale.com/kb/1438/kubernetes-operator-cluster-egress#expose-a-tailnet-https-service-to-your-cluster-workloads) so the AdventureLog pods can resolve them.
|
||||||
|
|
||||||
|
## Getting Started
|
||||||
|
|
||||||
|
Take a look at the [example config](https://github.com/seanmorley15/AdventureLog/blob/main/kustomization.yml) and modify it for your usecase.
|
||||||
|
|
||||||
|
## Environment Variables
|
||||||
|
|
||||||
|
Look at the [environment variable summary](docker.md#configuration) in the docker install section to see available and required configuration options.
|
||||||
|
|
||||||
|
Enjoy AdventureLog! 🎉
|
8
documentation/pnpm-lock.yaml
generated
8
documentation/pnpm-lock.yaml
generated
|
@ -612,8 +612,8 @@ packages:
|
||||||
mitt@3.0.1:
|
mitt@3.0.1:
|
||||||
resolution: {integrity: sha512-vKivATfr97l2/QBCYAkXYDbrIWPM2IIKEl7YPhjCvKlG3kE2gm+uBo6nEXK3M5/Ffh/FLpKExzOQ3JJoJGFKBw==}
|
resolution: {integrity: sha512-vKivATfr97l2/QBCYAkXYDbrIWPM2IIKEl7YPhjCvKlG3kE2gm+uBo6nEXK3M5/Ffh/FLpKExzOQ3JJoJGFKBw==}
|
||||||
|
|
||||||
nanoid@3.3.7:
|
nanoid@3.3.8:
|
||||||
resolution: {integrity: sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==}
|
resolution: {integrity: sha512-WNLf5Sd8oZxOm+TzppcYk8gVOgP+l58xNy58D0nbUnOxOWRWvlcCV4kUF7ltmI6PsrLl/BgKEyS4mqsGChFN0w==}
|
||||||
engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1}
|
engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1}
|
||||||
hasBin: true
|
hasBin: true
|
||||||
|
|
||||||
|
@ -1352,7 +1352,7 @@ snapshots:
|
||||||
|
|
||||||
mitt@3.0.1: {}
|
mitt@3.0.1: {}
|
||||||
|
|
||||||
nanoid@3.3.7: {}
|
nanoid@3.3.8: {}
|
||||||
|
|
||||||
oniguruma-to-es@0.4.1:
|
oniguruma-to-es@0.4.1:
|
||||||
dependencies:
|
dependencies:
|
||||||
|
@ -1366,7 +1366,7 @@ snapshots:
|
||||||
|
|
||||||
postcss@8.4.49:
|
postcss@8.4.49:
|
||||||
dependencies:
|
dependencies:
|
||||||
nanoid: 3.3.7
|
nanoid: 3.3.8
|
||||||
picocolors: 1.1.1
|
picocolors: 1.1.1
|
||||||
source-map-js: 1.2.1
|
source-map-js: 1.2.1
|
||||||
|
|
||||||
|
|
22
frontend/pnpm-lock.yaml
generated
22
frontend/pnpm-lock.yaml
generated
|
@ -902,8 +902,8 @@ packages:
|
||||||
resolution: {integrity: sha512-U71cyTamuh1CRNCfpGY6to28lxvNwPG4Guz/EVjgf3Jmzv0vlDp1atT9eS5dDjMYHucpHbWns6Lwf3BKz6svdw==}
|
resolution: {integrity: sha512-U71cyTamuh1CRNCfpGY6to28lxvNwPG4Guz/EVjgf3Jmzv0vlDp1atT9eS5dDjMYHucpHbWns6Lwf3BKz6svdw==}
|
||||||
engines: {node: '>= 0.6'}
|
engines: {node: '>= 0.6'}
|
||||||
|
|
||||||
cross-spawn@7.0.3:
|
cross-spawn@7.0.6:
|
||||||
resolution: {integrity: sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==}
|
resolution: {integrity: sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==}
|
||||||
engines: {node: '>= 8'}
|
engines: {node: '>= 8'}
|
||||||
|
|
||||||
css-selector-tokenizer@0.8.0:
|
css-selector-tokenizer@0.8.0:
|
||||||
|
@ -1440,8 +1440,8 @@ packages:
|
||||||
mz@2.7.0:
|
mz@2.7.0:
|
||||||
resolution: {integrity: sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==}
|
resolution: {integrity: sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==}
|
||||||
|
|
||||||
nanoid@3.3.7:
|
nanoid@3.3.8:
|
||||||
resolution: {integrity: sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==}
|
resolution: {integrity: sha512-WNLf5Sd8oZxOm+TzppcYk8gVOgP+l58xNy58D0nbUnOxOWRWvlcCV4kUF7ltmI6PsrLl/BgKEyS4mqsGChFN0w==}
|
||||||
engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1}
|
engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1}
|
||||||
hasBin: true
|
hasBin: true
|
||||||
|
|
||||||
|
@ -2366,7 +2366,7 @@ snapshots:
|
||||||
'@jsdevtools/ez-spawn@3.0.4':
|
'@jsdevtools/ez-spawn@3.0.4':
|
||||||
dependencies:
|
dependencies:
|
||||||
call-me-maybe: 1.0.2
|
call-me-maybe: 1.0.2
|
||||||
cross-spawn: 7.0.3
|
cross-spawn: 7.0.6
|
||||||
string-argv: 0.3.2
|
string-argv: 0.3.2
|
||||||
type-detect: 4.0.8
|
type-detect: 4.0.8
|
||||||
|
|
||||||
|
@ -2827,7 +2827,7 @@ snapshots:
|
||||||
|
|
||||||
cookie@0.6.0: {}
|
cookie@0.6.0: {}
|
||||||
|
|
||||||
cross-spawn@7.0.3:
|
cross-spawn@7.0.6:
|
||||||
dependencies:
|
dependencies:
|
||||||
path-key: 3.1.1
|
path-key: 3.1.1
|
||||||
shebang-command: 2.0.0
|
shebang-command: 2.0.0
|
||||||
|
@ -3008,7 +3008,7 @@ snapshots:
|
||||||
|
|
||||||
execa@5.1.1:
|
execa@5.1.1:
|
||||||
dependencies:
|
dependencies:
|
||||||
cross-spawn: 7.0.3
|
cross-spawn: 7.0.6
|
||||||
get-stream: 6.0.1
|
get-stream: 6.0.1
|
||||||
human-signals: 2.1.0
|
human-signals: 2.1.0
|
||||||
is-stream: 2.0.1
|
is-stream: 2.0.1
|
||||||
|
@ -3065,7 +3065,7 @@ snapshots:
|
||||||
|
|
||||||
foreground-child@3.2.1:
|
foreground-child@3.2.1:
|
||||||
dependencies:
|
dependencies:
|
||||||
cross-spawn: 7.0.3
|
cross-spawn: 7.0.6
|
||||||
signal-exit: 4.1.0
|
signal-exit: 4.1.0
|
||||||
|
|
||||||
fraction.js@4.3.7: {}
|
fraction.js@4.3.7: {}
|
||||||
|
@ -3404,7 +3404,7 @@ snapshots:
|
||||||
object-assign: 4.1.1
|
object-assign: 4.1.1
|
||||||
thenify-all: 1.6.0
|
thenify-all: 1.6.0
|
||||||
|
|
||||||
nanoid@3.3.7: {}
|
nanoid@3.3.8: {}
|
||||||
|
|
||||||
next-tick@1.1.0: {}
|
next-tick@1.1.0: {}
|
||||||
|
|
||||||
|
@ -3558,13 +3558,13 @@ snapshots:
|
||||||
|
|
||||||
postcss@8.4.38:
|
postcss@8.4.38:
|
||||||
dependencies:
|
dependencies:
|
||||||
nanoid: 3.3.7
|
nanoid: 3.3.8
|
||||||
picocolors: 1.0.1
|
picocolors: 1.0.1
|
||||||
source-map-js: 1.2.0
|
source-map-js: 1.2.0
|
||||||
|
|
||||||
postcss@8.4.47:
|
postcss@8.4.47:
|
||||||
dependencies:
|
dependencies:
|
||||||
nanoid: 3.3.7
|
nanoid: 3.3.8
|
||||||
picocolors: 1.1.0
|
picocolors: 1.1.0
|
||||||
source-map-js: 1.2.1
|
source-map-js: 1.2.1
|
||||||
|
|
||||||
|
|
153
kustomization.yml
Normal file
153
kustomization.yml
Normal file
|
@ -0,0 +1,153 @@
|
||||||
|
apiVersion: apps/v1
|
||||||
|
kind: Deployment
|
||||||
|
metadata:
|
||||||
|
name: example-name
|
||||||
|
labels:
|
||||||
|
app: adventure
|
||||||
|
spec:
|
||||||
|
replicas: 1
|
||||||
|
selector:
|
||||||
|
matchLabels:
|
||||||
|
app: adventure
|
||||||
|
template:
|
||||||
|
metadata:
|
||||||
|
name: adventure
|
||||||
|
labels:
|
||||||
|
app: adventure
|
||||||
|
spec:
|
||||||
|
volumes:
|
||||||
|
- name: adventure-journal
|
||||||
|
persistentVolumeClaim:
|
||||||
|
claimName: adventure-journal-pvc
|
||||||
|
- name: adventure-journal-db
|
||||||
|
persistentVolumeClaim:
|
||||||
|
claimName: adventure-journal-db-pvc
|
||||||
|
containers:
|
||||||
|
- name: adventure-frontend
|
||||||
|
image: ghcr.io/seanmorley15/adventurelog-frontend:latest
|
||||||
|
imagePullPolicy: IfNotPresent
|
||||||
|
ports:
|
||||||
|
- containerPort: 3000
|
||||||
|
env:
|
||||||
|
- name: PUBLIC_SERVER_URL
|
||||||
|
value: "http://internally-and-externally.reachable.io:80"
|
||||||
|
- name: ORIGIN
|
||||||
|
value: "http://url-typed-into-browser.io:80"
|
||||||
|
- name: BODY_SIZE_LIMIT
|
||||||
|
value: "Infinity"
|
||||||
|
|
||||||
|
- name: adventure-db
|
||||||
|
image: postgis/postgis:15-3.3
|
||||||
|
imagePullPolicy: IfNotPresent
|
||||||
|
ports:
|
||||||
|
- containerPort: 5432
|
||||||
|
volumeMounts:
|
||||||
|
- name: adventure-journal-db
|
||||||
|
mountPath: /var/lib/postgresql/data
|
||||||
|
env:
|
||||||
|
- name: POSTGRES_DB
|
||||||
|
value: database
|
||||||
|
- name: PGDATA
|
||||||
|
value: /var/lib/postgresql/data/pgdata/subdir
|
||||||
|
- name: POSTGRES_USER
|
||||||
|
value: adventure
|
||||||
|
- name: POSTGRES_PASSWORD
|
||||||
|
valueFrom:
|
||||||
|
secretKeyRef:
|
||||||
|
name: adventurelog-secret
|
||||||
|
key: adventure-postgres-password
|
||||||
|
|
||||||
|
- name: adventure-backend
|
||||||
|
image: ghcr.io/seanmorley15/adventurelog-backend:latest
|
||||||
|
imagePullPolicy: IfNotPresent
|
||||||
|
ports:
|
||||||
|
- containerPort: 80
|
||||||
|
- containerPort: 8000
|
||||||
|
volumeMounts:
|
||||||
|
- name: adventure-journal
|
||||||
|
mountPath: /code/media
|
||||||
|
env:
|
||||||
|
- name: PGHOST
|
||||||
|
value: "adventure-db-svc"
|
||||||
|
- name: PGDATABASE
|
||||||
|
value: "database"
|
||||||
|
- name: PGUSER
|
||||||
|
value: "adventure"
|
||||||
|
- name: PGPASSWORD
|
||||||
|
valueFrom:
|
||||||
|
secretKeyRef:
|
||||||
|
name: adventurelog-secret
|
||||||
|
key: adventure-postgres-password
|
||||||
|
- name: SECRET_KEY
|
||||||
|
valueFrom:
|
||||||
|
secretKeyRef:
|
||||||
|
name: adventurelog-secret
|
||||||
|
key: adventure-postgres-password
|
||||||
|
- name: PUBLIC_URL
|
||||||
|
value: "http://internally-and-externally.reachable.io:80" # Match the outward port, used for the creation of image urls
|
||||||
|
- name: FRONTEND_URL
|
||||||
|
value: "http://url-typed-into-browser.io:80"
|
||||||
|
- name: CSRF_TRUSTED_ORIGINS
|
||||||
|
value: "http://url-typed-into-browser.io:80, http://internally-and-externally.reachable.io:80"
|
||||||
|
- name: DJANGO_ADMIN_USERNAME
|
||||||
|
value: "admin"
|
||||||
|
- name: DJANGO_ADMIN_PASSWORD
|
||||||
|
value: "admin"
|
||||||
|
- name: DJANGO_ADMIN_EMAIL
|
||||||
|
value: "admin@example.com"
|
||||||
|
- name: DEBUG
|
||||||
|
value: "True"
|
||||||
|
restartPolicy: Always
|
||||||
|
---
|
||||||
|
apiVersion: v1
|
||||||
|
kind: Service
|
||||||
|
metadata:
|
||||||
|
name: adventure-db-svc
|
||||||
|
spec:
|
||||||
|
selector:
|
||||||
|
app: adventure
|
||||||
|
ports:
|
||||||
|
- name: db
|
||||||
|
protocol: TCP
|
||||||
|
port: 5432
|
||||||
|
targetPort: 5432
|
||||||
|
---
|
||||||
|
apiVersion: v1
|
||||||
|
kind: Service
|
||||||
|
metadata:
|
||||||
|
name: server
|
||||||
|
spec:
|
||||||
|
selector:
|
||||||
|
app: adventure
|
||||||
|
ports:
|
||||||
|
- name: http
|
||||||
|
protocol: TCP
|
||||||
|
port: 80
|
||||||
|
targetPort: 80
|
||||||
|
- name: base
|
||||||
|
protocol: TCP
|
||||||
|
port: 8000
|
||||||
|
targetPort: 8000
|
||||||
|
---
|
||||||
|
# If you aren't automatically provisioning PVCs (i.e. with Longhorn, you'll need to also create the PV's)
|
||||||
|
apiVersion: v1
|
||||||
|
kind: PersistentVolumeClaim
|
||||||
|
metadata:
|
||||||
|
name: adventure-journal-pvc
|
||||||
|
spec:
|
||||||
|
accessModes:
|
||||||
|
- ReadWriteOnce
|
||||||
|
resources:
|
||||||
|
requests:
|
||||||
|
storage: 10Gi
|
||||||
|
---
|
||||||
|
apiVersion: v1
|
||||||
|
kind: PersistentVolumeClaim
|
||||||
|
metadata:
|
||||||
|
name: adventure-journal-db-pvc
|
||||||
|
spec:
|
||||||
|
accessModes:
|
||||||
|
- ReadWriteOnce
|
||||||
|
resources:
|
||||||
|
requests:
|
||||||
|
storage: 10Gi
|
Loading…
Add table
Add a link
Reference in a new issue