New website suggestion. Testing only.
Find a file
Rodolphe Breard 85eb1ff03e Refactor the page edition
Markdown has been removed, pages are now directly edited in HTML. To
ease that process, TinyMCE has been added. Also, the admin dashboard now
provides a file management tool in order to upload stuff.
2020-02-28 13:53:57 +01:00
chat Update the metadat for ko and ru locale files 2019-09-21 12:41:38 +02:00
khaganat Refactor the page edition 2020-02-28 13:53:57 +01:00
navbar Fix code indentation 2020-02-19 14:07:59 +01:00
neluser Update the metadat for ko and ru locale files 2019-09-21 12:41:38 +02:00
nsfw Update the metadat for ko and ru locale files 2019-09-21 12:41:38 +02:00
pages Refactor the page edition 2020-02-28 13:53:57 +01:00
pwdb Update the metadat for ko and ru locale files 2019-09-21 12:41:38 +02:00
static_extra Update style.sass (ajout des tiles coins droites hors khanat) 2020-02-17 11:14:51 +01:00
.gitignore Refactor the page edition 2020-02-28 13:53:57 +01:00
.gitlab-ci.yml Ajout de .gitlab-ci.yml pour build CSS 2019-07-31 16:58:13 +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 Refactor the page edition 2020-02-28 13:53:57 +01:00
README.md Use Django's internal secret key generation 2019-07-27 19:25:11 +02: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

Code formatting

In order to have a single Python coding style, please use black. However, auto-generated files and parts of external projects should not be reformatted.

$ black $(find . -type f -name "*\.py" -not -path "*/migrations/*" -not -path "./static_extra/bulma/*" -print)

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

In order to display the Khaganat theme, you have to install bulma and build it :

$ pipenv run ./manage.py bulma install
$ pipenv run ./manage.py bulma build

Now that everything has been set-up, 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 go 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 pipenv run python -c 'from django.core.management.utils import get_random_secret_key; print(get_random_secret_key())').
  • 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.
  • KHAGANAT_INTERNAL_IPS: List of IP considered as internal, coma separated, default is 127.0.0.1,::1.
  • KHAGANAT_XMPP_BOSH_URL: URL of the BOSH server used to contact the XMPP server. Default is empty.
  • KHAGANAT_XMPP_JID: The JID to use for the XMPP session. Default is empty.
  • KHAGANAT_XMPP_ROOMS: List of rooms to automatically join when connecting. Default is empty.
  • KHAGANAT_XMPP_WEBSOCKET_URL: URL of the websocket server used to contact the XMPP server. Default is empty.

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@.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.