Installasjon

Her beskrives hvordan applikasjonen installeres under nginx med uwsgi som WSGI-server.

Oppgraderinger

Oppgraderinger gjøres slik:

sudo -u discourseconnect -i
cd /opt/discourseconnect/app
make deploy

Førstegangsinstallasjon

Opprett brukerkonto

Opprett en egen brukerkonto for discourseconnect:

addgroup --system discourseconnect
adduser --system --home /opt/discourseconnect --shell /bin/bash \
        --gecos "WSGI-brukerkonto for Discourse SSO" --disabled-password \
        --ingroup discourseconnect discourseconnect

Generer SSH-nøkler

Generer SSH-nøkler for denne brukerkontoen:

sudo -u discourseconnect ssh-keygen -C discourseconnect@$(hostname)

Denne nøkkelen må gis tilgang til discourseconnect-repoet: Dette gjøres på GitHub, under Deploy keys.

Opprett applikasjonskatalog

Opprett applikasjonskatalog og gjør denne skrivbar for discourseconnect-brukerkontoen:

mkdir /opt/discourseconnect
chown discourseconnect:discourseconnect /opt/discourseconnect

Opprett kataloger for dokumentasjon og statiske filer

Den automatisk genererte dokumentasjonen må ligge i en katalog som er åpen for webserveren:

mkdir /opt/discourseconnect/docs
chown discourseconnect:discourseconnect /opt/discourseconnect/docs
chmod a+rx /opt/discourseconnect/docs

Staticfiles må også ligge i en åpen katalog:

mkdir /opt/discourseconnect/static
chown discourseconnect:discourseconnect /opt/discourseconnect/docs
chmod a+rx /opt/discourseconnect/docs

Opprett katalog for logger

Loggene må ligge i en nedstengt katalog:

mkdir /opt/discourseconnect/logs
chown discourseconnect:discourseconnect /opt/discourseconnect/logs
chmod og= /opt/discourseconnect/logs

Sett opp utviklingsmiljø

Sett deretter opp et utviklingsmiljø som beskrevet i Sette opp utviklingsmiljø.

OBS OBS! VIKTIG: Husk å sette DEBUG=False, og å sette ny SECRET_KEY.

DiscourseConnect-brukerkontoen har ikke administratorrettigheter, så kommandoer som begynner med sudo må kjøres som root. De andre kommandoene kjøres som discourseconnect-brukeren.

Environmentvariablene bør settes automatisk ved innlogging.

Passende ~/.bash_profile:

test -f ~/.bashrc && source ~/.bashrc

Passende ~/.bashrc:

export PATH="$HOME/.local/bin:$PATH"

Last ned kildekoden

Klone repositoriet til ønsket sted (her /opt/discourseconnect), og pass på at .venv-katalogen finnes før pipenv kjøres:

git clone git@github.com:imfdrift/discourseconnect /opt/discourseconnect/app
cd /opt/discourseconnect/app
mkdir .venv
pipenv sync

Hvis .venv-katalogen mangler, vil pipenv opprette python-miljøet under ~/.local/share/virtualenvs/, med et uforutsigbart navn.

Vi trenger å vite fullstendig sti til python-miljøet (denne må angis i uwsgi.ini), og ønsker derfor at python-miljøet havner i /opt/discourseconnect/app/.venv/.

Opprett databasestruktur

Aktiver python-miljøet og initialiser databasen:

cd /opt/discourseconnect/app
pipenv shell
cd src
./manage.py migrate
./manage.py createsuperuser
exit

Gjør førstegangs deploy

Generer staticfiles og dokumentasjon:

cd /opt/discourseconnect/app
make collectstatic docs

Installer systemd-tjeneste

Systemd-tjenesten installeres som root:

cp /opt/discourseconnect/app/discourseconnect.service /etc/systemd/system/
systemctl enable discourseconnect
systemctl start discourseconnect

For at discourseconnect-brukeren skal kunne restarte tjenesten legger vi inn en /etc/sudoers.d/discourseconnect med innhold:

discourseconnect ALL=(root) NOPASSWD: /bin/systemctl restart discourseconnect
discourseconnect ALL=(root) NOPASSWD: /bin/systemctl reload discourseconnect
discourseconnect ALL=(root) NOPASSWD: /bin/systemctl status discourseconnect
discourseconnect ALL=(root) NOPASSWD: /bin/systemctl start discourseconnect
discourseconnect ALL=(root) NOPASSWD: /bin/systemctl stop discourseconnect

Konfigurer nginx

Oppsett av nginx er utenfor omfanget av denne artikkelen, men relevant del av konfigurasjon er:

location / {
        include uwsgi_params;
        uwsgi_pass unix:/tmp/discourseconnect.sock;
}

location /docs {
        alias /opt/discourseconnect/docs/html/;
        autoindex off;
}

location /static {
        alias /opt/discourseconnect/static;
        autoindex off;
}

Konfigurer Feide-innlogging

Følg instruksjonene på Feide-innlogging.

Logg deretter inn en gang med din personlige Feide-brukerkonto.

Etterpå kan du logge inn igjen som superbrukeren (som ble opprettet med manage.py createsuperuser) og tilordne administratorrettigheter til Feide-brukeren din. Når dette er gjort kan den lokale Django-superbrukeren slettes, slik at all administrasjon skjer via Feide-innloggede brukere.

Konfigurer Django site

Logg inn i admingrensesnittet i Django og gå til Sites -> Sites.

Erstatt eksisterende site localhost med maskinens hostnavn eller tjenestenavn (discourse-sso.math.ntnu.no).

Sette opp Single Sign-On for en Discourse-installasjon

Følg framgangsmåten beskrevet på Legge til nytt nettsted.