Přeskočit obsah

Základní instalace

Popis

Základní instalace PMC v dockeru.

Předpoklady

Pro úspěšnou instalaci je třeba mít přístup do repozitáře https://gitlab.greencenter.site/software/scrumware/pmc-docker a login do docker registry na https://nexus.greencenter.site

Dále je nutné mít k dispozici tyto balíky:

  • docker-compose
  • openssl
  • curl
  • jq
  • netcat
  • apache2
  • git

Pokud používáte self-signed certifikát pro http server, tak musí být uložen v adresáři crt a musí mít příponu .crt. Viz dále. Pokud chcete pro activemq využít jiný, než testovací certifikát, musí být do tohoto adresáře přidán taky. Zároveň musí být v adresáři activemq/conf/. Viz konfigurace activemq.

Použití

Info

Popis předpokládá, že instalace probíhá na Ubuntu. Pokud instalace probíhá na jiné distribuci, mohou se příkazy mírně lišit.

Script je rozdělen na dvě části (prepare.sh a init.sh). Ty musí být spuštěny ve správném pořadí. Níže je v bodech popsán postup instalace.

  1. Nainstalovat předpokládané balíky
    sudo apt install docker-compose docker.io openssl curl jq netcat apache2 git
    
  2. Naklonovat repozitář do adresáře /opt
    cd /opt
    git clone "https://gitlab.greencenter.site/software/scrumware/pmc-docker"
    
  3. Nakopírovat certifikát a klíč pro web server do ca/http/cert.pem a ca/http/key.pem nebo spustit script ca/http/create_cert.sh (pouze pro testovací účely)
  4. Nakopírovat certifikát z ca/http/cert.pem do crt/cert.crt
    cp ./ca/http/cert.pem ./crt/cert.crt
    
  5. Pokud chcete použít vlastní certifikát pro activemq, tak je třeba to udělat podle dokumentace a certifikát msusí být nakopírován do crt/mq.crt. Pokud stačí testovací certifikát, tak je třeba zkopírovat ca/mq/amq-server_cert do crt/mq.crt.
    cp ./ca/mq/amq-server_cert ./crt/mq.crt
    
  6. Pokud je žádoucí vytvořit vlastní CA pro scep službu, nakopírujte privátní klíč do scep/depot/ca.key1 a certifikát do scep/depot/ca.pem. Heslo k privátnímu klíči uložte do souboru scep/secret/capas. Pokud toto neučiníte, poběží služba scep s testovací CA.
  7. Upravte konfigurační soubory podle prostředí. Především .init.env, .env, pmc/application-local.properties a pmc-fe/.env. Některé soubory jsou doplněny komentáři, které je vhodné si před prováděním úprav přečíst.
  8. Spusťte script prepare.sh (tento script připraví certifikační autoritu a soubor CRL, což je nutné k běhu http serveru).
  9. Spusťte http server - sudo systemctl start apache2. Příklad konfigurace apache2 by mohl vypadat takto. (za předpokladu, že nebyly upraveny konfigurační soubory a repozitář byl naklonován do adresáře /opt). Pokud používáte apache2, je nutné povolit potřebné moduly následujícím příkazem sudo a2enmod headers proxy_http proxy_http2 ssl rewrite

    /etc/apache2/sites-available/pmc.local.conf
    <VirtualHost *:443>
        ServerAdmin webmaster@localhost
        DocumentRoot /var/www/html/
        ServerName pmc.test.local
        SSLEngine on
        SSLProxyEngine on
        SSLProxyVerify none
        SSLProxyCheckPeerCN Off
        SSLProxyCheckPeerName Off
        SSLProxyCHeckPeerExpire On
    
    # (1)!
        RequestHeader set X-Forwarded-Port "443"
        RequestHeader merge SSL_CLIENT_S_DN "%{SSL_CLIENT_S_DN}s"
        RequestHeader merge SSL_CLIENT_I_DN "%{SSL_CLIENT_I_DN}s"
        RequestHeader merge SSL_CLIENT_VERIFY "%{SSL_CLIENT_VERIFY}s"
        RequestHeader merge SSL_CLIENT_V_START "%{SSL_CLIENT_V_START}s"
        RequestHeader merge SSL_CLIENT_V_END "%{SSL_CLIENT_V_END}s"
        RequestHeader merge SSL_CLIENT_M_VERSION "%{SSL_CLIENT_M_VERSION}s"
        RequestHeader merge SSL_CLIENT_M_SERIAL "%{SSL_CLIENT_M_SERIAL}s"
        RequestHeader merge SSL_CLIENT_VERIFY "%{SSL_CLIENT_VERIFY}s"
        RequestHeader merge X_SSL_CLIENT_M_SERIAL "%{SSL_CLIENT_M_SERIAL}s"
        RequestHeader set X_FORWARDED_PROTO "https" env=HTTPS
        RequestHeader merge SslSubject "%{SSL_CLIENT_S_DN}s"
        RequestHeader merge X-SSL-CLIENT-S-DN-O "%{SSL_CLIENT_S_DN_O}s"
    
        Header always set Strict-Transport-Security "max-age=15552000; includeSubDomains"
        ProxyRequests     Off
    
    # (2)!
        AllowEncodedSlashes NoDecode
    
    # (3)!
        SSLCACertificateFile /opt/pmc-docker/scep/depot/ca.pem
        SSLCARevocationFile /opt/pmc-docker/scep/depot/crl/revocation.crl
        SSLCARevocationPath /opt/pmc-docker/scep/depot/crl/
        SSLCARevocationCheck chain no_crl_for_cert_ok
        SSLOCSPEnable Off
    
    # (4)!
        SSLVerifyClient optional
        SSLVerifyDepth 10
    
        SSLOptions +ExportCertData +StdEnvVars
    
    # (5)!
        SSLCertificateFile /opt/pmc-docker/ca/http/cert.pem
        SSLCertificateKeyFile /opt/pmc-docker/ca/http/key.pem
    
    # (6)!
        # (7)!
        ProxyPass /auth https://127.0.0.1:8082/auth
        ProxyPassReverse /auth https://127.0.0.1:8082/auth
    
        # (8)!
        ProxyPass /api http://127.0.0.1:8012/api
        ProxyPassReverse /api http://127.0.0.1:8012/api
    
        # (9)!
        ProxyPass /scep http://127.0.0.1:8012/scep
        ProxyPassReverse /scep http://127.0.0.1:8012/scep
    
        # (10)!
        ProxyPass /pmc http://127.0.0.1:8088/pmc
        ProxyPassReverse /pmc http://127.0.0.1:8088/pmc
    
    </VirtualHost>
    
    1. Hlavičky se propisují kvůli PMC POS - aby mělo PMC Informaci o certifikátu, který byl v requestu použit
    2. zda brát znaky %2F v URL jako / případně %5C jako \ Viz AllowEncodedSlashes
    3. Cesty k certifikační autoritě. Důležité pro PMC POS.
    4. Nastavuje možnost ověření klientským certifikátem. Důležite pro PMC POS.
    5. Cesta k certifikátu pro https
    6. Nastavení reverse proxy
    7. /auth musí vést na https port keycloaku (musí sedět s konfigurací v souboru docker-compose.yml)
    8. /api musí vést na api port PMC (musí sedět s konfigurací v souboru docker-compose.yml)
    9. /scep musí vést na api port PMC (musí sedět s konfigurací v souboru docker-compose.yml)
    10. /pmc musí vést na port PMC-FE (musí sedět s konfigurací v souboru docker-compose.yml)
  10. Spusťte script init.sh

  11. Po úspěšné instalaci odstraňte adresář tmp a soubory init.sh, prepare.sh a .init.env.

