New website suggestion. Testing only.
Find a file
2019-07-23 00:37:30 +02:00
khaganat Remove font-awesome 2019-07-23 00:30:08 +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 Set a minimalist theme 2019-01-27 13:27:51 +01: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 Remove the computed styles 2019-07-23 00:35:47 +02:00
.gitignore Prevent the Bulma computed style files to be tracked 2019-07-23 00:37:30 +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 Fix a typo in the README 2019-01-26 21:11:20 +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.
  • KHAGANAT_INTERNAL_IPS: List of IP considered as internal, coma separated, default is 127.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@.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.