Tredun ohjelmistokehittäjien kurssimateriaaleja
Ota yhteys EC2-instansiin Bash:illä (SSH-connection - ohjeet löytyvät AWS:stä).
> ssh -i "my_indentity.pem" ubuntu@my_ec2_instance.compute.amazonas.com
Asenna docker ja configuroi HTTPS ohjeet
$ sudo apt-get update
$ sudo apt-get install ca-certificates curl gnupg lsb-release
$ sudo mkdir -p /etc/apt/keyrings
$ curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
$ echo \
"deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu \
$(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
$ sudo apt-get update
$ sudo apt-get install docker-ce docker-ce-cli containerd.io docker-compose-plugin
$ sudo docker run hello-world
Lisää docker - group ja liitä käyttäjä siihen (niin ei tarvitse kirjoittaa aina sudo kun käytää dockeria).
$ sudo groupadd docker
$ sudo usermod -aG docker ubuntu
Asenna git
$ sudo apt update
$ sudo apt install git
Aseta Github SSH key:t ohjeet
$ ls -la
$ cd .ssh (jos ei ole valmiina luo kansio: mkdir .ssh)
$ ssh-keygen
$ cat id_rsa.pub
$ cd ~
Kopioi public key hiiren oikealla ja tallenna avain github-repoon (Account Settings -> SSH -> Add key).
Kloonaa repo käyttämällä SSH - osoitetta:
$ git clone git@github.com:xxx/yyy.git
Jos käytät tietokantaa siirrä se verkossa olevalle tietokantapalvelimelle ja pidä huoli siitä, että serveri saa siihen yhteyden (esim. lisää serveri Remote MySQL white listalle).
Jos käytät .env - tiedostoa, luo sellainen ja muokkaa ympäristömuuttujat siihen (DB nimi/käyttäjä/salasana jne.). Voit luoda tiedoston käyttämällä nanoa (tallennus Ctrl-x + yes):
$ cd backend
$ nano .env
Siirry repokansioon, aja Docker - build ja käynnistä kontti.
$ cd yyy
$ docker build . -t myapp
$ docker run -d -p 80:3001 myapp
Luo EC2:een Application Load Balancer (ALB), jonka tehtävänä on ohjata liikennetä eri porteissa pyöriville docker-konteille sekä terminoida HTTPS-liikenne.
Lisää yksi Target Group, liitä siihen em. serveri (portti 80).
Lisää ALB:iin HTTP - listener, ja lisää em. Target Group default - haaraan.
Varaa domain, linkitä domain edellä tehty ALB:in osoitteeseen, tilaa AWS:ltä sertifikaatti (*.mydomain.zz) ja tallenna AWS:n antamat tiedot DNS-tietokantaan (näin varmistetaan, että omistat domainin).
Lisää ALB:iin HTTPS - listener, ja lisää siihen em. Target Group:in lisäksi edellä tehty sertifikaatti.
Nyt voit rajoittaa serverin Security Group:in hyväksymään vain ALB:ilta tulevan liikenteen.
Tehtään uusia käyttäjiä (yksi per tiimi) ja kotihakemistoja serverille, lisätään niille salasana ja lisää käyttäjät docker-käyttäjäryhmään:
$ sudo useradd -s /bin/bash -d /home/team1/ -m team1
$ sudo passwd team1
4 sudo usermod -aG docker team1
Enabloidaan SSH password - autentikaatio (muokkaa: PasswordAuthentication yes, tallenna Ctrl-x + yes):
$ sudo nano /etc/ssh/sshd_config
$ sudo systemctl restart sshd
Nyt jokainen ryhmä voi ottaa SSH-yhteyden serverille (kysyy salasanan):
$ ssh team1@my_ubuntu_ip
Tiimi voi kloonata projektirepon, tehdä buildin ja käynnistää sen. Huom! Jokaisella tiimillä pitää olla eri portti (tässä 81).
> docker build . -t myapp
> docker run -d -p 81:3001 myapp
Lisätään jokaiselle ryhmälle oma TargetGroup, jossa liikenne ohjataan ryhmän porttiin. Lisätään myös uusi sääntö per tiimi ALB:in HTTPS-listenerille, eli esim. team1.my_domain.yy forward:ataan Target Group:iin, jossa serverin portti on 81, team2.my_domain.yy portti 82 jne.
Jotta käytettäisiin aina HTTPS:ää lisätään jokaiselle ryhmälle redirect-sääntö HTTP -> HTTPS 443.
Nyt jokaisen ryhmän node.js - applikaatio löytyy subdomainin alta esim.
https://team1.my_domain.yy
https://team2.my_domain.yy
Käynnistä AWS RDS Postgres DB (micro, dev), ota talteen master tunnukset ja host address
Asenna PostgresSQL - client serverille, ja ota yhteys tietokantaan (user: postgres, db: postgres)
$ sudo apt install postgresql-client
$ psql -h my_db_host_address -d my_db_name -U my_db_user
Tallenna tiedot .env:iin, aja migrates ja seeds ja aloita käyttö