Úprava domény

V defaultní konfiguraci běží pmc na doméně pmc.test.local. Pokud chceme tuto doménu změnit, je třeba upravit následující soubory.

Pozor

Toto je třeba udělat před instalací PMC. V opačném případě je změna domény složitější.

  • pmc-fe/.env
    • PUBLIC_URL
    • REACT_APP_KEYCLOAK
    • REACT_APP_API
  • .env
    • KEYCLOAK_HOSTNAME
    • KEYCLOAK_FRONTEND_URL
  • pmc/application-local.properties
    • keycloak.auth-server-url
    • try-this.auth-server-url-short
  • tmp/realm-export.json:706
  • docker-compose.yml:83

Popis souborů

docker-compose.yml

Definice kontejnerů - viz docker-compose.yml.

prepare.sh

Script, který připraví certifikační autoritu a soubor crl. Musí být spuštěn před hlavním init scriptem. Po úspěšné instalaci vymazat.

init.sh

Instalační script. Po úspěšné instalaci vymazat.

.init.env

Konfigurace pro instalační script. Po úspěšné instalaci vymazat.

.env

Konfigurace dockeriu

pmc-fe/

Konfigurace pmc-fe.

pmc/

Konfigurace pmc-be - viz Konfigurační soubor PMC BE.

