Skip to content

Instrukcja instalacji

Krzysztof Gutkowski edited this page Apr 12, 2023 · 1 revision

Pobranie repozytorium

# git clone https://github.com/LiquidPL/docker-sio2.git
# cd docker-sio2
# cp .env.example .env
# cp .oioioi.env.example .env

Konfiguracja zmiennych środowiskowych

Zmienne środowiskowe konfigurujące aplikację znajdują się we wcześniej utworzonych plikach .env oraz .oioioi.env. Większość ważnych zmiennych które należy ustawić jest opisana w pliku.

Generowanie losowego hasła

Hasło/inny losowy ciąg znaków można łatwo wygenerować w interpreterze Pythona

# python
Python 3.10.10 (main, Mar  5 2023, 22:26:53) [GCC 12.2.1 20230201] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import secrets
>>> secrets.token_hex(32) # wygenerowany ciąg znaków będzie miał 2*32 znaków
'015be4387b88d563072310afdef135576bba787a8b3e88bccd2161d2a5eff3ed'

Zmienne które są niezbędne do działania aplikacji:

  • hasła do bazy danych (POSTGRES_PASSWORD, DATABASE_PASSWORD) - pierwsze z nich to hasło do administratora serwera bazodanowego, drugie - do właściwego użytkownika posiadającego bazę danych SIO.
  • adresy z których można otworzyć stronę (ALLOWED_HOSTS) - jeśli ktoś spróbuje dostać się do strony z adresu innego niż podany w tej zmiennej, serwer odrzuci połączenie. Można ustawić więcej niż jeden adres, rozdzielone spacjami.
  • tajny klucz (SECRET_KEY) - niezbędny do bezpiecznego przechowywania haseł i innych wrażliwych danych. Musi być ustawiony na długi ciąg losowo wygenerowanych znaków (>=50 znaków).

W pliku .oioioi.env, pod zmienną VIRTUAL_HOST należy ustawić listę domen pod którymi będzie dostępna aplikacja (tę samą, co w ALLOWED_HOSTS w pliku .env), tym razem rozdzielone przecinkami zamiast spacjami

VIRTUAL_HOST=localhost,sio2.example # przykładowe wartości

Konfiguracja certyfikatów HTTPS/SSL

Jeżeli aplikacja będzie uruchomiona pod adresem publicznie dostępnym w internecie, można skonfigurować dla niej certyfikat HTTPS. Zostanie to zrobione automatycznie, w ciągu kilku minut od uruchomienia kontenerów, pod warunkiem że domeny w zmiennych środowiskowych ALLOWED_HOSTS oraz VIRTUAL_HOST są poprawnie skonfigurowane.

Jeśli aplikacja jest uruchomiona tylko w sieci lokalnej, pobieranie certyfikatów należy wyłączyć, komentując sekcję letsencrypt w pliku docker-compose.yml:

...
  # letsencrypt:
  #   image: nginxproxy/acme-companion
  #   container_name: sio2-letsencrypt
  #   volumes:
  #     - ./nginx/certs:/etc/nginx/certs
  #     - ./docker-gen/vhost.d:/etc/nginx/vhost.d
  #     - /var/run/docker.sock:/var/run/docker.sock:ro
  #     - nginx-html:/usr/share/nginx/html
  #     - acme:/etc/acme.sh
  #   environment:
  #     - "DEFAULT_EMAIL=${LETSENCRYPT_EMAIL}"
  #     - "NGINX_DOCKER_GEN_CONTAINER=sio2-docker-gen"
  #     - "NGINX_PROXY_CONTAINER=sio2-nginx"
  #   restart: on-failure
  #   depends_on:
  #     - docker-gen
...

Uruchomienie aplikacji

Aplikację uruchamiamy poleceniem (z folderu `docker-sio2):

# docker compose up

Pierwsze uruchomienie potrwa dłużej niż zwykle, ponieważ tworzone zostają tabele w bazie danych. W terminalu widoczne są logi wszystkich kontenerów. Aplikacje można zatrzymać wciskając kombinację klawiszy Ctrl+C.

Aplikację można też uruchomić w trybie "cichym" tzn. bez wyświetlania logów w terminalu:

# docker compose up -d

W tym przypadku po uruchomieniu wszystkich kontenerów kontrola zostanie zwrócona do terminala i będzie można wydawać inne polecenia. Aplikację można zatrzymać poleceniem:

# docker compose down

Niezależnie od sposobu uruchomienia, aplikacja jest skonfigurowana tak, że automatycznie uruchomi się ponownie np. po ponownym uruchomieniu systemu po zaniku prądu, pod warunkiem że przedtem była uruchomiona.

Utworzenie konta administratora

Aby utworzyć konto administratora, musimy mieć dostęp do wiersza poleceń w kontenerze aplikacji. Z folderu docker-sio2 wykonujemy polecenie:

# docker compose exec oioioi bash
# cd /sio2/deployment
#

Teraz można wykonać polecenie dodające konto administratora:

# ./manage.py createsuperuser
Username (leave blank to use 'oioioi'): admin
Email address: [email protected]
Password: 
Password (again): 
Superuser created successfully.
#

Konto administratora zostało utworzone, i można się na nie zalogować wchodząc pod wcześniej skonfigurowany adres aplikacji.