New website suggestion. Testing only.
Go to file
Rodolphe Breard a397d766a0 Fix the NSFW setting
In the user settings, the temporary NSFW allowance was not detected.
This was due to use of a database lookup instead of the correct
function.
2018-11-09 20:09:04 +03:00
khaganat Moving the static files config to the specific app 2018-06-11 12:55:17 +02:00
logs Enforce coding style 2018-11-08 20:11:14 +01:00
navbar Add the possibility for users to change their own password 2018-11-08 14:18:24 +01:00
neluser Fix the NSFW setting 2018-11-09 20:09:04 +03:00
nsfw Stop using a hard-coded value for the NSFW cookie 2018-11-09 20:04:33 +03:00
pages Enforce coding style 2018-11-08 20:11:14 +01:00
static_extra Moving the static files config to the specific app 2018-06-11 12:55:17 +02:00
.gitignore Untrack the Pipfile.lock 2018-05-28 00:26:46 +02:00
LICENSE.txt Add the AGPL license 2018-01-26 21:49:00 +01:00
manage.py first commit 2018-01-13 12:29:33 +01:00
Pipfile Migrate to Bulma 2018-06-03 22:16:40 +02:00
README.md Update the README 2018-11-07 17:02:15 +01:00
utils.py Migrate to Bulma 2018-06-03 22:16:40 +02:00

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 using openssl rand -base64 42).
  • KHAGANAT_DEBUG: Debug mode, default is false.
  • KHAGANAT_HOSTNAMES: Allowed hostnames, coma separated.
  • KHAGANAT_LANGUAGE_CODE: Language code, default is fr.
  • KHAGANAT_TIME_ZONE: Time zone, default is Europe/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 is index.
  • KHAGANAT_REGISTER_REQUIRE_VALIDATION: require email validation upon registration, default is true.
  • KHAGANAT_EMAIL_HOST: The host to use for sending email, default is localhost.
  • KHAGANAT_EMAIL_PORT: Port to use for the SMTP server, default is 25.
  • 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 is False.
  • KHAGANAT_EMAIL_USE_TLS: Whether to use a TLS connection to the SMTP server, default is False.
  • KHAGANAT_EMAIL_SUBJECT_PREFIX: Subject-line prefix for email, default is empty.
  • KHAGANAT_DEFAULT_FROM_EMAIL: Default email address to use, default is no-reply@localhost.
  • KHAGANAT_FORCE_HTTPS: If True, enable the use of KHAGANAT_HTTPS_HEADER_NAME and KHAGANAT_HTTPS_HEADER_VALUE to set the SECURE_PROXY_SSL_HEADER configuration option. Default is False.
  • KHAGANAT_HTTPS_HEADER_NAME: Header name for SECURE_PROXY_SSL_HEADER, default is HTTP_X_FORWARDED_PROTO.
  • KHAGANAT_HTTPS_HEADER_VALUE: Header value for SECURE_PROXY_SSL_HEADER, default is https.
  • 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 is nsfw_allowed.

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.