ToCode
Kanalga Telegramโda oโtish
ืืืคืื ืงืฆืจืื ืืืชืื ืชืื ืืืช ืื ืื ืคืจืง
Ko'proq ko'rsatish1 419
Obunachilar
Ma'lumot yo'q24 soatlar
Ma'lumot yo'q7 kunlar
+130 kunlar
Postlar arxiv
1 419
ืืืืืกืืฃ ืฉืืจืืฅ ืืช ื logger ื ืืื ืก ืืชืืงืืืช ืืืืืื ืืื ืืจืืืช ืืช ืืชืืฆืืืช:
$ cat /var/log/syslog-ng/*/*
Jul 8 06:27:35 32-setup-syslogng_client1_1 client-demo[16]: {"message":"Hello World","level":"info"}
Jul 8 06:27:45 32-setup-syslogng_client2_1 client-demo[16]: {"message":"Hello World","level":"info"}
## ืืืกืคืช Log Destination
ืืืื ื ืขืืื ืืช ืฉืจืช ืืืืืื ืืื ืฉืืืชืื ืงืืืฅ ืืื ื ืืกืฃ ืืคืขื ืืื ืฉืืจืื ืืช ืื ืืืืืื ืื ืื ืกืื ืืื ืืืงืืจืืช - ืื ืืฉื ื ืืืืื ืฉืจืช ืืืืืื ืชืืื ืืช. ืื ื ืืืืข, ืงื ืืืื ืืขืืจืช ืืื ืืื ืืงืก ืืจืืืช ืืืื ืืืช ืืช ืื ืืืืืื ืืืกืคืจ ืงืืฆืื, ืืื ืืืฉืื ืขื ืื ืืืชืจ ืืชืืจ ืืืืื ืืืื ืืืกืืคืื ืืขื ืืื ื ืืกืฃ.
ืขืืื ื ืืช ืงืืืฅ ืืืืจืืช ืืืื syslog-ng.conf ืืืืกืืคื ืืช ืืืืื ืืื:
destination alllogs {
file("/var/log/syslog-ng/all.log"
create-dirs(yes));
};
ืืืืจ ืืื ืืชืื ืืืืง log ืืืกืืคื ืืช ื destination ืืืืฉ:
log {
source(s_net);
destination(logfiles);
destination(alllogs);
};
ื ืคืขืื ืืืืฉ ืื ืืื ืก ืืฉืจืช ืืืืืื. ืฉื ื ืืื ืืืฆืื ืืชืืงืืืช /var/log/syslog-ng ืืช ืืงืืืฅ ืืืืฉ all.log ืืคืขื ืขื ืื ืืืืขืืช ืืืื ืืฉื ื ืืืงืืืืช ืฉืื ื.
(ืฉืืื ืื ืฉืืงืืืฅ ืืืคืืข ืจืง ืืืจื ืฉืืคืขืืชื ืืช ืืืงืืืืช ืขืฆืื ืืืชืืชื ืืืืขืืช ืืืื).
## ืกืืืื
ืืขืืืื ืขื syslog-ng ืืืคืฉืจื ืื ื ืืืจืื ืืงืืืช ืกืจืืืก ืฉื ืฉืืืจืช ืืืืื ืฉืืงืื ืืืืื ืืื ืืกืจืืืกืื ืืืืจืื ืืืขืจืืช ืืฉืืืจ ืืืชื ืืืงืื ืืื. ืื ื ืืืจืชื ืืฉืืืจ ืืช ืืืื ืืงืืฆืื ืืื ืืืขืจืืืช ืืืืืืช ืืืชืจ ืืจืื ืคืขืืื ืืืื ืืืฉืืจ ืืืกืืก ื ืชืื ืื ืฉื ืืคืฉืจ ืืืื ืืืจืืฅ ืขืืื ืืืคืืฉืื ืื ืืืงืคืืฅ ืืชืจืืืช ืืืื ืืืช.
ืืฉืืื ืืืืกื ืืช ืืืืืื ืืขื ื ื ืฆืืจื ืืกื ืืื ืืคืชืื ืืฉืืื ืืฉืจืช ืืืืื ืืขื ื ืืืืืกืืฃ ืขืื destination ืืืืืจืืช ื syslog ืฉืืฆืจื ื. ืืืืืื ืืื ืืืืจ ืืช ืืืืืื ืืืขืจืืช papertrail ืื ื ืืืกืืฃ ืืืืง ืฉื ืจืื ืืขืจื ืืื:
destination d_papertrail {
udp("logsN.papertrailapp.com" port(XXXXX));
};1 419
# ืืืจืื: ืืงืืช ืฉืจืช ืืืืื ืขื syslog-ng
ืฉืจืช ืืืืื ืืื ืืกื ืืื ืกืจืืืก ืฉืืืื ืคืื ืื ืืืื ืขื ืืืืขืืช ืืืื ืฉืืื ืืืื ืืืชื ืืช ืืืืืข ืืืืืฉืื ืืขื. ืืจืืจืช ืืืื ืคืฉืืื ืืื ืืืชืื ืืช ืื ืืืืืื ืืงืืฆืื ืืื ืืชืืื ืื ื ืืฉืืื ืืชืืื, ืืื ืืจืื ืคืขืืื ื ืจืฆื ืื ืชื ืืช ืืืืืื ืืืืฆื ืืฉืจืช ืืืืืื ืื ืืืกืืก ื ืชืื ืื ืื ืืคืืื ืืฉืืจืืช ืืืืกืื ืืืืื ืืขื ื. ืชืืื ืช syslog-ng ืืื ืืขืจืืช ื ืืืื ืืืืื ืคืืคืืืจืืช ืฉืืืคืฉืจืช ืื ืฉืืืจื ืืงืืืืช ืฉื ืืืืืื ืืื ืืฉ ืื ืืื ืืืจืฆืื ืืฆืืื ืช ืขื ืฉืืจืืชื ืืืืกืื ืืืืื ืืขื ื ืื ืฉืืืื ืงื ืืขืืืจ ืืฉื ืืฉื ืฆืืจื.
## ืืฆืืจืช ืืืื' ืืกืจืืืก ืืืืืื
ืืฉืืื ืืืชืื ืกืจืืืก ืืืืื ื ืคืขืื ืืชืื ืงืื ืืืื ืจ ืชืืื ืืช ืืฉื syslog-ng ืฉืืงืืืช ืืืืื ืืืกืจืืืกืื ืืฉืื ืื ืืฉืืืจืช ืืืชื ืืืขื ืฉื ืืืจ. ืื ื ืจืื ืงืืืฅ ืงืื ืคืืืืจืฆืื ืคืฉืื ืฉื syslog-ng:
@version: 3.19
source s_net {
tcp( ip("0.0.0.0"));
udp( ip("0.0.0.0"));
syslog( ip("0.0.0.0"));
};
destination logfiles {
file("/var/log/syslog-ng/$HOST/$PROGRAM.log"
create-dirs(yes));
};
log {
source(s_net);
destination(logfiles);
};
ืืืจื ืชืืืืจ ืืืืจืกื ืื ืื ื ืืืืืจืื "ืืงืืจืืช", ืืืืืจ ืืืืคื ืืืืื ื ืฉืืืื ืืืื ื, ื"ืืขืืื", ืืืืืจ ืืื ืืืื ืืืืชื. ืืืืง log ืืืืจ ืืื ืืงืืจ ืืืขื ืืืื ืฉืืืจืื ืขื ืืงืกื. ืืจืืข ืืืขื ืืื ืงืืฆืื. ืืืฉืชื ืื $HOST ื $PROGRAM ืืชืื ืฉื ืงืืืฅ ืืืขื ืืชืืจืืื ืืฉื ืืฉืจืช ืฉืฉืื ืืช ืืืืืขื ืืฉื ืืชืืื ืืช ืฉืจืฆื ืฉื.
ื ืฉืืืจ ืืช ืืงืื ืคืืืืจืฆืื ืืงืืืฅ ืืฉื syslog-ng.conf ืืืช ืืงืืืฅ ื ืฉืืืจ ืืชืืงืื ืืฉื logserver. ืืืืชื ืชืืงืื ืื ื ืืืกืืฃ ืื ืงืืืฅ Dockerfile ืขื ืืชืืื ืืื:
FROM debian:buster
RUN apt-get update && apt-get upgrade -y && apt-get install -y syslog-ng
COPY syslog-ng.conf /etc/syslog-ng/
EXPOSE 514/udp 514/tcp 601/tcp 6514/tcp
ENTRYPOINT ["/usr/sbin/syslog-ng", "-F", "-f", "/etc/syslog-ng/syslog-ng.conf", "--no-caps"]
ืืงืืืฅ ืืชืงืื ืืช syslog-ng ืขื ืืืื' ืฉื ืืืืื ืืืคืขืื ืืืชื ืขื ืงืืืฅ ืืงืื ืคืืืืจืฆืื ืฉืืฆืจื ื.
## ืืฆืืจืช ืืคืืืงืฆืืืช Node.JS ืฉืืืชืืช ืืกืจืืืก ืืืืืื
ืืืื ื ืจืื ืฉืื ืขืืื ืืืฉืืื ืื ื ืืืฆืจ ืืคืืืงืฆืืืช Node.JS ืฉืชืืชืื ืืืื. ืืชืืงืื ืืืฉื ืืฉื client ืฆืจื ืงืืืฅ ืืฉื main.js ืขื ืืชืืื ืืื:
const winston = require('winston');
require('winston-syslog').Syslog;
const logger = winston.createLogger({
levels: winston.config.syslog.levels,
transports: [
new winston.transports.Syslog({
host: process.env.SYSLOG_NG_HOST,
app_name: 'client-demo',
}),
]
});
console.log('--- Writing To Syslog');
logger.info("Hello World");
logger.end();
ืคืงืืืช console.log ืชืืชืื ืืช ืืคืื ืืงืื ืกืื ืื ืฉื ืจืื ืืช ืื ืืืกืืฃ ืฉื ืืืงืจ, ืืคืงืืืช logger.info ืชืฉืชืืฉ ืืกืคืจืืืช winston-syslog ืืื ืืฉืืื ืืช ืืืืืขื ืืฉืจืช ืืื ืืจืืืง. ืฉืืื ืื ืฉืืชืืืช ืืฉืจืช ืืืืขื ืืชืืื ืืช ืืจื ืืฉืชื ื ืกืืืื ืืืื ืื ืื ื ืืฆืคืื ืืืฆืื ืืช ืืขืจื ืืืฉืชื ื ืื ืืงืืืฅ ื docker-compose ืืจืืฉื.
ืืืืชื ืชืืงืื ืฆืจื ืื ืงืืืฅ package.json ืขื ืืชืืื ืืื:
{
"name": "client",
"version": "1.0.0",
"description": "",
"main": "index.js",
"keywords": [],
"author": "",
"license": "ISC",
"dependencies": {
"winston": "^3.3.3",
"winston-syslog": "^2.4.4"
}
}
## ืืคืขืื ืืชืื Docker Compose
ื ืืืืง ืืช ืืื ืืื ืืืืื ืฉืืคืฉืจ ืืืชืื ืืืงืจืื ืืืืื ืืืื ืกืจืืืกืื. ืืชืืงืื ืืจืืฉืืช ืืชืื ืงืืืฅ docker-compose.yml ืขื ืืชืืื ืืื:
version: '3.9'
services:
logger:
build: ./logserver
volumes:
- logs:/var/log/syslog-ng/
client1:
build: ./client
command: ["sleep", "infinity"]
environment:
SYSLOG_NG_HOST: logger
client2:
build: ./client
command: ["sleep", "infinity"]
environment:
SYSLOG_NG_HOST: logger
volumes:
logs:
ืืืคืขืืื ืขื:
$ docker compose up
ืขืืฉืื ืืฉ ืื ื ืฉืชื ืืืื ืืช client ืฉืื ืขืืฉืืช ืืืื, ืืื ืืืืืืช ืืช ืืชืืื ืืช ืฉืื ื ืฉืืืืขืช ืืืชืื ืืืื, ืืืืื ืช server ืืืช ืฉืืงืฉืืื ืืืืืขืืช ืืื ื ืื ืกืืช. ื ืคืชื ืฉืืืฉื ืืืื ืืช ืืืฉืื ืื ืชืืืจ ืืื ืืืช ืืืืืื ืืช:
# First Terminal
$ docker compose exec logger /bin/bash
# Second Terminal
$ docker compose exec client1 /bin/bash
# Third Terminal
$ docker compose exec client2 /bin/bash
ืืืืกืืคืื ืฉืืจืืฆืื ืืช client1 ื client2 ื ืจืืฅ ืืช ืืคืงืืื:
$ node main.js1 419
# ืืืืืฆืื ืืืืืคืื
ืดืืฉืืื ืืืืืข ื Zero Downtime Deployments ืื ืื ื ืฆืจืืืื ืืฉืืจื ืืงืืืจื ืืืก.ืด
ืดืืฉืืื ืืคืชืืจ ืืช ืืขืืืช ืืืืฆืืขืื ืื ืื ื ืืืืืื ืืขืืืจ ืืื ืืืืจ ืืจืืืงื.ืด
ืดืืฉืืื ืฉื ืืื ืืื ืืช ืคืืฆ'ืจืื ืืืฉืื ืืืชืจ ืืืจ ืื ืื ื ืืืืืื ืืขืฉืืช Rewrite ืืื ืืืขืจืืช.ืด
ืดืืฉืืื ืืคืชืืจ ืืช ืืขืืืช ืืืืืื ืื ืื ื ืืืืืื ืืฉืืจื ืืช ืืชืฉืชืืช ืืืืจืกื ืืืืฉื ืืืืชืจ ืืืฉืืืจ ืืืื ืงืื ืืชืืืื.ืด
ืดืืฉืืื ืฉืืืื ืืืชืืื ืืืืื ืืช ืืืื ืืืืืื ืืืื ืฉื ืฉืืขืช ืื ืืขื ืืื ืช ืื ื ืฆืจืื ืฉืืืืก ืืืชื ืื ืืขืืื ืขื ืคืจืืืงื ืฉืืชืื ืื.ืด
ืื ืื ื ืืืฆืจืื ืืขืฆืื ื ืืืืืฆืื ืื ืืืื, ืืืจื ืืื ืื ืืืืืืฅ ื ืืชื ืื ื ืชืืจืืฅ ืืขืฉืืช ืืช ืืืืจ ืืงืฉื. ืืื ืฉืืื ืืืืืจ ืฉืืืชืจ ืืืืชืจ ืขื ืืืืืืฅ ืื ืืคืืขื ืืื ืืื ืข ืืื ืืขืฉืืช ืืช ืืืืจ ืืงื. ืืืืืื ืืืจืืช, ืื ืืืื ืฉืืื ืืื ืขืืฉืื ืืฉืืจื ืืงืืืจื ืืืก ืืชื ืืืืชืจืื ืขื Zero Downtime Deployment, ืืืขืื ืื ืงืฉืืจื ืืงืืืจื ืืืก.
1 419
ืืงืืื ืืืืืืื ืจ ืฉืืชืงืืื ืืืืืฉื ืขืืชื ืืืชืจ
https://www.tocode.co.il/past_workshops/113
1 419
# ืืืค ืืืงืจ: ืฉืืืืฉ ื Multistage Builds
ืืื ืืืช Docker Image ืืืื ืื ื ืืฆืืื ืฉืื ืื ื ืฆืจืืืื ืืืื' ืืกืืก ืืกืืื ืืื ืืืฆืข ืขืืืืช "ืืื ื", ืืื ืืืจื ืฉืืืื ื ืืกืชืืืื ืืคืฉืจ ืืงืืช ืืช ืืชืืฆืจืื ืืืืืืฉ ืืืชื ืืืืื' ืืืจ. ืืืืื ืคืฉืืื ืืื ืืคืืืงืฆืืืช next.js ืฉืืืฆืจืช ืืชืจ HTML ืกืืื. ืื ื ืฆืจืื ืืช node.js ืืื ืื ืฉืงืฉืืจ ืืืื ืืฉืืื ืืื ืืช ืืช ืืืชืจ ืืกืืื, ืืื ืืืจื ืฉืื ืืชื ืืืชื ืื ื ืืืื ืืืืืฉ ืืช ืืชืืฆืื ืืืืื' ืฉื nginx.
ืืืืงืจ ืืฉ ืื ืื ืื ืฉื ืงืจื multi stage builds ืฉื ืืขื ืืชืช ืืขื ื ืืืฆืืื ืืืื ืืืืคืฉืจ ืื ืื ืืืืื' ืืื ืืืจืืื ืืืืื' ืืืจ. ืืืื ื ืจืื ืืื ืื ืขืืื.
## ืืคืืืงืฆืืืช next ืจืืืื ืืืืื' ืฉื node
ื ืชืืื ืขื ืืชืืืช Dockerfile ืืืคืืืงืฆืืืช next ืจืืืื ืืืืื' ืฉื node.js. ืืฉืืื ืืื ืืช ืืช ืืืคืืืงืฆืื ืื ื ืฆืจืื ืืืจืืฅ:
$ npm run build
$ npx next export
ืืื ืื ืฉืืฉ ืื ืืชืืงืื ืชืช-ืชืืงืื ืืฉื next-demo-app, ืืืื ื ืื ื ืืช ื Dockerfile ืืื:
FROM node:17
WORKDIR /app
COPY next-demo-app .
RUN npm install
RUN npm run build
RUN npx next export
CMD ["npm", "run", "start"]
ืืืจื ืื ืื ื ืืื ื ืืช ืืืืื' ืขื:
$ docker build . -t multistage-demo
ืื ื ืืืื ืืืจืืฅ ืืช ืืืืื' ืืจืืืช ืฉืืื ืขืืื:
$ docker run -p 8080:3000 --rm multistage-demo
ืืื ืื ืฉืืืืช ืืขื ืืื ืื ืืจืืืช ืืช ืืืืื ืฉื ืืืืื':
$ docker images | grep multistage-demo
multistage-demo latest e67684b5f7d1 2 minutes ago 1.24GB
ืื ืจืืืชื ื ืืื - ืื 1.24 ื'ืืื.
## ืืขืืจ ื Multistage Builds
ืืื ืื ืื ื ื ืืืจ ืฉืื ื ืื ืืืืช ืฆืจืื ืืืืืฉ ืืช ืืืคืืืงืฆืื ืืฉืจืช ืฉื next - ืื ืืคืขืืชื export ืืื ืืืคืืืงืฆืื ืฉืื ืืืื ื ืืชืืจ ืงืืฆื html ืกืืืืื. ืืื ืืกืคืืง ืื ืืืืืฉ ืืืชื ืืฉืจืช ืืื ืจืืื ืืคืฉืื, ืืืฉื nginx. ื ื, ืื ืจืง ืืืืชื ืืืื ืืืขืืืจ ืืช ืื ืืงืืฆืื ืฉืื ืืชื ืืืืื' nginx ...
ืืคื ื ืื ืก ืืจืขืืื ืฉื multistage builds. ื ืขืืื ืืช ื Dockerfile ืืงืื ืืื:
FROM node:17 AS builder
WORKDIR /app
COPY next-demo-app .
RUN npm install
RUN npm run build
RUN npx next export
FROM nginx:1.21-alpine
COPY --from=builder /app/out /usr/share/nginx/html/
ืืืกืคืช ืฉืืจืช FROM ื ืืกืคืช ื Dockerfile ืืืคืฉืจืช ืืฉืื ืืฆื ืืช ืื ืื ืฉืืฆืจื ื, ืืืืชืืื ืืื ืืช ืืช ืืืืื' ืืืืฉ ืืชืื ืืืื' ืืกืืก ืืืฉ. ืืคืงืืืืช COPY ืื ื ืืืื ืืืืกืืฃ --from ืืื ืืืขืชืืง ืชืืฆืจื ืื ืื ืืืืื'ืื ืฉืฉืืชื ืืฆื. ืืื ื Dockerfile ืืืขืืืื ืืืงื ืืช ืชืืงืืืช out ืฉืืืืื ืืช ืงืืฆื ื html ืืกืืืืื (ืืื ืฉื ืืฆืจื ื export), ืืืขืชืืง ืืืชื ืืชืืงืื ืืื ื nginx ืืืืฉ ืืช ืืงืืฆืื ืืกืืืืื ืฉืื.
ืืคืฉืจ ืืื ืืช ืืืืฉ ืืืืจืืฅ ืืืขื ืขื ืืืชื ืคืงืืืืช (ืฆืจืื ืืฉื ืืช ืืช ืืืคืื ืืคืืจืืื ืื nginx ืืืืื ืขื ืคืืจื 80) ืืืชื ืชืจืื ืฉื Dockerfile ืขืืืื ืขืืื, ืืื ืืืชืจ ืืขื ืืื ืืืกืชืื ืขื ืืืื ืืืืื' ืขืืฉืื:
$ docker image ls| grep multistage
multistage-demo latest 76259b691276 About a minute ago 23.8MB
ืืื ืจืืืชื ื ืืื - ืืืื ืืืืื' ืืื ืขืืฉืื 23 ืืื ืืืื, ืืืจืืช ืฉืืื ืขืืฉื ืืืืืง ืืช ืืืชื ืืืจ ืฉืขืฉื ืืืืื' ืฉื ืื'ืืื. ืืกืื ืืื ืคืฉืื ืืืฉืชืืฉ ืืืืืง ืืื ืฉืื ืื ื ืฆืจืืืื.1 419
1. ืื ืื ื ืืืฆืจืื ืืืื'ืื ืขื ืืืื ืช ืืคืืชืื ืฉืื ื ืืฉืื ืื ื ืจืืฆืื ืืกืืืจ ืงืื ืืกืืื ืืืืืื ืืืชื ืืืฉืืื. ืกืืืจืช ืชืืื ื ืฉืืชืืชื ืืืืื' ืืืคืฉืจืช ืื ืืืขืืืจ ืืช ืืชืืื ื ืืืืช ืืฆืืจื ืืืื ื ืืื ืืืื ื ืฉืืจืืฆื ืืช Docker Engine.
2. ืื ืื ื ืืจืืฆืื ืงืื ืืืื ืจืื ืืชืื ืืืื'ืื ืืฉืื ืื ื ืจืืฆืื ืืืฉืชืืฉ ืืื. ืื ืื ืื ื ืฆืจืื ืขืืฉืื ืืกืืก ื ืชืื ืื ืื ื ืืจืืฅ ืงืื ืืืื ืจ ืฉื PostgreSQL; ืื ืื ื ืฆืจืื ืื ืกืืช ืืฉืื ื Elixir ืื ื ืืืื ืืืจืืฅ ืงืื ืืืื ืจ ืฉื ืืืืงืกืืจ; ืืื ืื ื ืจืืฆื ืืืชืื ืืขืจืืช ื Rails ืื ื ืืืื ืืืจืืฅ ืงืื ืืืื ืจ ืฉื ืจืืืืก. ืื ืขืื ืืฉ ืื ืืช ืืืืื' ืฉื ืืฉืื, ืื ื ืืืื ืืจืืข ืืืจืืฅ ืืื ื ืงืื ืืืื ืจ ืื ืืกืคืจ ืงืื ืืืื ืจืื.
ืืื ื 2015, ืืืงืจ ืืืืจืืช ืืืืืืืช ื ืืกืคืืช ืืชืขืฉืื, ืืชืืืงืื ืืื ื ืงืื ืคืชืื ืฉื ืงืจื OCI (ืงืืฆืืจ ื Open Container Initiative) ืฉืืืจืื ืขื ืืฆืืจืช ืกืื ืืจื ืคืชืื ืืคืืจืืืื ืฉื ืงืื ืืืื ืจืื ืืืืื'ืื.
ืืืืืข ื ืืกืฃ ืขื ืืืงืจ ืืืื ืืื ืื ืื ืืื ืฉื ืงืื ืืืื ืจืื ืขืืื ืืชืืช ืืคื ื ืืฉืื ืฉืืื ืืงืจืื ืืช ืืืืืจ ืืงืืฉืืจ:
https://accenture.github.io/blog/2021/03/10/docker-behind-the-scenes.html
1 419
# ืืืฉืืื ืืกืืกืืื ื Docker: ืงืื ืืืื ืจืื ืืืืื'ืื
ืืืงืจ ืคืืชื ืืืืจืช ืืืืกืื ืขื ื ืืฉื dotCloud (ืืืื ืืืจ ืฉืื ืชื ืืช ืฉืื ื Docker Inc) ืืฉื ืช 2013. ืืืืชื ืชืงืืคื ืืืืงืืืื ืืฆืืขื ืืืฆืจ ืฉืืืืข ืืงืืช ืงืื ืืืืืฉื ืฉืืื ืืืืขืืืช ืืืชื ืืืจืฆื ืืขื ื ืฉืืื - ืืืืขืื ืืืจืืืืช ืฉืืืชื ืืื ืืืชื ืืื ืืืขืืืจ ืืช ืืงืื ืืืืื ื ืืืช ืืฉื ืื ืืื ืืฉืืืจ ืืืชื.
ืขื ืืคืืชืื ืฉื ืืืงืจ ืืฉืืื ืืืขืืืจ ืงืื ืืืงืื ืืืงืื ืืืืช ืฆืจืื ืืฉืืคื ืืช "ืืืืจืื ืืืฉืืืื ืืกืืืืช ืืจืืฆื" ืืืืื ื ืืืืฉื. ืื ืื ืืฉ ืื ืชืืื ืืช ืคืืืชืื ืฉืฆืจืืื ืืจืืฅ ืขื ืฉืจืช, ืื ื ืฆืจืื ืืืชืงืื ืขื ืืฉืจืช ืืช ืืืชื ืืืจืกืช ืคืืืชืื ืฉืขืืื ืขืืืชื ืืคืืชืื, ืืช ืืืชื ืกืคืจืืืช ืคืืืชืื ืฉืืชืืื ืืช ืฉืื ืฆืจืืื (ืขื pip install), ืืืืืง ืืงืฉื - ืืช ืืืืงืื ืืืขืจืืช ืืืคืขืื ืฉืจืืืื ืืืื ืืชืืื ืืช ืฉืื. ืื ืืชืืื ืืช ืฉืื ืืฉืชืืฉืช ื Shared Library ืืกืืืืช ืื ืื ื ืฆืจืื ืืืืื ืฉืืกืคืจืื ืชืืชืงื ืื ืขื ืืฉืจืช. ืื ืืชืืื ืืช ืฉืื ืืฉืชืืฉืช ืืชืืื ืืช ืืืฆืื ืืช ืืกืืืืช, ืืืชื ืชืืื ืืช ืฆืจืืื ืืืืืช ืืืชืงื ืช ืื ืขื ืืฉืจืช.
ืืจืื ืคืขืืื ืื ืชืืืืืืืช ืงืื ืืช ืืื ืืืืื ืื ืืกืคืจืืืช ืืืฆืจืื ืืืืื ืฉืงืฉื ืืืืืช ืืืชื, ืืืื ืืืขืืจ ืืคืจืืืงืฉื ืืจืฉ ืชืืื ืชืฉืืืช ืื ืืืืืืช ืืคืจืืื.
ืืืงืจ ืืื ืืืืจ ืืืืืช ืขืืืจ ืชืขืฉืืืช ืืชืืื ื ืื ืฉืงืื ืืืื ืจืื ืืื ืืชืขืฉืืืช ืืกืคื ืืช: ืืื ืืืืืื ืฉืื ืืชืขืฉืืื ืชืชืืืฉืจ ืกืืืื, ืฉืชืืคืฉืจ ืืืขืืืจ ืงืื ืืืืื ื ืืืช ืืืืื ื ืฉื ืื ืืฆืืจื ืืืื ื ืืืื ืืืชืขืกืง ืืคืจืืื. ืืืืื ืืื ืฉืืชืื ืชืช ืชืื ื ืงืืคืกื, ืชืชื ืืช ืืงืืคืกื ืืืืช ืืฆืืืช Devops ืืืืชื ืฆืืืช Devops ืืืื ืืืคืขืื ืืช ืืงืื ืฉืืงืืคืกื ืขื ืื ืืืื ื ืืขืืื.
ืืืจื ืฉื ืืืงืจ ืืืืฉืื ืืช ืืืืื ืืื ืืืชื ืฉืืืืฉ ืืคืืฆ'ืจืื ืฉื Linux Kernel ืฉืืืคืฉืจืื ืืืจืืฅ ืืขืื ืืขืจืืช ืืคืขืื ืืชืื ืืขืจืืช ืืคืขืื. ืกืื ืฉื ืงืืคืกื ืกืืืจื ืืชืื ืืืืฉื ืฉืืืืื, ืืชืื ืืขืืื ืฉืื, ืืชืช ืืืืฉืืืื ืกืืืืช ืจืืฆื ืืืื ืฉืืืืืช ืืช ืื ืืกืคืจืืืช ืืคืืื ืืืกืืกืืืช ืืืืชืจ ืฉื ืืขืจืืช ืืืคืขืื. ืืืงืจ, ืืืื ืืืืืื, ืืืคืฉืจ ืื ืื ืฉื ืงืืคืกืืืช ืืืื ืืืคืขืื ืฉืืื ืืื ืืงืื.
ืืื ืืืื ืืืชื ื ืืฉื ื ืืืืฉืืื ืฉืจืฆืืชื ืืืืจ ืขืืืื ืืคืืกื ืื: ืงืื ืืืื ืจืื ืืืืื'ืื.
ืืงืื ืืืื ืจ ืืื ืืืชื ืงืืคืกื ืกืืืจื ืฉืจืฆื ืขื ืืืื ื ืืกืืืืช. ืงืื ืืืื ืจ ืืื ืกืืืืช ืจืืฆื ืฉืืืืฉืื ืื ืืืืฉืืืื ืฉืจืฆืื ืืชืืื ืจืืืื ืืช ืขืฆืื ืืืืื ืื ืจืฆืื ืืชืื ืืขืจืืช ืืคืขืื ืืกืืืืช, ืขื ืกืคืจืืืช ืืกืืืืืช ืืืื ืขืืืื ืืกืืืืื.
ืืืืืื ืงืื ืืืื ืจ ืฉื ืชืืื ืืช ืคืืืชืื ืืืืื ืื ืืช ืงืื ืืชืืื ืืช, ืื ืืช ืคืืืชืื ืขืฆืื, ืื ืืช ืื ืืกืคืจืืืช ืฉืืชืืื ืืช ืฆืจืืื, ืืื ืืช ืื ืืกืคืจืืืช ืฉื ืืขืจืืช ืืืคืขืื ืืืงืืฆืื ืืืขืจืืช ืืืคืขืื ืฉืืชืืื ืืช ืืฉืชืืฉืช ืืื. ืืืขืฉื ืื ืืืืื ืืงืื ื ืืช ืื ืืืืฉื ืืืชืืื ืืช ืืืื ืขื ืืขืจืืช ืืืคืขืื, ืืจืื ื ืืช ืืื ืืื ืืืจืฆื ื ืืช ืื ืขื ืืืื ื ืืืจืช.
ืขื ืืืฉื ืคืืื ืืื ืืคืฉืจ ืืืจืืฅ ืืื ืงืื ืืืื ืจืื ืฉืื ืื ื ืจืืฆืื, ืืืืืง ืืื ืฉืืจืืฆืื ืชืืื ืืืช ืจืืืืืช. ืงืื ืืืื ืจ ืืืืืจ ืืืื ื ืืืจืืืืืืช, ืืืื ืฉืืชืืื ืจืฆื ืืขืจืืช ืืคืขืื ืืืื ืขื ืื ืืืืื ืืืกืคืจืืืช ืฉืื - ืืื ืื ืืฉืืื. ืืงืื ืืืื ืจ ืืืืงืจ ืืื ืชืืื ืืช ืจืืืื, ืฉืจืฆื ืืชืื ืืขืจืืช ืืืคืขืื ืฉื ืืืืฉื ืืืืจื. ืืกืืื ืืืช ืืืืฆืืขืื ืฉื ืงืื ืืืื ืจืื ืื ืืืื ืืืืื ืืืชืืจ ืืชืื ืชืื ืงื ืื ื ืืืจืืฅ ืงืื ืืืื ืจ ื ืคืจื ืืื ืืคืืืงืฆืื ืฉืื ืื ื ืขืืืืื ืืืชื.
ืืื ืงืื ืืืื ืจ ืืื ืชืืื ืืช ืฉืืจืืข ืจืฆื ืขื ืืืืื ื ืืชืื ืงืืคืกื ื ืคืจืืช, ืื Container Image ืืื ืืชืื ืืช ืฉืืื ื ืื ืื ื ืืืืฆืจืื ืงืื ืืืื ืจืื. ื Image ืืื ืืืืจ ืฉืืคืฉืจ ืืงืืืช ืืฉืืื ืืืืื ื ืืืืื ื. ืืืืก ืืื ืงืื ืืืื ืจืื ืืืืื'ืื ืืืืืจ ืืช ืืืืก ืืื ืงืืืฅ ืชืืื ืืช ืืชืืืื ืขื ืืืืฉื - ืืืืื' ืืื ืืงืืืฅ, ืืืฉืืคืขืืืื ืืืชื ืืงืืืื ืงืื ืืืื ืจ.
ืืื ืืข ืฉื ืืืงืจ (Docker Engine) ืืื ืจืืื ืชืืื ื ืฉืืืืข ืืื ืืช ืงืื ืืืื ืจ ืืชืื ืืืื'. ืืื ืขื ืื ืืืื ื ืฉืืจืืฆื Docker Engine ืื ื ืืืื ืืงืืช ืื ืืืื' ืฉืชืืื ืื ืืืืฆืืจ ืืื ื ืงืื ืืืื ืจ.
ืืืื' ืืืืงืจ ืืืจืื ืืงืืฆืื, ืืื ืงืืืฅ ืืืืฆื "ืฉืืื" ืฉื ื ืชืื ืื. ืืฉืืื ืืข ืฆืจืื ืืืจืืฅ ืงืื ืืืื ืจ ืืืืืื', ืืื ืืืื ืืช ืื ืืฉืืืืช ืืืขืจืืช ืงืืฆืื ืืืช ืฉืืืืืช ืืช ืื ืืงืืฆืื ืืื ืืฉืืืืช. ืืชืืื ืืงืืืฅ ืืืืื' ืคืฉืื ืืืฆืจืช ืฉืืื ืืืฉื. ืืื ื ืืฉืืืืช ืฉื ืืืืื' ืืืคืฉืจ ืืืื ืืงืืืช ืืืฆืืจ ืืืื' ืืชืื ืืืื', ืืื ืืืืื ืืช ืืืกืืก ืืื ืืืช ืืงืื ืืืื ืจืื.
ืืฉืืื "ืืืจืืฅ" ืืืื', ืืืืืจ ืืฉืืื ืืื ืืช ืงืื ืืืื ืจ ืืชืื ืืืื', ืืื ืืข ืฉื ืืืงืจ ืืืงื ืืช ืืืืื' ืืืืกืืฃ ืขืืื ืฉืืื ืืืฉื ืฉื ืืขืจืืช ืงืืฆืื ืืื ืืจืงืืืืืช. ืืืกืคืช ืืฉืืื ืืืืฉื ืืื ืชืืืื ืืืขื ืืืืื ืืืื ืืจืฆื ืฉื ืงืื ืืืื ืจ ืืชืื ืืืื' ืืื ืืืื ืืืืจื. ืืฆื ืืืคืชืืข ืืฉืืืช ืืขืืืื ืืืืช ืืื ืฉืงืื ืืืื ืจืื ืื ืืฉืืืืช ืืื ืืืช. ืื ืืงืื ืืืื ืจ ืืืชื ืงืืืฅ ืืืขืจืืช ืืงืืฆืื ืฉืื, ืืจืืข ืฉืืงืื ืืืื ืจ ืืืกืืจ ืืงืืืฅ ืืืขืื ืืื ืืืชื.
ืืขืืืื ืฉืื ื ืขื ืืืงืจ ืืืืืช ืฉื ื ืื ืื ืื ืื ืฉืื ืืื ืืื ืืชืจืืฉ ืืืื ืฉืื ื:
1 419
# ืชืืื ืืช ืืืืื ืจืื ืืืืืฉืื ืืงืจืืืื
ืงืืจืืื ืืืชืืงืื ืืืจ ืืืืขืื ืฉืืื ืืื ืืืืฉื ืืจืืฉืื ืฉื ืืืืืฉ ืื ื ืืขืืืจ ืืืื ืืืืื ืจ ืขื ื ืืฉื ืืื ืืืืื ืืขื ืืื. ืืืืงืจ ืกืืจืชื ืืช ืืชืืื ืืช ืืฉืืืฉืช ืืืืืฉืื ืืงืจืืืื ืืื ื ืื ืฉืฆืคืื ืื ื:
## ืืคืจืื - ืืืืจืืช ืขื Solid.JS
ืืคื ื ืืื ืืืื ืืชืืชื ืคื ืขื ืกืืืื, ืฉืืืชื ืืฉืืืื ืืืื ืืืื ืจืืฉืื. ืืื'ื ืื ืฉื ืกืืืื ืืืืืจื ืื ืืช ืืืืจืื ืฉืืืืชื ืืจืืืงื - ืืืื ืืชืช ืืืคืชืืื ืืื ืขืืืื ืืืืื ืืื ืืืืื ืื ืืืชืจ ืืื ืืื ืฆืจืื ืืงืืื.
ืกืืืื ืืื ืคืจืืืืืืจืง ืจืืืงืืืืืช ืืืืื ื Vue, ืืื ืืฉ ืื ืืจืื ืคืืืช ืชืืืืจ ืืืฉ. ืืคืชืื ืจืืืงื ืืฆืืืื ืืืืืช ืืขืืืื ืืกืืืื ืชืื ืืื ืืืื ืงืฆืจ.
ืืืืืื ืจ ื ืจืื ืื ืืืืื ื Solid.JS ืืขืืืช ืจืืืงื (ืืืขืืืช Vue), ืืืืืื ื ืื ื ืคืจืืืงื ืืืืืืืืช ืงืื ืืื ืืืืืืฉ ืื ืืืช ืืื ืงืืืืช. ืืคืจื ืื ื ืืชืื ื:
1. ืืืฆืื ืกืืืจืืจ ืืชืืื ืืช Solid.JS
2. ืืืืื ืืช ืืืืื ืืื ืืจืืืงืืืืืืช ืฉื ืกืืืื ื Virtual DOM ืฉื ืจืืืงื.
3. ืืื ืืช ืงืืืคืื ื ืืืช ืืืืืจ ืืื ืืื.
ืืคืจืืื ื ืืกืคืื ืืืจืฉืื ืืืืืื ืจ ืื ืืืืื ืื ืืืงืจ ืืืฃ ืืืืืื ืจ ืืงืืฉืืจ https://www.tocode.co.il/workshops/116.
## ืืื - ืชืื ืืช ืืืืืจ ืขื Rabbit MQ
ืืื ืืืืฉื ืืจืืฉืื ืฉื ืืื ืืื ืืื ืืขืฆืืืืช ืืืื ืืืืชื ืืช ืืืืืื ืจ ืืฉืืืข ืืฉื ื ืฉื ืืืืืฉ.
ืืืื ืื ืืฉื - ืฉืืืฉืช ืชืืจื ืืืืืขืืช ืฉืืฆื ืื ืืขืืื ืืืชื ืื ZeroMQ ื Kafka. ืืชืืื ืงืคืงื ืืื ืื ืจืื ืืืคืืจืกื ืืืืชืืืื ืืืืื, ืืืจื ืขืืืื ืืฆืืื ืืืืื ืืืชื ืืจืืื ื ืฉืืจ ืืืืืจื ืฉืื ืืคืจืืืงืืื ืืื ืืฉ ืื ืืืืจื.
ืืืืืื ืจ ืืจืฆื ืืืจืืืช ืืกืคืจ ืชืื ืืืช ืืชืื ืืช ืืืืืจ ืืืืฆืขืืช ืชืืจ ืืืืขืืช, ืืชืืจ ืืืืืขืืช ืืืืืืช ืืืืฉืืื ืืืื ืจืืื. ืจืฉืืชื ืืชืืื ืืช ืฉืื ื ืจืืฆื ืืืืจ ืขื ืฉืืืฉืช ืืชืื ืืืช:
1. ืชืืืื ืืจืืื ืฉืืืฆืื ืืฉืืืืช ืืชืืืื ืจืงืข.
2. ืงืืืฆื ืฉื ืกืจืืืกืื ืฉืื ืืื ืืื ืฆืจืื ืืืืื ืืืจืช ืืืืจืืข.
3. ืืืคืื ืืืืจืืข ืืชืื ืืกืคืจ ืกืจืืืกืื ืืคื ืกืืจ ืงืืืข.
ืื ืืชื ืืืืจืื Node.JS ืืขืืฉืื ืืช ืืฆืขืืื ืืจืืฉืื ืื (ืื ืืฉื ืืื) ืืขืืื ืืชืื ืืช ืืืืืืจ, ืืืืื ืจ ืื ืืืืจ ืืืืืช ืืืื ืืขื ืืื ืขืืืจืื. ืืคืจืืื ื ืืกืคืื ืืืจืฉืื ืืงืจื ืืืฃ ืืืืืื ืจ ืืงืืฉืืจ https://www.tocode.co.il/workshops/115.
## ืืื ื - ื ืืืื ืืฉืชืืฉืื ื Auth0
ืืืืืืฉ ืืื ื ืจืฆืืชื ืืืืฉืื ืขื ืื ืืฉื ืฉื ืชืื ืืช ืืืืืจ ืืืคืขื ืืขืืืจ ืขื ื ืืฉื ืฉื ืืืืืืช ืื ืืืื ืืฉืชืืฉืื. ืืคืจืืืืงืืืื OAuth ื Open ID Connect ืื ืืืจื ืืืงืืืืช ืื ืื ืืฉืชืืฉืื ืืืขืจืืช ืืืืืจืช. ืื ืงืฆืช ืงืฉืื ืืืืืื ืื ืืฉ ืืื ืืืื ืืืฉืืื ืืืืคืื ืืืงืจืื ืืชืืืืื ืขืืืื ืืืืื ืื.
ืืืืืื ืจ ืืกืืืจ ืืช ืืชืืืืืื ืืืจืืืืื ืฉ OAuth ืืืคื ืืื, ืืจืื ืกืคืฆืืคืืช ืืื ืขืืื Single Sign On, ืืื ืื ืืืื ืืจืฉืืืช ืืืื ืฆืจืืืื ืืืชื ืื ืงืื ืฆื ืืงืื ืืงืื ืฆื ืฉืจืช ืืืขืจืืช ืืืืืจืช ืืืืืืช ืืืืจืช ืืฉืชืืฉืื.
ืืช ืื ืืืืืืืช ืื ื ืืจืื ืขื ืฉืืจืืช Auth0 ืฉืืื ืฉืืจืืช ื ืืืื ืืฉืชืืฉืื ืืืืืืชื ืืืคืชืืื. ืงืื ืฆื ืฉืจืช ืืืฆื ื Node.JS ืืงืื ืฆื ืืงืื ื React. ืื ืืชื ืืืืจืื ืืช ืืืื ืืืืืืืช ืืขืืืืื ืขื ืืขืจืืช ืืืืืจืช (ืื ืจืืฆืื ืืขืืื ืขื ืืืช) ืฉืืื ืืืฆืืจืฃ. ืคืจืืื ืืืจืฉืื ืืงืืฉืืจ https://www.tocode.co.il/workshops/114.
ืืงืืืืช ืฉื ืืืืื ืจืื ืขืืืืช ืืืชืจ ืืื ืืืื ืืืจื ืืืืจืืข ืืืฃ ืืงืืืืช ืืืืืื ืจืื ืืืืืืืืช ืืงืื ืืืื ืืช ืืืืืืื ืืงืืฉืืจ:
https://github.com/tocodeil/webinar-live-demos
ืืงืืื ืืจืืืชืื,
ืื ืื
1 419
ืืืงืจ ืืื
ืขืื ืขืฉืจ ืืงืืช (ืืฉืขื 10:00) ืืชืืื ืืืืื ืจ ืขื ืืขืืืช ืืืฉืื Node.JS ืืงืืืกืืจ ืงืืืจื ืืืก ืืคืจืืืงืฉื
ืื ืฉืืขืื ืืื ืืืืื ืื ืืืฆืืจืฃ ืืงืืฉืืจ:
https://us06web.zoom.us/j/86168203144?pwd=b1YvdnVQWnVDd25Vc016WDFURTN1UT09
1 419
# ืืชื ืืื ืืช ืืื
ืืขืืื ื npm ืืืคืืชืจืื ืืช ืืืื ืกืืคืืื ืื ืืื ืฉื ืืชืื ืชืื ืจืืื ืืื ืืืืื "ืืืฉืื ืืืจ ืืื ืื ื ืืช ืื" ืคืืืช ืื ืืืชืจ ืขื ืื ืืขืื ืฉื ืชืงืืื ืื, ืืืืจื ืืืกืื ืืื ืืืื ืืช ืขื ืืฆืืื ืฉื ืืืจืื. ืืื ืื ืงืืจื ืืฉืื ืืกืืื ืืืชืืกืก ืขื ืขืืืื ืฉื ืืืจืื ืืืืงื ืืืืื ืื ื ืืื? ืืืชื ืื ืื ื ืขืืฆืจืื ืืืชืืื ืื ืืืื ืืื ืืช ืืื?
ืืฉ ืฉืชื ืกืืืืช ืืจืืืืืช ืืฉืืืืฉ ืืคืืชืจืื ืงืืื-
1. ืฉืืืืฉ ืืงืื ืงืืื ืืืคื ืืช ืืืขืจืืช ืฉืื ืืกืื ืืจืืืช ืืืชืจ ืืื ืงื ืืืชืจ ืืืืืก ืืชืื ืชืื ื ืืกืคืื ืืืื ืงื ืืืชืจ ืืืืื ืก ืืืจ ืืขื ืืื ืื. ืืื ืืงืืคื ืืืืืจื ืืืจืืืืื ืฉื ืจืืืืก ืืฉืืื ืจืง ืืฆืื ืืื ืืืืืื ืฉืฉืจืจ ืืขืืื ื PHP ืืืืชื ืชืงืืคื, ืืืืขื ื ืฉืืฆืื ื ืืจืืืืก ืื ืืคืจืืืงืืื ืืืืขืื ืืืืชื ืืื ื ืชืืงืืืช ืืืชืื ืชืื ืืืืื ืืงืืืช ืืขืืืจ ืืื ืคืจืืืงืืื. ืืืื ืืจืืจ ืืืืจื ืฉืืืชืจ ืงื ืื ืืืืืก ืืชืื ืชืช ืืคืจืืืงื ืจืืืงื ืืืฉืจ ืืชืื ืชืช ืืคืจืืืงื ืฉืืฉืชืืฉ ื Framework ืฉืื ื ืืืฆืืชื. ืืืืืืกืช ืืืจืื ืืืืขืช ืฉืขื ืืื ืืืืืื ืฉืืื ืืืืจื ืืื ืชืืื ืืืชืืื ืืืืืช ืคืจืืืืงืืืืืช ืืจืื ืืืชืจ ืืืจ, ืืฉืขืืืื ืืจืืืงื ืชืชื ืื ื ืืกืืื ืืขื ืขืจื ืืงืจืืช ืืขืืืื ืืืื.
2. ืฉืืืืฉ ืืงืื ืงืืื ืืืคืฉืจ ืื ืืืกืื ืืื ืคืืชืื ืืืืฆืขืืช ืื ืื ืขื ืขืืืื ืฉื ืืืจืื. ืืืืื ืืืื ืืื ืื ืฉืืื ืขืืื ืคืืชืื ืืืื ืืืืื ืฉื jQuery, ืืฉืืืื ื ืฆืจืืืื ืืืชืืื ืืชืจืื ืืืกืคืจ ืืคืืคื ืื ืืืื ืืื ืกืืฃ ืืจืืงืื ืฉืืืืช ืฆืจืื ืืืชืื ืืื ืฉืืืจืื ืืขืืื ืืื ืืื ืืงืื. ืกืคืจืื ืืื jQuery ื ืชื ื ืืืฉืง ืืืื ืฉืขืืื ืืื ืืงืื, ืืื ืืกืื ืืืืชื ืชืื ืขืืืื.
ืืื ืื ืืื ืืืช ืคืืชืจืื ืืื ืืฉ ืืชืจืื ืืช, ืืืืืื:
1. ืืชืื ืชืื ืฉืืื ืื ืคืืชืจืื ืืื ืืืื ืื ืืื ืืืชืจ ืืช ืืืขืืืช, ืืืขืชืื ืืืืข ืืื ืืขืืืจ ืื ื ืืืืืจ ืคืืชืจืื ืืืื ืืื ืืืชืจ ืื ืืืชืืื ืคืืชืจืื ืืืฃ ืืฆืจืืื ืฉืื ื.
2. ืคืืชืจืื ืฉืื ืื ื ืืื ืืืื ืืืืืง ืืืกืืื ื ืืืชืจ ืืืฉืืืื ืืคืืชืจืื ืืืฃ. ืืคืืชืจืื ืฉืื ื ืฆืจืื ืืคืชืืจ ืจืง ืืช ืืืขืื ืฉืื ื, ืืขืื ืฉืคืืชืจืื ืืืฃ ืคืืชืจ ืขืื ืืืื ืืขืืืช ืฉืืืื ืื ืจืืืื ืืืืช ืืืื ื.
3. ืคืืชืจืื ืฉืื ืื ื ืืื ืืืฉืคืข ืจืง ืืืคืืืืืืงื ืืคื ืืืืช ืฉืื ื, ืืื ืืืื ืืจืกืื ืฉื ืืืจืื.
4. ืืืจื ืืื ืืืื ืื ืืืชืจ ืงื ืืชืงื ืืืืื ืื ืืืืกืืฃ ืคืืฆ'ืจืื ืืคืืชืจืื ืฉืื ื ืืชืืชื, ืืืฉืจ ืืืชืืื ืืชื ืืืืช ืฉื ืคืืชืจืื ืืืฆืื ื ืฉืืื ืื ืฉืืืื ืขื ืืงืื ืฉืื.
ืืกืืฃ ืืฉืืงืื ืืื ืืื ืืช ืืื ืื ืืงืืช ืคืืชืจืื ืืืื ืฆืจืื ืืืืืช ืฉืืงืื ืืงืฆืืขื ืืชืืื ืืฆื. ืื ืืชื ืืืฆืืื ืืช ืขืฆืืื ืชืืื ืืืืจืื ืืืืฉื ืืืช ืื ืืฉื ืื, ืฉืืื ืื ืกืืช ืืืืื ืืื ืืจืืืช ืืื ืื ืืจืืืฉ, ืืืื ืืื ืืืฆืื ืืช ื ืงืืืช ืืืืืื ืฉืชืชืืื ืืืืฆืจ ืฉืืื.
1 419
ืืืื ืฉืกืืืื ืืืฉื ืืืืฉ ืจืง ืืช ืืงืืขืื ืืชืื ื Virtual DOM ืฉืืฉืชื ื, ืืื ืืื ืืืื ืืื ืืช ืื ืื ืื ืืฉืื ืขืืืจ ืืืืืืช ืืชื ืืื. ืืชืจืืื ื JavaScript ืืืืืื ื ืจืืืช ืื:
insert(_el$2, createComponent(For, {
get each() {
return range(n);
},
children: (item, index) => createComponent(Text, {})
}), null);
ืื ืืืงืชื ืืืฆืืขืื ืืื ืืืคืฉืชื ืืขืืืช. ืื ื ืื ืืืืข ืขืืืื ืืื ืื ืขืืื ืืืืื ืช ืืคืชืืืช ืืืื ืืื ืื ืืืงืฉ ืฉืื ื ืืืืืจ key ืืื ืคืจืื. ืื ืืฉืื ืฉืืืื ืืขื ืืื ืืืืืง.
ืืคืฉืจ ืืฉืืง ืขื ืืืืืื ืืฉื ืื ื Playground ืฉืืื ืืงืืฉืืจ https://bit.ly/36IOdlE
## ืืฉืืืช ืืืืข ื API
ืืืืืื ืืืืจืื ื ืื ื ืจืืฆื ืืืฉืื ืืืืข ื API ืืืืฆืขืืช fetch. ืื ื ืืืืืจ ืงืืืคืื ื ืื ืฉื ืคืืงืืืื ืฉืชืืงื ืคืจืืืจ id ืืชืืฉืื ืืช ืืฉื ืฉื ืืคืืงืืืื ืืฉืจืช pokeapi.co. ืื ืคืขื ืฉื id ืืฉืชื ื ื ืจืฆื ืืืฉืื ืืืืฉ ืืช ืืืืืข ืืืืฆืื ืืช ืืฉื ืืืขืืืื.
ืื ืืงืื:
import { render } from "solid-js/web";
import { createSignal, For, splitProps, createEffect } from "solid-js";
function Pokemon(props) {
const [local, others] = splitProps(props, ["id"]);
const [name, setName] = createSignal("");
createEffect(async () => {
let isActive = true;
const url = `https://pokeapi.co/api/v2/pokemon/${local.id}`;
console.log(`Fetching url ${url}`)
setName('');
const res = await fetch(url);
const data = await res.json();
if (isActive) {
setName(data.name);
}
onCleanup(() => { isActive = false });
});
return (
<p>Pokemon {local.id} is named {name}</p>
)
}
function App() {
const [id, setId] = createSignal(1);
return (
<>
<input type="number" value={id()} onInput={(e) => setId(e.target.value)} />
<Pokemon id={id()} />
</>
);
}
render(() => <App />, document.getElementById("app"));
ืืจืื ืืืจืื ืืขื ืืื ืื ืืื:
1. ืืคืื ืงืฆืื createEffect ืืื ืืืงืืืื ืืกืืืื ื useEffect, ืืื ืืื ืื ืฆืจืืื ืืงืื ืืขืจื ืฉื ืืืจืื ืฉืืฉืคืืขืื ืขื ืืืคืงื. ืืืืคื ืืืืืืื ืืื ืืกืชืืืช ืขื ืงืจืืืืช ื getters ืืชืื ืืคืื ืงืฆืื ืืืืฉืคืขืช ืจืง ืืฉืื ืืืื ืืืฉืชื ืื ืืื.
2. ืืืงืื ืฉืคืื ืงืฆืืืช ืืคืงื ืชืฆืืจื ืืืืืืจ ืคืื ืงืฆืืืช ืืืืื ืืืคืงื, ืืฉ ืื ื ืคืื ืงืฆืื ืืฉื onCleanup ืฉืืงืืืช ืืช ืคืื ืงืฆืืืช ืื ืืงืื.
3. ืคืืขื ืื ื Properties ืืืจืฉ ืืืคืื ืืืืื:
const [local, others] = splitProps(props, ["id"]);
ืืืื ืฉืืื ืจืืืงืืืื, ืื ื ืื ืืืื ืืืฉืชืืฉ ื Destructuring ืจืืื ืื ืื ืืืจืื ืืืขืชืงืช ืืืืืืงื ืืืืืืื ืืจืืืงืืืืืืช. ืืื ืกืืืื ืืื ืฆืจืืืื ืืชืช ืื ืคืื ืงืฆืื ืืืืืืช ืฉืืืงืืช ืขืจืืื ื props ืืืืคืืช ืืืชื ืืฉืืืช ืจืืืงืืืืืื ืฉื ืืืืืืงื local. ืืื ืื ื ืฆืจืื ืืืืื ืืืื ืฉืืืช ืื ื ืจืืฆื, ืืืืฉืชื ื others ืืืคืฉืจ ืืืขืืืจ props ืืืื ืืงืืืคืื ื ืืืช ืืืืื ืฉืื ื ืืืฆืจ.
ืืืืืื ืืฉืืง ืขื ืืงืืืคืื ื ืื ืืืืจืื ื ื Playground ืฉืืื ืืงืืฉืืจ https://bit.ly/3toBdJC.
ืกื ืืื ืืฉ ืืฉืื ืืคื ืืืืฉื ืืจืืืงืืืืืช ืฉื ืกืืืื ืืจืื ืืงืื ืฉืืชืืชื ืื ืคืฉืื ืขืื. ืืืืชื ืืช ืืืืืฉืืช ืฉืืคืฉืจ ืืืฆืืจ ืืฉืชื ื State ืื ืืืืฅ ืืงืืืคืื ื ืืืช ืืืกื ืืื ืืชืจ ืืชืืขืื ืฉืืื ืื Playground ืขืืืืื ืืืฉ ืืกืืจ. ืืืืืข ื ืืกืฃ ืืืื ืกืืฃ ืืฉืืืื ืขืืื ืืืืืฅ ืืืื ืืจืฉืืื ืืืืช:
https://github.com/one-aalam/awesome-solid-js.1 419
# ืฆืขืืื ืจืืฉืื ืื ืขื ืกืืืื
ืกืืืื ืืื ืคืจืืืืืืจืง ืจืืืงืืืื ืืคืืชืื ืฆื ืืงืื ืฉืืงื ืืฉืจืื ืืืื ืืืืื ืืจืืืงื ืืืืื ืช ืืชืืืืจ, ืืื ืืืืืข ืืช ืืจืืืงืืืืืืช ืืฆืืจื ืืืื ืืืชืจ ืืืฉืจ ืจืืืงื. ืืคืฉืจ ืืืฉืื ืขืืื ืืื ืืืืื ืืื ืจืืืงื ืืืืืืงืก, ืจืง ืขื ืืจืื ืคืืืช ืืืฉืืื ืฉืฆืจืื ืืืืืจ.
ืืืืืจ ืืื ื ืืืฉื ืฉืืืจื ืืื ืืืื ืืืืจ ืขื ืคืจืืืืืืจืง ืืื ืืจืืืช ืงืื ืฉืืชืื ืื - ืืื ืชื ืืื 3 ืชืืื ืืืช ืืืืื ืงืื ืืช ืขื ืกืืืื ืฉืืขืืจื ืื ื ืืืืื ืื ืืืืื ืื.
## ืืื ื ืืืืฆืืช
ืชืืื ืืช ืจืืฉืื ื ืฉื ืจืื ืืกืืืื ืืื ืื ืืชืืื ืืช ืืจืืฉืื ื ืฉืืืคืืขื ืืืืคืืืื ืืืชืจ ื playground ืฉืืื - ืืื ืืื ื ืืืืฆืืช:
import { render } from "solid-js/web";
import { createSignal } from "solid-js";
function Counter() {
const [count, setCount] = createSignal(0);
const increment = () => setCount(count() + 1);
return (
<button type="button" onClick={increment}>
{count()}
</button>
);
}
render(() => <Counter />, document.getElementById("app"));
ืืชื ืืืืืื ืืคืชืื ืืืชื ื Playground ืืงืืฉืืจ https://bit.ly/3tlqP5r.
ืขืืฉืื ืืงืื:
1. ืืคืื ืงืฆืื createSignal ืืืืืคื ืืช useState. ืืื ืืืืืจื ืืขืจื ืฉื "ืขืจื" ื"ืคืื ืงืฆืืืช ืขืืืื". ืขื ืคื ืืื ืืคืชืขืืช.
2. ืืืื ืืืื ืจืืฉืื ืืจืืืงื ืฉืื ืื ื ืืืจ ืจืืืื ืืื ืฉื"ืขืจื" ืืื ืืขืฆื ืคืื ืงืฆืื. ืืฆืืจื ืืืืช ืื ืื ื ืื ืฆืจืืืื ืืช ืืืชืืื ืืืคืืื ืฉื ื setter ืืชืืื ืืฉืชืืฉืื ืืคืื ืงืฆืืืช ื getter ืืื ืืงืื ืืช ืืขืจื ืืขืืื ื. ืืืช ืืฉืืจื:
const increment = () => setCount(count() + 1);
ืืขื ืืื ืื ืืจืืืช ืืื ืกืืืื ืืชืจืื ืืช ืงืื ืืงืืืคืื ื ืื ืืงืื JavaScript ืจืืื. ืื ืืืื ื React ืฉืคืฉืื ืืืคื ืื ืืืื ื jsx ืืงืจืืื ืืคืื ืงืฆืื createElement, ืกืืืื ืืคืฆื ืืช ืืงืื. ืื ืืชืืื ืฉืืืคืืข ืืืื output ืฉื ืืืจืฉ ืืืฉืืงืื:
import { template, render, createComponent, delegateEvents, insert } from 'solid-js/web';
import { createSignal } from 'solid-js';
const _tmpl$ = template(`<button type="button"></button>`, 2);
function Counter() {
const [count, setCount] = createSignal(0);
const increment = () => setCount(count() + 1);
return (() => {
const _el$ = _tmpl$.cloneNode(true);
_el$.$$click = increment;
insert(_el$, count);
return _el$;
})();
}
render(() => createComponent(Counter, {}), document.getElementById("app"));
delegateEvents(["click"]);
ืื ืื ื ืจืืืื ืฉืกืืืื ืืคืจืื ืืื ืืืืง "ืืงืืืข" ื DOM - ืื ืื ืฉืขืืืจ ืืคืื ืงืฆืื template ืฉืืื, ืืืื ืืืืง ืืืฉืชื ื ืฉืื ืื ืฉืขืืืจ ืืคืื ืงืฆืื insert. ืืคืืฆืื ืืื ืืื ืฉืืืคืฉืจ ืืกืืืื ืืขืืื ืจืง ืืช ืืืืงืื ื DOM ืฉืืฉืชื ื ืืื ืฉืืฆืืจื ืืืฉืืืช ืืื ืขืฆื DOM ืืืจืืืืืืื.
## ืืืฉ ืชืืืืช ืืงืกื ืืกืื ืืจื ืืช
ืืืืืื ืืฉื ืื ืฉื ืกืืืื ืืืจ ืืชืืืื ืืืคืชืืข. ืืงืื ืืื ืืฆืื 5 ืชืืืืช ืืงืกื ืืกืื ืืจื ืืช, ืืืืืจ ืฉืื ืื ืืืงืกื ืืืืช ืืชืืืืช ืืขืืื ืืช ืื ื-5:
import { render } from "solid-js/web";
import { createSignal, For } from "solid-js";
const range = (n: number) => (new Array(n)).fill(null).map((_, i) => i);
const [text, setText] = createSignal("");
function Text() {
function handleInput(e: InputEvent) {
const input = e.target as HTMLInputElement;
setText(input.value)
}
return (
<input type="text" value={text()} onInput={handleInput} />
);
}
function App() {
const n = 5;
return (
<div>
<p>n={n}</p>
<For each={range(n)}>
{(item, index) => <Text />}
</For>
</div>
)
}
render(() => <App />, document.getElementById("app"));
ืืคืชืขื ืจืืฉืื ื ืฉืื ืื ื ืจืืืื ืืงืื ืืื ืฉืืืฆืืชื ืืช createSignal ืืืืฆื ืืืงืืืคืื ื ืืืช ืืืคืืชื ืืช ืืชืืฆืื ืฉืื ืืืฉืชื ื ืืืืืืื. ืืช ืื ืื ืืคืฉืจ ืืื ืืขืฉืืช ืืจืืืงื - ืื useState ืฉื ืจืืืงื ืืืื ืืืืืชื ืืชืื ืงืืืคืื ื ืื. ืืืืจ ืืื ืงืจืื ืืจืืืงื ืืื ืฉืืชืืชื ืืื ืืืื ืงืื ืืงืกื, ืืื ืจืื ืืชืื ืชื ืจืืืงื ืคืฉืื ืืืืืจื ืืช ื State ืืงืืืคืื ื ืื App ืืืขืืืจื ืืืชื ืืชืืจ Property ืืืืืื.
ืืื ืืขืื ืืื ืืื ืืืืืื ืืจืืืช ืื ืฉืฉื ืืืืจืืข ืฉื ืืฉืื ืื ืืฉืชื ื ื change ื input ืืื ืืืืฉืจ ืงื ืขื ืงืื DOM ืกืื ืืจืื:
<input type="text" value={text()} onInput={handleInput} />
ืืืืื ืืฉืื ืื ืืื ืืืื ืืจืืืงื ืื ืืืืืื:
<For each={range(n)}>
{(item, index) => <Text />}
</For>1 419
# ืืืค ืืืงืจ - ื ืืงืื volumes ืฉืืื ื ืืฉืืืืฉ
ืืช ืืคืงืืื ืืืืคืืื ืืืื ืืืืืชื ืจืง ืื ืืืื, ืืืื ืืืจ ืืฆืืืื ืืคื ืืช ืื 30 ื'ืืื ืืืืกืง ืืื ืืืชืืืฅ. ืืื ื ืงืจืืช:
$ docker volume prune
ืืขืืืื ืขื ืืืงืจ ื docker compose ื ืืฆืจืื ืื ืืืื Volumes, ืืื ืืืชื Volumes ืื ื ืืืงืื ืืขืืืื ืืฉืืืคืช (ืืื ืื ืื ืืืงืชื ืืืชื ืืฆืืจื ืืืืื). ืืืืืื ืืขืฆืื ืื ื Anonymous Volumes, ืืืืืจ Volumes ืขื ืฉื ืืงืจืื ืฉื ืืฆืจืื ืืืืจืืช Volume ื Dockerfile ืฉื ืืืื'ืื ืืกืืืืื, ืืืชื ืืคืืื ืื ืืืืขืื ืฉืืฆืจืชื ืืืชื.
ืืคืงืืื prune ืืืืงืช ืืืื ืืืช ืืช ืื ื Volumes ืฉืืื ื ืืฉืืืืฉ, ืืืืืจ Volumes ืฉืืฃ ืงืื ืืืื ืจ ืื ืืฉืชืืฉ ืืื. ืื ื ืืคืื ืฉืืืคืืข ืืฆืื ืืืืช ืืืคืขืืืช:
WARNING! This will remove all local volumes not used by at least one container.
Are you sure you want to continue? [y/N] y
Deleted Volumes:
af3aae34cdad2d27ce238052ad76066f5007a994afd8e43e630ed1e065e1adc2
1bd5b35c4b045efcedab000946b4b0cc47a31c6ab9797aa7c15abe68a187dd24
215e9ed82a1248713a37856d91bef06322a0aeba29983bb3bda73c6d3474975f
81800e9125a43c536733d540776576c459857fa161aad9a022089ce9f29f4b39
b86e5619f32e50c1750d06463f93f1222b0a1cb654961b03eb05f693602036d5
21053b79f98090cef2ed0d2e370aab1c87902712554fe106fcdf7776ad49e432
36da000251fd03a84d7d7aad5d1387b88067993d4db37f93be101ee6b39a8fa0
7f46b0540d958befaaa9eba7f546f58ac345d43aca76d78c82fd6fa0f2310a9d
0503e2f1595109e47fe34520f50d0cae62bf61829b110329b1736dead696a36a
38487902f058dd998a018d694c6a0415df30f1764caccd06aaefed7bcdc7f4f9
9262a4d3d727b2ed8ec6d1eb53f9d12666492a31b7b156bdbf25c2cc4f9e72ba
85acc9837d945b8da346e0a3005a41f25f11bbe6dba3254acf0b050ea760f99b
f84ef10a22b6c39e4b500fff3dd2ab41a47d9c3c16521c72f51accf3ee9ae733
25b3e355acae3df348d705e90b932b2152e42c74a2e522352244b7a461a7854b
c887268872c39fff371c05f59989d35e0ed2662c784fde35c65a31622ef3cb90
3a69d7d9f5e96c566f39aedc8b3fc6c07d8bea3beebd47c3c624cc5e4dae593b
491272fb1d91144b92ad990edb92cf8d15a7ebfbf26d7b8d4bbc2c3a077c2166
b75c33d193925f9cbd059e863eb9e44e0612fd5614716eac7de4cbc5847dfbd8
Total reclaimed space: 2.519GB
ืืืื ืฉืื ื ืืฉืชืื ืืืืืช ืืกืืืจ ืืืืืืง Volumes ืืืจื ืฉืื ื ืืืฆืจ ืืืชื, ืืคืฉืจ ืืจืืืช ืฉืจืื ื Volumes ืฉ prune ืืืง ืืื ืืืื ืื ืื ืืืืื. ืื ืื ืืคืจืืข ืืื ืืชืคืืก 2.5 ื'ืืื ืฉื ืืงืื ืขื ืืืคืืืค ืฉืื - ืืงืื ืฉืขืืฉืื ืื ื ืืืื ืืฉืืืจ ืื ืืืจืื ืืฉืืืื ืืืชืจ ืืื ืชืืื ืืช ืฉื ืืชืืืื.
Endi mavjud! Telegram Tadqiqoti 2025 โ yilning asosiy insaytlari 
