-
ssh s221598@csa.edu.jkan.pl (swój nr albumu)
-
curl http://adsk.dydaktyka.jkan.pl/_static/id_student -o id_student(pobieramy plik id_student) -
ssh ec2-user@3.79.101.88 -i id_student(łaczymy się do ec2-user)
- numerki to adres ip z aws 3.71.202.94
- mam repo
git@github.com:szymonkonopek/aws.gitlubhttps://github.com/szymonkonopek/myEcom
- nie ma gita, pobieramy gita 😎😎😎😎
- Package manager
tam / dmfdnf search(query) - pokazuje dostępne paczkisudo dnf install(paczka) pobiera 📦
- Pobieramy nasz projekt z pp4
git clone https://github.com/szymonkonopek/myEcom.git(lepiej zeby to byl https) cd src/main/resources/static/sudo python3 -m http.server 8080netstat -lntp (pokazuje porty)
- powinno nam w przeglądarce pokazać stronke, pod adresem IP z AWS i port np. 8080
(18.184.43.215:8080)
- Pobieramy java (która wersja
⁉️ ) sudo dnf install java-17-amazon-corretto☕️- Verify
java -version☕️ - Pobieramy maven (lub inny np. node ruby itp)
- Pobieramy Maven np.
https://dlcdn.apache.org/maven/maven-3/3.9.5/binaries/apache-maven-3.9.5-bin.tar.gz wget https://dlcdn.apache.org/maven/maven-3/3.9.5/binaries/apache-maven-3.9.5-bin.tar.gz- Rozpakowywujemy
tar zxvf apache-maven-3.9.5-bin.tar.gz🤐 - Pobieramy mc
sudo dnf install mc🎤 - ścieka Maven
apache-maven-3.9.5/bin/mvn - Zmienna środowiskowa maven
sudo ln -s /home/ec2-user/apache-maven-3.9.5/bin/mvn /usr/local/bin/mvn - Sprawdźmy czy jest 🆗
mvn -v
cd ./naszprojekt🧑🎨- kompilacja mvn
mvn compilelub testmvn test🧪 mvn package -Dmaven.test.skip=true✅find target/ | grep .jar(ten plik ma być na dole) 📁java -jar target/my-ecommerce-0.1.jar🫙
-
https://www.baeldung.com/spring-boot-fix-the-no-main-manifest-attribute -
Można otworzyć w nano i to wkleić ale to bez sensu troche 🤦. Lepiej otworzyć w vscode ten projekt i dodać sobie po prostu do pluginów kod poniżej.
-
Pluginy są w pliku
pom.xml🍑 -
<plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> <configuration> <mainClass>com.baeldung.demo.DemoApplication</mainClass> <layout>JAR</layout> </configuration> </plugin> * LUB (chyba lepszy sposób)<?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>pl.jkanclerz</groupId> <artifactId>my-ecommerce</artifactId> <packaging>jar</packaging> <------- Tutaj dodajemy tą linijke <version>0.1</version><plugins> ... <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> </plugin> </plugins> -
mvn installinstaluje zmiany -
jeszcze raz
java -jar target/my-ecommerce-0.1.jar -
Potem teoretycznie powinno zadziałać
<twoje publiczne ip>:<port>czyli np:https://3.71.53.56:8000ale mi to np nie działa -
Port mozna zobaczyć w
src/main/resources/application.yaml
cd /
cd etc/systemd/system
sudo nano ecom.service
sudo systemctl daemon-reload
sudo systemctl start ecom
sudo systemctl status ecom
Mozemy zobaczyc sobie logi journalctl -u ecom
Follow journalctl -u ecom -f
eval `ssh-agent`
- add ssh ➕
ssh-add id_student - ping pong 🏓
ansible -m ping -i hosts.ini app_nodes - run script 🏃
ansible-playbook -i hosts.ini install_java_app.yaml
- name: "Install eceommerce app"
hosts: app_nodes
become: yes
vars:
app_url: https://github.com/szymonkonopek/myEcom/releases/download/v1.31/my-ecommerce-0.1.jar
app_dir: /opt/ecommerce
app_name: ecommerce
my_favourite_software:
- cowsay
- mc
- tree
my_must_have_software:
- java-17-amazon-corretto
tasks:
- name: "My first command via ansible"
shell: "echo 'hello world :)' > hello_world.txt"
- name: "install my favourite software: eg cowsay"
dnf:
name: "{{ my_favourite_software }}"
state: latest
- name: "install my must have software"
dnf:
name: "{{ my_must_have_software }}"
state: latest
- name: "create app dir"
file:
path: "{{app_dir}}"
state: directory
- name: "Download my app"
get_url:
url: "{{ app_url }}"
dest: "{{app_dir}}/{{app_name}}.jar"
- name: "create systemd config"
template:
src: templates/app.service.j2
dest: "/etc/systemd/system/{{ app_name }}.service"
- name: "restart my service & add to autostart"
systemd_service:
name: "{{app_name}}"
state: restarted
enabled: yes
daemon_reload: yes
- trzeba zrobić 2 maszyny (1 zwykła i load balancer)
- logujemy do load balancera
sudo dnf install nginxsudo systemctl restart nginx- plik
install.yamldo automatyzacji
host: lb_nodes
tasks:
- name: "install nginx"
dnf:
name: nginx
state: latest
- name: "restart nginx"
systemd_service:
name: nginx
state: restarted
enabled: yes
daemon_reload: yes
cd /etc/nginx- robimy plik config
conf.d/web.conf
server {
listen 80;
root /var/www;
location / {
proxy_pass http://172.31.20.113:80;
proxy_set_header Host $host;
}
}
- potem na pierwszą maszyne
eval `ssh-agent`
ssh-add ~/id_student
sudo dnf install docker -ydocker --versionsudo systemctl start dockersudo systemctl status docker
https://hub.docker.com/_/alpine minimalny start
sudo docker run alpine sh -c "echo 'Hello'"- wypisywanie 'echo' w spoób izolowany na alpine.- Wyświell liste procesów które działają
sudo docker ps - Wyświell liste procesów które działają plus te poprzednie?
sudo docker ps -a
https://hub.docker.com/_/httpd
sudo docker run -p 8080:80 httpd:2.4.12- Idziemy na nasze ip i port 8080
sudo docker run -d -p 5000:80 httpd:2.4.12d- background, p - port\ (5000 nie działa na uek)
- Nginx -
sudo docker run -d -p 80:80 nginx:latest🦫
sudo docker ps- sprawdzamy co jakie procesy działająsudo docker rm -f <POCZATEK_ID>- np. a8 przy a808e43...
sudo docker run -it alpine sh(uproszczony bash)
- apk - project manager w apline
apk add openjdk17wget https://github.com/szymonkonopek/myEcom/releases/download/v1.31/my-ecommerce-0.1.jar -O app.jarjava -Dserver.port=8080 -jar app.jar
- działa
- nano
Dockerfile
FROM alpine:latest
RUN mkdir -p /opt/ecommerce
RUN apk add openjdk17
RUN wget https://github.com/szymonkonopek/myEcom/releases/download/v1.31/my-ecommerce-0.1.jar -O /opt/ecommerce/app.jar
RUN adduser ecommerce --disabled-password
USER ecommerce
EXPOSE 8080
CMD ["/usr/bin/java/", "-Dserver.port=8080", "-jar", "/opt/ecommerce/app.jar"]
- budowa obrazu 🧱
sudo docker build -t my_ecommerce ./- jak uruchomimy jeszcze raz to cache działą sudo docker images-> my_ecommerce
- InfluxDB 🧢
- Telegraf ☎️
- Grafana 📊
- Tworzymy maszynę metrics w amazon ws
sudo dnf install https://dl.influxdata.com/telegraf/releases/telegraf-1.29.1-1.x86_64.rpmtelegraf --sample-config > mytelegraf.conf- Usuwamy komentarze #
grep -v "#" mytelegraf.conf | uniq > clear_telegraf.conf telegraf --config clear_telegraf.conf --test(bez outputów)
[global_tags]
[agent]
interval = "10s"
round_interval = true
metric_batch_size = 1000
metric_buffer_limit = 10000
collection_jitter = "0s"
flush_interval = "10s"
flush_jitter = "0s"
precision = "0s"
hostname = ""
omit_hostname = false
[[outputs.influxdb]]
urls = ["http://127.0.0.1:8086]
database = "metrics"
[[inputs.cpu]]
percpu = true
totalcpu = true
collect_cpu_time = false
report_active = false
core_tags = false
[[inputs.disk]]
mount_points = ["/"]
ignore_fs = ["tmpfs", "devtmpfs", "devfs", "iso9660", "overlay", "aufs", "squashfs"]
[[inputs.mem]]
[[inputs.system]]
df -h(h - humanize) ☠️sudo dnf install https://dl.influxdata.com/influxdb/releases/influxdb2-2.7.5-1.x86_64.rpmsudo yum install -y https://dl.grafana.com/enterprise/release/grafana-enterprise-10.2.3-1.x86_64.rpm- Grafa operuje na porcie
3000ale uek blokuje więc zmieniamy 🎓 sudo nano /etc/grafana/grafana.inizmieniamy na8080📈sudo systemctl restart grafana-server.service🚀
-
sudo dnf install docker -
sudo systemctl start docker -
sudo docker run -d --name=grafana -p 80:3000 grafana/grafana -
sudo docker run -d --name=influxdb -p 8086:8086 influxdb:1.8-alpine -
wchodzimy na adres maszyny -> odpala się grafana i zmieniamy hasło
sudo dnf install https://dl.influxdata.com/telegraf/releases/telegraf-1.29.2-1.x86_64.rpm
sudo nano telegraf.conf
[global_tags]
[agent]
interval = "10s"
round_interval = true
metric_batch_size = 1000
metric_buffer_limit = 10000
collection_jitter = "0s"
flush_interval = "10s"
flush_jitter = "0s"
precision = "0s"
hostname = ""
omit_hostname = false
[[outputs.influxdb]]
urls = ["http://127.0.0.1:8086"]
database = "metrics"
[[inputs.cpu]]
percpu = true
totalcpu = true
collect_cpu_time = false
report_active = false
core_tags = false
[[inputs.disk]]
mount_points = ["/"]
ignore_fs = ["tmpfs", "devtmpfs", "devfs", "iso9660", "overlay", "aufs", "squashfs"]
[[inputs.mem]]
[[inputs.system]]
telegraf config
