1d039d2aae
When working with Sass, the watch mode does not build the minified CSS file. Hence, it is useful to use the normal one in development (debug mode activated) and keep the minified one for production only (debug mode deactivated). |
||
---|---|---|
khaganat | ||
logs | ||
navbar | ||
neluser | ||
nsfw | ||
pages | ||
static_extra | ||
.gitignore | ||
LICENSE.txt | ||
manage.py | ||
Pipfile | ||
README.md | ||
utils.py |
Khaganat's web site
Requirements
- Python 3.6 or newer
- pipenv
- git
- gettext
Quick-start (development)
git clone https://git.khaganat.net/Tycho/khaganat-web.git khaganat-web
cd khaganat-web
vim .env
PIPENV_VENV_IN_PROJECT=1 pipenv --three update
pipenv run ./manage.py compilemessages
When editing the .env
file, you should at least set KHAGANAT_SECRET_KEY
to a random value, KHAGANAT_DEBUG
to "True"
and KHAGANAT_HOSTNAMES
to "localhost"
.
To run this web application, you need a database. The simplest way is to download the one from the test server (scp cipra.khaganat.net:/var/www/khaganat-web/db.sqlite3 db.sqlite3
). If you really want to start from scratch, you have to run the following commands:
pipenv run ./manage.py migrate
pipenv run ./manage.py createsuperuser
Now that the database has been set up one way or another, you may run Django's internal debug server.
pipenv run ./manage.py runserver
If you created the database from scratch, Django will show an error when visiting the home page. To fix it, you need to got to /admin/
and create a page with the default
flag on.
Environment variables
You can set the following variables in the .env
file:
KHAGANAT_SECRET_KEY
(required): Django's secret key, keep it secret (tip: generate one usingopenssl rand -base64 42
).KHAGANAT_DEBUG
: Debug mode, default is false.KHAGANAT_HOSTNAMES
: Allowed hostnames, coma separated.KHAGANAT_LANGUAGE_CODE
: Language code, default isfr
.KHAGANAT_TIME_ZONE
: Time zone, default isEurope/Paris
.KHAGANAT_STATIC_URL
: URL for static files, default is/static/
.KHAGANAT_STATIC_ROOT
: Absolute path to the directory where static files should be collected.KHAGANAT_STATIC_DIRS
: CSV list of additional locations where static files may be found, default is empty.KHAGANAT_LOGS_MIN_DAYS
: Numbers of days before logs are hidden, default is 7.KHAGANAT_LOGS_MAX_DAYS
: Number of days before logs are published, default is 0.KHAGANAT_LOGIN_REDIRECT_URL
: URL to redirect after user login. Will be reversed, default isindex
.KHAGANAT_REGISTER_REQUIRE_VALIDATION
: require email validation upon registration, default is true.KHAGANAT_EMAIL_HOST
: The host to use for sending email, default islocalhost
.KHAGANAT_EMAIL_PORT
: Port to use for the SMTP server, default is25
.KHAGANAT_EMAIL_HOST_USER
: Username to use for the SMTP server, default is empty (no authentication).KHAGANAT_EMAIL_HOST_PASSWORD
: Password to use for the SMTP server, default is empty.KHAGANAT_EMAIL_USE_STARTTLS
: Whether to use STARTTLS to connect to the SMTP server, default isFalse
.KHAGANAT_EMAIL_USE_TLS
: Whether to use a TLS connection to the SMTP server, default isFalse
.KHAGANAT_EMAIL_SUBJECT_PREFIX
: Subject-line prefix for email, default is empty.KHAGANAT_DEFAULT_FROM_EMAIL
: Default email address to use, default isno-reply@localhost
.KHAGANAT_FORCE_HTTPS
: If True, enable the use ofKHAGANAT_HTTPS_HEADER_NAME
andKHAGANAT_HTTPS_HEADER_VALUE
to set theSECURE_PROXY_SSL_HEADER
configuration option. Default isFalse
.KHAGANAT_HTTPS_HEADER_NAME
: Header name forSECURE_PROXY_SSL_HEADER
, default isHTTP_X_FORWARDED_PROTO
.KHAGANAT_HTTPS_HEADER_VALUE
: Header value forSECURE_PROXY_SSL_HEADER
, default ishttps
.KHAGANAT_NSFW_TAGS
: Coma-separated list of words that triggers the content warning in logs, default is\#nsfw
.KHAGANAT_NSFW_NAME
: Name of the cookie holding the NSFW allowance, default isnsfw_allowed
.KHAGANAT_INTERNAL_IPS
: List of IP considered as internal, coma separated, default is127.0.0.1,::1
.
Quick update
cd khaganat-web
git pull
pipenv --three update
pipenv run ./manage.py migrate
pipenv run ./manage.py compilemessages
If you are not in a development environment (runserver), you also have to run pipenv run ./manage.py collectstatic --clear --noinput
and may have to restart the WSGI server.
Nginx + uWSGI on ArchLinux
Before deploying, you may read the following guides:
Install nginx-mainline
, uwsgi
and uwsgi-plugin-python
.
# mkdir -p /srv/http/khaganat/static
# cd /srv/http/khaganat
# git clone https://git.khaganat.net/Tycho/khaganat-web.git app
# cd app
# PIPENV_VENV_IN_PROJECT=1 pipenv --three update
Create /etc/uwsgi/khaganat.ini
with the appropriate environment variables:
[uwsgi]
chdir = /srv/http/khaganat/app
home = /srv/http/khaganat/app/.venv
module = khaganat.wsgi:application
plugins = python
socket = /srv/http/khaganat/uwsgi.sock
uid = http
gid = http
threads = 2
vacuum = True
env = KHAGANAT_SECRET_KEY="generate a new one"
env = KHAGANAT_DEBUG=False
env = KHAGANAT_STATIC_ROOT=/srv/http/khaganat/static
env = KHAGANAT_HOSTNAMES=khaganat.local
Create /etc/systemd/system/multi-user.target.wants/uwsgi@khaganat.service
:
[Unit]
Description=uWSGI service unit
After=syslog.target
[Service]
ExecStart=/usr/bin/uwsgi --ini /etc/uwsgi/%I.ini
ExecReload=/bin/kill -HUP $MAINPID
ExecStop=/bin/kill -INT $MAINPID
Restart=always
Type=notify
StandardError=syslog
NotifyAccess=all
KillSignal=SIGQUIT
[Install]
WantedBy=multi-user.target
Configure nginx :
server {
listen 80;
listen [::]:80;
server_name "khaganat.local";
include custom/headers.conf;
location /static {
root /srv/http/khaganat/;
}
location / {
uwsgi_pass unix:///srv/http/khaganat/uwsgi.sock;
include uwsgi_params;
}
}
Finish the installation:
# cd /srv/http/khaganat/app
# pipenv run ./manage.py migrate
# pipenv run ./manage.py collectstatic --clear --noinput
# pipenv run ./manage.py compilemessages
# pipenv run ./manage.py createsuperuser
# chown -R http:http /srv/http/khaganat/
# systemctl enable uwsgi@khaganat.service
# systemctl start uwsgi@khaganat.service
# systemctl enable nginx.service
# systemctl start nginx.service
Do not forget to check the deployment checklist.