1
0
mirror of https://codeberg.org/diginaut/digimarks.git synced 2026-03-22 00:00:48 +01:00

5 Commits

Author SHA1 Message Date
99d2011e65 Favicon config 2026-02-11 16:11:30 +01:00
bade114b40 Fixed some links 2026-02-11 16:07:28 +01:00
8558b518f8 Example nginx configuration 2026-02-11 15:59:47 +01:00
9524fec672 Updated example configuration files 2026-02-11 15:59:10 +01:00
157303aba2 Disable Alpine.js clipboard for now 2026-02-11 15:50:48 +01:00
8 changed files with 116 additions and 69 deletions

View File

@@ -89,7 +89,7 @@ Url's are of the form `https://hook.example.com/app/<appkey>/<triggerkey>`
API documentation is auto-generated, and can be browsed at https://hook.example.com/docs
### Bookmarklet
## 🧩 Bookmarklet
To easily save a link from your browser, open its bookmark manager and create a new bookmark with as url:
@@ -115,14 +115,14 @@ If you for whatever reason would lose this user key, just either look on the con
## 🔧 Server configuration
- [systemd for digimarks API](https://codeberg.org/diginaut/digimarks/blob/master/example_config/systemd/digimarks.service) which uses the [gunicorn config](https://codeberg.org/diginaut/digimarks/src/branch/master/example_config/uwsgi.ini)
- [nginx for digimarks API]()
- [more config](https://codeberg.org/diginaut/digimarks/src/branch/master/example_config)
- [systemd for digimarks API](https://codeberg.org/diginaut/digimarks/src/branch/fastapi/example_config/systemd/digimarks.service) which uses the [gunicorn config](https://codeberg.org/diginaut/digimarks/src/branch/fastapi/example_config/gunicorn_digimarks_conf.py)
- [nginx for digimarks API](https://codeberg.org/diginaut/digimarks/src/branch/fastapi/example_config/nginx_digimarks.conf)
- [more config](https://codeberg.org/diginaut/digimarks/src/branch/fastapi/example_config)
## ✨ What's new?
See the [Changelog](https://codeberg.org/diginaut/digimarks/blob/master/CHANGELOG.md)
See the [Changelog](https://codeberg.org/diginaut/digimarks/src/branch/fastapi/CHANGELOG.md)
## 🙏 Attributions

View File

@@ -1,29 +0,0 @@
<VirtualHost *:80>
ServerAdmin webmaster@example.com
ServerName marks.example.com
WSGIDaemonProcess digimarks user=youruser group=youruser threads=5 python-path=/srv/marks.example.com/digimarks/
WSGIScriptAlias / /srv/marks.example.com/digimarks/wsgi.py
<Directory /srv/marks.example.com/digimarks>
WSGIProcessGroup digimarks
WSGIApplicationGroup %{GLOBAL}
Require all granted
</Directory>
<Directory /srv/marks.example.com/digimarks>
<Files wsgi.py>
Require all granted
</Files>
</Directory>
ErrorLog /var/log/apache2/error_marks.example.com.log
# Possible values include: debug, info, notice, warn, error, crit,
# alert, emerg.
LogLevel warn
CustomLog /var/log/apache2/access_marks.example.com.log combined
ServerSignature On
</VirtualHost>

View File

@@ -0,0 +1,14 @@
# gunicorn_conf.py
from multiprocessing import cpu_count
bind = "127.0.0.1:8890"
# Worker Options
#workers = cpu_count() + 1
workers = 1
worker_class = 'uvicorn.workers.UvicornWorker'
# Logging Options
loglevel = 'debug'
accesslog = '/var/log/digimarks/access_log'
errorlog = '/var/log/digimarks/error_log'

View File

@@ -0,0 +1,73 @@
server {
server_name marks.example.org;
listen [::]:443 ssl; # managed by Certbot
listen 443 ssl; # managed by Certbot
real_ip_header X-Forwarded-For;
access_log /var/log/nginx/access_marks.example.org.log;
error_log /var/log/nginx/error_marks.example.org.log warn;
# Media: images, icons, video, audio, HTC
#location ~* \.(?:jpg|jpeg|gif|png|ico|cur|gz|svg|svgz|mp4|mp3|ogg|ogv|webm|htc|woff2|woff)$ {
# expires 1M;
# access_log off;
# # max-age must be in seconds
# add_header Cache-Control "max-age=2629746, public";
#}
# CSS and Javascript
#location ~* \.(?:css|js)$ {
# expires 1M;
# access_log off;
# add_header Cache-Control "max-age=31556952, public";
#}
location / {
proxy_pass http://127.0.0.1:8890;
proxy_read_timeout 60;
proxy_connect_timeout 60;
proxy_redirect off;
# Allow the use of websockets
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection 'upgrade';
proxy_set_header Host $host;
proxy_cache_bypass $http_upgrade;
}
location /content/favicons/ {
alias /srv/www/marks.example.org/favicons/;
# This can certainly be cached, so do so for a month
expires 1M;
add_header Cache-Control "public";
}
location /static/ {
alias /srv/www/marks.example.org/digimarks/src/digimarks/static/;
# This can certainly be cached, so do so for a month
#expires 1M;
#add_header Cache-Control "public";
}
location /favicon.ico {
# Favicon for the webapp, shown in the browser
alias /srv/www/marks.example.org/digimarks/src/digimarks/static/favicon.ico;
}
ssl_certificate /etc/letsencrypt/live/marks.example.org/fullchain.pem; # managed by Certbot
ssl_certificate_key /etc/letsencrypt/live/marks.example.org/privkey.pem; # managed by Certbot
include /etc/letsencrypt/options-ssl-nginx.conf; # managed by Certbot
ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; # managed by Certbot
}
server {
if ($host = marks.example.org) {
return 301 https://$host$request_uri;
} # managed by Certbot
listen [::]:80 ;
listen 80;
server_name marks.example.org;
return 404; # managed by Certbot
}

View File

@@ -1,20 +0,0 @@
# Virtualenv to use with the wsgi file (optional)
VENV = '/srv/marks.example.com/venv/bin/activate_this.py'
PORT = 8086
DEBUG = False
# Password/url key to do admin stuff with, like adding a user
# NB: change this to something else! For example, in bash:
# echo -n "yourstring" | sha1sum
SYSTEMKEY = 'S3kr1t'
# RapidAPI key for favicons
# https://rapidapi.com/realfavicongenerator/api/realfavicongenerator
MASHAPE_API_KEY = 'your_MASHAPE_key'
LOG_LOCATION = 'digimarks.log'
#LOG_LOCATION = '/var/log/digimarks/digimarks.log'
# How many logs to keep in log rotation:
LOG_BACKUP_COUNT = 10

View File

@@ -0,0 +1,22 @@
[Unit]
Description=Gunicorn Daemon for digimarks FastAPI
After=network.target
[Service]
User=YOUR_USER
Group=YOUR_USER
WorkingDirectory=/srv/www/marks.example.org/digimarks/src
Environment="SYSTEM_KEY=RanDomSeCretKeyFoRAdmin"
Environment="FAVICONS_DIR=/srv/www/marks.example.org/favicons"
Environment="DATABASE_FILE=/srv/www/marks.example.org/bookmarks.db"
Environment="STATIC_DIR=digimarks/static"
Environment="TEMPLATE_DIR=digimarks/templates"
ExecStart=/srv/www/marks.example.org/venv/bin/gunicorn -c /srv/www/marks.example.org/gunicorn_digimarks_conf.py digimarks.main:app
StandardOutput=file:///var/log/digimarks/stdout.log
StandardError=file:///var/log/digimarks/stderr.log
[Install]
WantedBy=multi-user.target

View File

@@ -1,15 +0,0 @@
# Example supervisord configuration
# Run with /srv/venv/bin/uwsgi --ini /srv/digimarks/uwsgi.ini:digimarks
[digimarks]
chdir = /srv/digimarks
socket = /tmp/uwsgi_digimarks.sock
module = wsgi
threads = 4
master = true
processes = 5
vacuum = true
no-orphans = true
chmod-socket = 666
logger = main file:/var/log/webapps/digimarks.log
logger = file:/var/log/webapps/digimarks_debug.log

View File

@@ -13,8 +13,10 @@
<link rel="icon" type="image/png" sizes="16x16" href="/static/images/favicon-16x16.png">
<link rel="manifest" href="/static/images/site.webmanifest">
<script src="https://cdn.jsdelivr.net/npm/@alpinejs/persist@3.x.x/dist/cdn.min.js"></script>
{#-
<script src="https://cdn.jsdelivr.net/npm/@ryangjchandler/alpine-clipboard@2.x.x/dist/alpine-clipboard.js"
defer></script>
#}
<script defer src="https://cdn.jsdelivr.net/npm/alpinejs@3.x.x/dist/cdn.min.js"></script>
</head>
<body>