Tredun ohjelmistokehittäjien kurssimateriaaleja
Ota yhteys ubuntu-serveriin Bash:illä
Huom! jos yrität ottaa yhteyden private IP-osoitteeseen, katso ohjeet täältä
$ ssh -i "my_indentity.pem" ubuntu@my_server_ip
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
Lataa kokeeksi yksi container dockerhub:ista ja käynnistä se:
$ docker login
$ docker pull my_docker_user/my_app:my_tag
$ docker run -d -p 80:3001 my_docker_user/my_app:my_tag
Jotta saadaan useampaan porttiin eri applikaatioita omissa konteissaan, asennetaan nginx reverse proxy:ksi. Ohjeet nginx:in asennukseen
Asenna nginx
$ sudo apt-get update
$ sudo apt-get install nginx
Konffaa se reverse-proxy:ksi
$ sudo unlink /etc/nginx/sites-enabled/default
$ cd /etc/nginx/sites-available
$ sudo nano reverse-proxy.conf
Lisää tiedostoon haluamasi proxy-asetukset, tässä käytetty polkua: (tallenna Ctrl-x, yes):
server {
listen 80;
location /team1/ {
proxy_pass http://localhost:81/;
}
}
Jos käytössäsi on domain name, voit tehdä proxyn alidomaineille:
server {
listen 80;
server_name my_subdomain.my_domain.xy;
location / {
proxy_pass http://localhost:200;
}
}
Ota käyttöön samat proxy-asetukset myös sites-enabled-kansiossa) ja käynnistä uudelleen nginx:
$ sudo ln -s /etc/nginx/sites-available/reverse-proxy.conf /etc/nginx/sites-enabled/reverse-proxy.conf
$ sudo systemctl restart nginx
Jos käytät polku-proxia, kontti pitää vielä build:ata uudelleen seuraavilla muutoksilla, koska applikaatio ei pyöri web-serverin juuressa (tätä ei tarvita jos käytät subdomain:eja):
Lisää frontin package.json tiedostoon alla oleva “homepage”-asetus. Tämä tarvitaan, että static tiedostot (JS, CSS) latautuvat oikein web-serveriltä (. viittaa samaan polkuun kuin index.html).
"homepage": ".",
ENV NODE_ENV=production
var serviceURI = '/notes';
if(process.env.NODE_ENV == 'production'){
serviceURI = window.location.pathname + serviceURI
}
Push:aa uusi kontti dockerhub:iin ja tee pull ubuntu-serverillä. Stop:aa tarvittaessa edellinen kontti ja käynnistä uusi. Nyt kontin pitäisi aueta jommasta kummasta aueta osoitteesta riippuen kumpaa proxy-tapaa käytit:
http://my_server_ip/team1
http://my_subdomain.mydomain.xy
Hanki oma domain, esim. Hostinpalvelu
Ota käyttöön AWS:ssä Route53:ssa hosted zone, uudelle domainille. Lisää uusi record, joka reitittää kaikki *.my_new_domain - osoiteet reverse proxy:n IP-osoiteeseen. Tallenna AWS:n nimipalvelinten osoiteet palveluun, josta ostit domain:in. Huom. DNS:n päivitys voi kestää 24h.
Asenna certbot, joka luo Let’s encrypt - sertifikaatit kaikille domaineillesi ohjeet
$ sudo snap install core; sudo snap refresh core
$ sudo snap install --classic certbot
$ sudo ln -s /snap/bin/certbot /usr/bin/certbot
$ sudo certbot --nginx
Tehdää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 -i "my_indentity.pem" team1@my_server_ip
Tiimi voi nyt ladata imagen ja käynnistää sen omaan porttiinsa. Huom! Jokaisella tiimillä pitää olla eri portti (tässä 81).
$ docker pull my_docker_user/my_app:my_tag
$ docker run -d -p 81:3001 my_docker_user/my_app:my_tag
Nyt jokaisen ryhmän node.js - applikaatio löytyy oman polun alta esim.
https://my_domain.xy/team1
https://my_domain.xy/team2
TAI
https://team1.my_domain.xy
https://team2.my_domain.xy
Ohje subdomainien reititykseen. Vaatii toimivan domainin.
SSH-yhteys käyttäen toista ubuntu-serveriä proxynä:
Host jump
HostName xxx.xxx.xxx.xxx #Floating IP
User my_ubuntu_user
IdentityFile ~/.ssh/my_rsa_id
Host yyy.yyy.yyy.* #Private IP
ProxyCommand ssh jump -W %h:%p
User ubuntu
IdentityFile ~/.ssh/my_rsa_id
Nyt voi ottaa ssh-yhteyden suoraan kohdekoneeseen:
ssh yyy.yyy.yyy.*