mirror of
https://codeberg.org/diginaut/digimarks.git
synced 2026-03-22 07:30:49 +01:00
Compare commits
5 Commits
a961d90bda
...
fastapi
| Author | SHA1 | Date | |
|---|---|---|---|
| 99d2011e65 | |||
| bade114b40 | |||
| 8558b518f8 | |||
| 9524fec672 | |||
| 157303aba2 |
10
README.md
10
README.md
@@ -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
|
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:
|
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
|
## 🔧 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)
|
- [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]()
|
- [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/master/example_config)
|
- [more config](https://codeberg.org/diginaut/digimarks/src/branch/fastapi/example_config)
|
||||||
|
|
||||||
|
|
||||||
## ✨ What's new?
|
## ✨ 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
|
## 🙏 Attributions
|
||||||
|
|||||||
@@ -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>
|
|
||||||
14
example_config/gunicorn_digimarks_conf.py
Normal file
14
example_config/gunicorn_digimarks_conf.py
Normal 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'
|
||||||
73
example_config/nginx_digimarks.conf
Normal file
73
example_config/nginx_digimarks.conf
Normal 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
|
||||||
|
}
|
||||||
@@ -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
|
|
||||||
22
example_config/systemd/digimarks.service
Normal file
22
example_config/systemd/digimarks.service
Normal 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
|
||||||
@@ -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
|
|
||||||
@@ -13,8 +13,10 @@
|
|||||||
<link rel="icon" type="image/png" sizes="16x16" href="/static/images/favicon-16x16.png">
|
<link rel="icon" type="image/png" sizes="16x16" href="/static/images/favicon-16x16.png">
|
||||||
<link rel="manifest" href="/static/images/site.webmanifest">
|
<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/@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"
|
<script src="https://cdn.jsdelivr.net/npm/@ryangjchandler/alpine-clipboard@2.x.x/dist/alpine-clipboard.js"
|
||||||
defer></script>
|
defer></script>
|
||||||
|
#}
|
||||||
<script defer src="https://cdn.jsdelivr.net/npm/alpinejs@3.x.x/dist/cdn.min.js"></script>
|
<script defer src="https://cdn.jsdelivr.net/npm/alpinejs@3.x.x/dist/cdn.min.js"></script>
|
||||||
</head>
|
</head>
|
||||||
<body>
|
<body>
|
||||||
|
|||||||
Reference in New Issue
Block a user