etl-pmc/

Konfigurace etl-pmc

scep/depot/

Všechny certifikáty vytvořené scep serverem, crl soubory, veřejný a privátní klíč certifikační autority, konfigurace openssl.

Upozornění

Pokud pro scep používáte vlastní certifikační autoritu, tak musí být veřejný klíč uložen do souboru scep/depot/ca.pem a privátní klíč do souboru scep/depot/ca.key. Heslo k privátnímu klíči musí být v souboru scep/secret/capas.

scep/secret/

Heslo k privátnímu klíči CA a challenge pro scep (soubor challenge je vytvořen automaticky podle konfigurace be pmc-be při běhu scriptu init.sh)

activemq/

Konfigurace Activemq.

activemq/conf/amq-client.ts, amq-server.ks

Certifikát a privátní klíč k activemq serveru - vytvořeno podle konfigurace activemq.

Upozornění

Certifikát musí být uložen do adresáře crt/, aby si ho kontejnery přidaly mezi důveryhodné.

crt/

Všechny certifikáty, které mají být důveryhodné pro docker kontejnery. Musejí mít příponu .crt.

ca/mq/

Testovací certifikát pro activemq. Certifikát musí být umístěn také v adresáři ./crt a musí mít příponu .crt.

ca/http/

Obsahuje script pro vytvoření testovacího certifikátu pro http server.

tmp/

Dočasné soubory. Vymazat po dokončení instalačního procesu.

Příklad použití pro testovací prostředí

sudo apt install docker-compose docker.io openssl curl jq netcat apache2 git # (1)!
sudo usermod -aG docker $USER # (2)!

cd /opt
sudo git clone "https://gitlab.greencenter.site/software/scrumware/pmc-docker" # (3)!

sudo chown -R $USER:$USER /opt/pmc-docker # (4)!
cd /opt/pmc-docker

cd ca/http
./create_cert.sh # (5)!
cd ../..

cp ./ca/http/cert.pem ./crt/cert.crt # (6)!
cp ./ca/mq/amq-server_cert ./crt/mq.crt

docker login docker.greencenter.site # (7)!

docker-compose pull # (8)!

./prepare.sh # (9)!

sudo vim /etc/apache2/sites-available/pmc.local.conf # (10)!

sudo a2enmod headers proxy_http proxy_http2 ssl rewrite # (11)!
sudo a2ensite pmc.local # (12)!

sudo systemctl restart apache2 # (13)!

./init.sh # (14)!
  1. Instalace předpokládaných balíků.
  2. Přidání uživatele do skupiny docker, aby nebylo potřeba spouštet docker příkazy se sudo. Po tomto příkazu bude nutné se přihlásit a odhlásit.
  3. Naklonování repozitáře.
  4. Nastavení uživatele jako vlastníka.
  5. Vytvoření testovacího certifikátu.
  6. Nakopírování certifikátů do adresáře crt.
  7. Přihlášení do container registry.
  8. Stažení images.
  9. Spuštění scriptu prepare.sh.
  10. Konfigurace apache. Obsah souboru je v sekci Použití.
  11. Povolení site.
  12. Povolení modulů.
  13. Restart apache.
  14. Spuštění hlavního scriptu.

  1. Klíč musí mít v hlavičce DEK-Info. Např.:

    -----BEGIN RSA PRIVATE KEY-----  
    Proc-Type: 4,ENCRYPTED  
    DEK-Info: AES-256-CBC,...
    
    Pokud hlavička vypadá takto
    -----BEGIN ENCRYPTED PRIVATE KEY-----
    
    tak scep server nenastartuje a bude hlásit chybu "unmatched type or headers".