wger: added redis, cache/compressed/combined, nginx serves static

This commit is contained in:
eyjhb 2024-12-05 17:02:18 +01:00
parent 97f9561631
commit e7af4737c1
No known key found for this signature in database
GPG key ID: 609F508E3239F920
2 changed files with 53 additions and 6 deletions

View file

@ -22,7 +22,7 @@ let
# to create a CACHE folder/file in the CWD. # to create a CACHE folder/file in the CWD.
# and if I fix that, then static content no # and if I fix that, then static content no
# longer wants to load. # longer wants to load.
DEBUG = true; DEBUG = false;
DATABASES.default = { DATABASES.default = {
ENGINE = "django.db.backends.postgresql"; ENGINE = "django.db.backends.postgresql";
NAME = "wger"; NAME = "wger";
@ -43,7 +43,6 @@ let
MEDIA_ROOT = "${statedir}/media"; MEDIA_ROOT = "${statedir}/media";
MEDIA_URL = "/media/"; MEDIA_URL = "/media/";
# EMAIL # EMAIL
EMAIL_BACKEND = "django.core.mail.backends.smtp.EmailBackend"; EMAIL_BACKEND = "django.core.mail.backends.smtp.EmailBackend";
EMAIL_HOST = config.mine.shared.settings.mail.domain_smtp; EMAIL_HOST = config.mine.shared.settings.mail.domain_smtp;
@ -54,6 +53,12 @@ let
EMAIL_FROM_ADDRESS = wger_settings.EMAIL_FROM; EMAIL_FROM_ADDRESS = wger_settings.EMAIL_FROM;
EMAIL_PAGE_DOMAIN = SITE_URL; EMAIL_PAGE_DOMAIN = SITE_URL;
# Cache - Redis
DJANGO_CACHE_BACKEND = "django_redis.cache.RedisCache";
DJANGO_CACHE_LOCATION = "${config.services.redis.servers.wger.unixSocket}";
DJANGO_CACHE_TIMEOUT = 1296000; # in seconds - 60*60*24*15, 15 Days
DJANGO_CACHE_CLIENT_CLASS = "django_redis.client.DefaultClient";
# setup allowed hosts # setup allowed hosts
CSRF_TRUSTED_ORIGINS = [ "https://${svc_domain}" ]; CSRF_TRUSTED_ORIGINS = [ "https://${svc_domain}" ];
ALLOWED_HOSTS = [ svc_domain ]; ALLOWED_HOSTS = [ svc_domain ];
@ -62,6 +67,11 @@ let
RECAPTCHA_PUBLIC_KEY = ""; RECAPTCHA_PUBLIC_KEY = "";
RECAPTCHA_PRIVATE_KEY = ""; RECAPTCHA_PRIVATE_KEY = "";
USE_RECAPTCHA = false; USE_RECAPTCHA = false;
# does not work
STATIC_ROOT = "${wgerpkgs}/share/static";
COMPRESS_ROOT = STATIC_ROOT;
COMPRESS_OFFLINE = true;
}; };
wger_settings_file = pkgs.writeText "settings.json" (builtins.toJSON wger_settings); wger_settings_file = pkgs.writeText "settings.json" (builtins.toJSON wger_settings);
@ -105,9 +115,10 @@ in {
serviceConfig = { serviceConfig = {
EnvironmentFile = config.age.secrets.wger-env.path; EnvironmentFile = config.age.secrets.wger-env.path;
# ensure it does not try to create `/CACHE` Restart = "on-failure";
RestartSec = "5s";
PrivateTmp = "yes"; PrivateTmp = "yes";
WorkingDirectory = "/tmp";
User = "wger"; User = "wger";
Group = "wger"; Group = "wger";
@ -149,6 +160,11 @@ in {
}]; }];
}; };
# setup redis
services.redis.servers.wger = {
enable = true;
user = wger_user;
};
# setup users # setup users
users.users."${wger_user}"= { users.users."${wger_user}"= {
@ -170,7 +186,8 @@ in {
proxyPass = "http://localhost:${builtins.toString port}"; proxyPass = "http://localhost:${builtins.toString port}";
}; };
locations."/static".proxyPass = "http://localhost:${builtins.toString port}"; # locations."/static".proxyPass = "http://localhost:${builtins.toString port}";
locations."/static".root = "${wgerpkgs}/share";
locations."/media".proxyPass = "http://localhost:${builtins.toString port}"; locations."/media".proxyPass = "http://localhost:${builtins.toString port}";
locations."/api".proxyPass = "http://localhost:${builtins.toString port}"; locations."/api".proxyPass = "http://localhost:${builtins.toString port}";
}; };

View file

@ -3,6 +3,7 @@
python3, python3,
fetchFromGitHub, fetchFromGitHub,
callPackage, callPackage,
writeText,
}: }:
let let
@ -79,8 +80,37 @@ in python3.pkgs.buildPythonApplication rec {
cp manage.py wger/manage.py cp manage.py wger/manage.py
''; '';
# fixup compressed files
postBuild = let
staticSettings = writeText "static_settings.py" ''
DEBUG = False
STATIC_ROOT = os.environ["static"]
COMPRESS_OFFLINE = True
# So we don't need postgres dependencies
DATABASES = {}
'';
in ''
# copy over static yarn things
# cp -a ${frontend}/static/yarn $out/${python3.sitePackages}/wger/core/static
cp -a ${frontend}/static/yarn wger/core/static
python3 -m wger.tasks create-settings -s $PWD/tmp_settings.py
cat ${staticSettings} >> $PWD/tmp_settings.py
mkdir tmpstatic
pushd tmpstatic
static=. WGER_SETTINGS=../tmp_settings.py python3 ../manage.py collectstatic --no-input
static=. WGER_SETTINGS=../tmp_settings.py python3 ../manage.py compress --force
popd
'';
postInstall = '' postInstall = ''
cp -a ${frontend}/static/yarn $out/${python3.sitePackages}/wger/core/static rm -rf $out/${python3.sitePackages}/wger/core/static
cp -a tmpstatic $out/${python3.sitePackages}/wger/core/static
mkdir $out/share
cp -a $out/${python3.sitePackages}/wger/core/static $out/share
''; '';
pythonImportsCheck = [ pythonImportsCheck = [