เชนเซ เชนเชฌเชฐ!
เชคเชพเชเซเชคเชฐเชฎเชพเช เชฎเซเช เชฎเชพเชฐเซ เชเชพเชคเชจเซ เชเชตเซ เชชเชฐเชฟเชธเซเชฅเชฟเชคเชฟเชฎเชพเช เชถเซเชงเซ เชเชพเชขเซเชฏเซเช เชเซ เชเซเชฎเชพเช เชเชจเซเชเชฐเชจเซเชเชจเซ เช เชชเซเชฐเซเชฃ เชเชเซเชธเซเชธ เชธเชพเชฅเซ เชเซเชฐเซเชชเซเชฐเซเช เชจเซเชเชตเชฐเซเชเชจเซ เช เชเชฆเชฐ เชเชพเชฎ เชเชฐเชตเซเช เชเชฐเซเชฐเซ เชนเชคเซเช เช เชจเซ, เชเซเชฎ เชคเชฎเซ เชถเซเชฐเซเชทเช เชชเชฐเชฅเซ เช เชจเซเชฎเชพเชจ เชเชฐเซ เชถเชเซ เชเซ, เชคเซเชฎเชพเช เชเซเชฒเชฟเชเซเชฐเชพเชฎ เช เชตเชฐเซเชงเชฟเชค เชนเชคเซเช. เชฎเชจเซ เชเชพเชคเชฐเซ เชเซ เชเซ เช เชชเชฐเชฟเชธเซเชฅเชฟเชคเชฟ เชเชฃเชพ เชฒเซเชเซ เชฎเชพเชเซ เชชเชฐเชฟเชเชฟเชค เชเซ.
เชนเซเช เชเชจเซเชธเซเชเชจเซเช เชฎเซเชธเซเชจเซเชเชฐ เชตเชฟเชจเชพ เชเชฐเซ เชถเชเซเช เชเซเช, เชชเชฐเชเชคเซ เชคเซ เชเซเชฒเชฟเชเซเชฐเชพเชฎ เชนเชคเซเช เชเซเชจเซ เชฎเชจเซ เชเชพเชฎ เชฎเชพเชเซ เชเชฐเซเชฐ เชนเชคเซ. เชเซเชฒเชพเชฏเชเชเชจเซ เชตเชฐเซเช เชฎเชถเซเชจ เชชเชฐ เชเชจเซเชธเซเชเซเชฒ เชเชฐเชตเซเช เชถเชเซเชฏ เชจ เชนเชคเซเช, เชจ เชคเซ เชตเซเชฏเชเซเชคเชฟเชเชค เชฒเซเชชเชเซเชชเชจเซ เชเชชเชฏเซเช เชเชฐเชตเซ เชถเชเซเชฏ เชนเชคเซเช. เชคเซเชจเซ เชเชชเชฏเซเช เชเชฐเชตเชพเชจเซ เชฌเซเชเซ เชเชชเชพเชฏ เชเชฃเชพเชฏ เชเซ
เชธเชฆเชญเชพเชเซเชฏเซ, เชตเซเชฌเซเชเซเชฐเชพเชฎ เช เชเช เชเชชเชจ เชธเซเชฐเซเชธ เชชเซเชฐเซเชเซเชเซเช เชเซ เชเซเชจเซ เชธเซเชฐเซเชค เชเซเชก เชเชชเชฒเชฌเซเชง เชเซ
เชเชจเซเชธเซเชเซเชฒเซเชถเชจ เช
เชจเซ เชฒเซเชเช เชชเซเชคเซ เช เชฎเซเชถเซเชเซเชฒ เชจเชฅเซ, เชเซ เชเซ, เชเซเชฒเชฟเชเซเชฐเชพเชฎ เชธเชฐเซเชตเชฐเซเชธเชจเซ เช
เชตเชฐเซเชงเชฟเชค เชเชเซเชธเซเชธเชตเชพเชณเชพ เชจเซเชเชตเชฐเซเชเชฎเชพเช เชเชชเชฐเซเชถเชจเชจเซ เชชเชฐเชฟเชธเซเชฅเชฟเชคเชฟเชเชฎเชพเช, เชคเชฎเซ เชธเชซเชณ เชฅเชตเชพ เชเชฐเชคเชพเช เชจเชฟเชฐเชพเชถ เชฅเชตเชพเชจเซ เชถเชเซเชฏเชคเชพ เชตเชงเซ เชนเชถเซ, เชเชพเชฐเชฃ เชเซ เชตเซเชฌ เชธเชเชธเซเชเชฐเชฃ เชตเชชเชฐเชพเชถเชเชฐเซเชคเชพเชจเชพ เชฎเชถเซเชจเชฎเชพเชเชฅเซ เชเซเชฒเชฟเชเซเชฐเชพเชฎ เชธเชฐเซเชตเชฐเซเชธเชจเซ เชตเชฟเชจเชเชคเซเช เชฎเซเชเชฒเซ เชเซ.
เชธเชฆเชญเชพเชเซเชฏเซ, เช เชเชเชฆเชฎ เชธเชฐเชณ (เชชเชฐเชเชคเซ เชเซเชฌ เชธเซเชชเชทเซเช เชจเชฅเซ) เชซเชฟเชเซเชธ เชเซ. เชนเซเช เชคเชฎเชจเซ เชเซเชคเชตเชฃเซ เชเชชเชตเชพ เชฎเชพเชเชเซ เชเซเช เชเซ เชนเซเช เช เชเชเซเชฒเชจเซ เชฒเซเชเช เชจเชฅเซ. เชนเซเช เชคเซเชจเซ เชถเซเชงเชตเชพเชฎเชพเช เชธเชซเชณ เชฐเชนเซเชฏเซ
เชเชเชจเซ เชจเซเชเซ เชคเชฎเชจเซ เชคเชฎเชพเชฐเชพ เชตเซเชฌเซเชเซเชฐเชพเชฎ เชฎเชฟเชฐเชฐเชจเซเช เชธเซเชเซเชช-เชฌเชพเชฏ-เชธเซเชเซเชช เชธเซเชเช
เชช เช
เชจเซ nginx เชจเซ เชเชชเชฏเซเช เชเชฐเซเชจเซ เชเซเชฒเชฟเชเซเชฐเชพเชฎ เชธเชฐเซเชตเชฐเซเชธ เชชเชฐ เชคเซเชจเซ เชตเชฟเชจเชเชคเซเชเชจเซ เชชเซเชฐเซเชเซเชธเซ เชเชฐเชตเชพเชจเซเช เชธเซเชเช
เชช เชฎเชณเชถเซ.
เชเชฆเชพเชนเชฐเชฃ เชคเชฐเซเชเซ, เชฎเซเช เชคเชพเชเซ เชเชจเซเชธเซเชเซเชฒ เชเชฐเซเชฒ เช
เชจเซ เช
เชชเชกเซเช เชเชฐเซเชฒ เชเชฌเซเชจเซเชเซ เชธเชฐเซเชตเชฐ 18.04.3 เชชเชธเชเชฆ เชเชฐเซเชฏเซเช.
เชเซเชคเชตเชฃเซ: เช เชเซเชฏเซเชเซเชฐเซเชฏเชฒเชฎเชพเช nginx เชฎเชพเช เชกเซเชฎเซเชจ เชธเซเช เชเชฐเชตเชพ เชฎเชพเชเซเชจเซ เชธเซเชเชจเชพเช เชถเชพเชฎเซเชฒ เชนเชถเซ เชจเชนเซเช. เชคเชฎเชพเชฐเซ เช เชเชพเชคเซ เชเชฐเชตเชพเชจเซ เชเชฐเซเชฐ เชเซ. เชเซเชฏเซเชเซเชฐเซเชฏเชฒ เชงเชพเชฐเซ เชเซ เชเซ เชคเชฎเซ เชชเชนเซเชฒเชพเชฅเซ เช ssl เชธเชพเชฅเซ เชกเซเชฎเซเชจ เชเซเช เชตเซเชฏเซเช เชเซ, เช เชจเซ เชคเซ เชธเชฐเซเชตเชฐ เชเซ เชเซเชจเชพ เชชเชฐ เชคเชฎเซ เชคเซเชจเซ เชฐเซเชชเชฐเซเชเชพเชเชเชฟเชค เชเชฐเชตเชพเชจเซ เชฏเซเชเชจเชพ เชเชกเซ เชฐเชนเซเชฏเชพ เชเซ เชคเซเชจเซ เชชเชพเชธเซ เชเซเชฒเชฟเชเซเชฐเชพเชฎ เชธเชฐเซเชตเชฐเซเชธเชจเซ เชเชเซเชธเซเชธ เชเซ (เชคเชฎเชจเซ เชเชฎเซ เชคเซ เชฐเซเชคเซ)
เชเชพเชฒเซ เชงเชพเชฐเซเช เชเซ เช เชธเชฐเซเชตเชฐเชจเซเช ip 10.23.0.3 เชเซ, เช เชจเซ เชกเซเชฎเซเชจ เชจเชพเชฎ mywebogram.localhost เชเซ.
เช เชธเชเชฎเซเชฒเชจเซเชจเชพ เชเชงเชพเชฐเซ, เชนเซเช เชฐเซเชชเชฐเซเชเชพเชเชเชจเซเชจเชพเช เชเชฆเชพเชนเชฐเชฃเซ เชเชชเซเชถ. เชฎเซเชฒเซเชฏเซเชจเซ เชคเชฎเชพเชฐเชพ เชชเซเชคเชพเชจเชพเชฎเชพเช เชฌเชฆเชฒเชตเชพเชจเซเช เชญเซเชฒเชถเซ เชจเชนเซเช.
เชคเซเชฅเซ เชเชพเชฒเซ เชชเซเชฐเชพเชฐเชเชญ เชเชฐเซเช:
เชตเซเชฌเซเชเซเชฐเชพเชฎ เชเชฒเชพเชตเชตเชพ เชฎเชพเชเซ, เช เชฎเชจเซ เชจเซเชกเชเชจเซ เชเชฐเซเชฐ เชเซ. เชกเชฟเชซเซเชฒเซเช เชฐเซเชชเซ, เชเซ เชเชชเชฃเซ เชคเซเชจเซ เชเชฌเซเชจเซเชเซ เชฐเชฟเชชเซเชเซเชเชฐเซเชเชฎเชพเชเชฅเซ เชเชจเซเชธเซเชเซเชฒ เชเชฐเซเช, เชคเซ เช เชฎเชจเซ เชจเซเชกเชเซเชธ เชธเชเชธเซเชเชฐเชฃ 8.x เชฎเชณเชถเซ. เช เชฎเชจเซ 12.xเชจเซ เชเชฐเซเชฐ เชเซ:
curl -sL https://deb.nodesource.com/setup_12.x | sudo -E bash -
sudo apt update && sudo apt -y install nodejs
เช เชฎเซ เชคเซ เชธเซเชฅเชพเชจ เชชเชธเชเชฆ เชเชฐเซเช เชเซเช เชเซเชฏเชพเช เช เชฎเชพเชฐเซเช เชตเซเชฌเชเซเชฐเชพเชฎ เชเชงเชพเชฐเชฟเชค เชนเชถเซ.
เชเชฆเชพเชนเชฐเชฃ เชคเชฐเซเชเซ, เชเชพเชฒเซ เชคเซเชจเซ เชนเซเชฎ เชกเชฟเชฐเซเชเซเชเชฐเซเชจเชพ เชฐเซเชเชฎเชพเช เชฎเซเชเซเช. เช เชเชฐเชตเชพ เชฎเชพเชเซ, เช เชฎเชพเชฐเชพ เชธเชฐเซเชตเชฐ เชชเชฐ เชธเชคเซเชคเชพเชตเชพเชฐ เชฐเซเชชเซเชเซเชเชฐเซเชจเซ เชเซเชฒเซเชจ เชเชฐเซ:
cd ~ && git clone https://github.com/zhukov/webogram.git
เชเชเชณเชจเซเช เชชเชเชฒเซเช เช เชเชชเซเชฒเชฟเชเซเชถเชจ เชเชฒเชพเชตเชตเชพ เชฎเชพเชเซ เชเชฐเซเชฐเซ เชคเชฎเชพเชฎ เชจเชฟเชฐเซเชญเชฐเชคเชพเชจเซ เชเชจเซเชธเซเชเซเชฒ เชเชฐเชตเชพเชจเซเช เชเซ:
cd webogram && npm install
เชเชพเชฒเซ เชเช เชเซเชธเซเช เชฐเชจ เชเชฐเชตเชพเชจเซ เชชเซเชฐเชฏเชพเชธ เชเชฐเซเช. เชเชฆเซเชถ เชเชฒเชพเชตเซ:
npm start
เชคเซ เชชเชเซ, เช เชฎเซ เชคเซเชจเซ เชฌเซเชฐเชพเชเชเชฐเชฎเชพเช เชเซเชฒเชตเชพเชจเซ เชชเซเชฐเชฏเชพเชธ เชเชฐเซเช เชเซเช
http://10.23.0.3:8000/app/index.html
เชเซ เช เชฌเชฟเชเชฆเซ เชธเซเชงเซ เชคเชฎเซ เชฌเชงเซเช เชฌเชฐเชพเชฌเชฐ เชเชฐเซเชฏเซเช เชเซ, เชคเซ เชตเซเชฌเชเซเชฐเชพเชฎ เช เชงเชฟเชเซเชคเชคเชพ เชชเซเชทเซเช เชเซเชฒเชถเซ.
เชนเชตเซ เชเชชเชฃเซ เชธเซเชตเชพ เชคเชฐเซเชเซ เชเชฒเชพเชตเชตเชพ เชฎเชพเชเซ เชเชชเซเชฒเชฟเชเซเชถเชจเชจเซ เชเซเช เชตเชตเชพเชจเซ เชเชฐเซเชฐ เชเซ. เช เชเชฐเชตเชพ เชฎเชพเชเซ, เชเชพเชฒเซ เชเช เชซเชพเชเชฒ เชฌเชจเชพเชตเซเช
sudo touch /lib/systemd/system/webogram.service
เชคเซเชจเซ เชเซเชเชชเชฃ เชธเชเชชเชพเชฆเชเชฎเชพเช เชเซเชฒเซ เช เชจเซ เชคเซเชจเซ เชจเซเชเซเชจเซ เชฆเซเชเชพเชต เชเชชเซ (เชตเชฐเซเช เชกเชฟเชฐเซเชเซเชเชฐเซเชฎเชพเช เชคเชฎเชพเชฐเซ เชฎเชพเชฐเซเช เชฆเชพเชเชฒ เชเชฐเซ)
[Unit]
Description=Webogram mirror
[Service]
WorkingDirectory=/home/tg/webogram
ExecStart=/usr/bin/npm start
SuccessExitStatus=143
TimeoutStopSec=10
Restart=on-failure
RestartSec=5
[Install]
WantedBy=multi-user.target
เชชเชเซ เช เชฎเซ เชจเซเชเซเชจเชพ เชเชฆเซเชถเซ เชเชฒเชพเชตเซเช เชเซเช:
เชซเซเชฐเชซเชพเชฐเซ เชฒเชพเชเซ เชเชฐเซ เชฐเชนเซเชฏเชพ เชเซเช
sudo systemctl daemon-reload
เชเชเซเชฐเชจ เชธเชเซเชทเชฎ เชเชฐเซ:
sudo systemctl enable webogram.service
เชเชพเชฒเซ เชธเซเชตเชพ เชถเชฐเซ เชเชฐเซเช:
sudo systemctl start webogram.service
เชชเชเชฒเชพเชเช เชชเซเชฐเซเชฃ เชเชฐเซเชฏเชพ เชชเชเซ, เชตเซเชฌเชเซเชฐเชพเชฎ เชชเซเชฐเซเช 8000 เชชเชฐ เชเชชเชฒเชฌเซเชง เชฅเชตเชพเชจเซเช เชเชพเชฒเซ เชฐเชพเชเชถเซ.
เช เชฎเซ nginx เชฆเซเชตเชพเชฐเชพ เช เชฎเชพเชฐเชพ เชตเซเชฌเซเชเซเชฐเชพเชฎเชจเซ เชเชเซเชธเซเชธ เชเซเช เชตเซเชถเซเช, เชคเซเชฅเซ เช เชฎเซ เชฌเชนเชพเชฐเชจเซ เชตเชฟเชจเชเชคเซเช เชฎเชพเชเซ เชชเซเชฐเซเช 8000 เชฌเชเชง เชเชฐเซเชถเซเช.
เช เชฎเซ เช เชฎเชพเชเซ udf เชเชชเชฏเซเชเชฟเชคเชพเชจเซ เชเชชเชฏเซเช เชเชฐเซเช เชเซเช (เช เชฅเชตเชพ เชคเชฎเชพเชฐเชพ เชฎเชพเชเซ เช เชจเซเชเซเชณ เชเซเชเชชเชฃ เชชเชฆเซเชงเชคเชฟ):
sudo ufw deny 8000
เชเซ เชคเชฎเซ เชนเชเซ เชชเชฃ udf เชจเซ เชเชชเชฏเซเช เชเชฐเชตเชพเชจเซเช เชจเชเซเชเซ เชเชฐเซ เชเซ, เชชเชฐเชเชคเซ เชคเซ เชธเชฐเซเชตเชฐ เชชเชฐ เช เชเซเชทเชฎ เชเซ, เชคเซ เชตเชงเซ เชจเชฟเชฏเชฎเซ เชเชฎเซเชฐเซ (เชเซเชฅเซ เชฌเชงเซเช เช เชฒเช เชจ เชฅเชพเชฏ) เช เชจเซ udf เชธเชเซเชทเชฎ เชเชฐเซ:
sudo ufw allow ssh
sudo ufw allow 80
sudo ufw allow 443
sudo ufw enable
เชเชเชณ, เชเชพเชฒเซ nginx เชฐเซเชชเชฐเซเชเชพเชเชเชจ เชฌเชฆเชฒเชตเชพเชจเซเช เชถเชฐเซ เชเชฐเซเช.
เชฎเซเช เชเชชเชฐ เชเซเชคเชตเชฃเซ เชเชชเซ เชเซ เชคเซเชฎ, เชเชตเซเช เชฎเชพเชจเชตเชพเชฎเชพเช เชเชตเซ เชเซ เชเซ เชคเชฎเชพเชฐเชพ เชธเชฐเซเชตเชฐ เชชเชฐ ssl เชธเชพเชฅเซเชจเซเช เชกเซเชฎเซเชจ เชชเชนเซเชฒเซเชฅเซ เช เชเซเช เชตเซเชฒเซเช เชเซ. เชกเซเชฎเซเชจ เชฐเซเชชเชฐเซเชเชพเชเชเชจ เชซเชพเชเชฒเชจเซ เชฏเซเชเซเชฏ เชฐเซเชคเซ เชเชพเชฐเซเชฏ เชเชฐเชตเชพ เชฎเชพเชเซ เชคเซเชฎเชพเช เชถเซเช เชเชฎเซเชฐเชตเชพเชจเซ เชเชฐเซเชฐ เชชเชกเชถเซ เชคเซเชจเชพ เชชเชฐ เชนเซเช เชซเชเซเชค เชคเชฎเชพเชฐเซเช เชงเซเชฏเชพเชจ เชเซเชเชเซเชถ:
server {
...
location ^~ /pluto/apiw1/ {
proxy_pass https://pluto.web.telegram.org/apiw1/;
}
location ^~ /venus/apiw1/ {
proxy_pass https://venus.web.telegram.org/apiw1/;
}
location ^~ /aurora/apiw1/ {
proxy_pass https://aurora.web.telegram.org/apiw1/;
}
location ^~ /vesta/apiw1/ {
proxy_pass https://vesta.web.telegram.org/apiw1/;
}
location ^~ /flora/apiw1/ {
proxy_pass https://flora.web.telegram.org/apiw1/;
}
location ^~ /pluto-1/apiw1/ {
proxy_pass https://pluto-1.web.telegram.org/apiw1/;
}
location ^~ /venus-1/apiw1/ {
proxy_pass https://venus-1.web.telegram.org/apiw1/;
}
location ^~ /aurora-1/apiw1/ {
proxy_pass https://aurora-1.web.telegram.org/apiw1/;
}
location ^~ /vesta-1/apiw1/ {
proxy_pass https://vesta-1.web.telegram.org/apiw1/;
}
location ^~ /flora-1/apiw1/ {
proxy_pass https://flora-1.web.telegram.org/apiw1/;
}
location ^~ /DC1/ {
proxy_pass http://149.154.175.10:80/;
}
location ^~ /DC2/ {
proxy_pass http://149.154.167.40:80/;
}
location ^~ /DC3/ {
proxy_pass http://149.154.175.117:80/;
}
location ^~ /DC4/ {
proxy_pass http://149.154.175.50:80/;
}
location ^~ /DC5/ {
proxy_pass http://149.154.167.51:80/;
}
location ^~ /DC6/ {
proxy_pass http://149.154.175.100:80/;
}
location ^~ /DC7/ {
proxy_pass http://149.154.167.91:80/;
}
location ^~ /DC8/ {
proxy_pass http://149.154.171.5:80/;
}
location / {
auth_basic "tg";
auth_basic_user_file /etc/nginx/passwd.htpasswd;
proxy_pass http://localhost:8000/;
proxy_read_timeout 90s;
proxy_connect_timeout 90s;
proxy_send_timeout 90s;
proxy_set_header Host $http_host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $remote_addr;
}
}
เชเชชเชฃเซ nginx เชฐเซเชชเชฐเซเชเชพเชฎเชพเช เชถเซเช เชเชฎเซเชฐเซเช เชเซเช:
- เช เชฎเซ เชฐเซเช เชธเซเชฅเชพเชจ เชฌเชฆเชฒเซเช เชเซเช, เชเซ เชชเซเชฐเซเช 8000 เชชเชฐ เชชเซเชฐเซเชเซเชธเซ เชตเชฟเชจเชเชคเซเช เชเชฐเชถเซ, เชเซเชจเชพ เชชเชฐ เชตเซเชฌเชเซเชฐเชพเชฎ เชชเซเชฐเชคเชฟเชธเชพเชฆ เชเชชเซ เชเซ
- เช เชฎเซ เชฎเซเชณเชญเซเชค-เชเชฅเชจเซ เชเชชเชฏเซเช เชเชฐเซเชจเซ เชฐเซเช เชธเซเชฅเชพเชจเชจเซ เชฌเชเชง เชเชฐเซเช เชเซเช. เชเชเชเซ เช เชจเซ เชฌเซเชเซเชฅเซ เช เชฎเชพเชฐเซ เชเชชเซเชฒเชฟเชเซเชถเชจ เชฌเชเชง เชเชฐเชตเชพ เชฎเชพเชเซ เช เชเช เชธเชเชชเซเชฐเซเชฃ เชธเชพเชเชเซเชคเชฟเช เชชเชเชฒเซเช เชเซ. (เช เชจเซ เช เชตเชฐเซเชงเชฟเชค เชเชฐเชตเชพเชฎเชพเช เชธเชฎเชธเซเชฏเชพเช เชเชพเชณเชตเชพ เชฎเชพเชเซ เชชเชฃ)
- เชเซเชฒเชฟเชเซเชฐเชพเชฎ เชธเชฐเซเชตเชฐ เชชเชฐ proxy_path เชธเชพเชฅเซเชจเชพ เชธเซเชฅเชพเชจเซเชจเซ เชธเชฎเซเชน เช เช เชฎเชพเชฐเชพ เช เชเชคเชฟเชฎ เชฌเชฟเชเชฆเซเช เชเซ เชเซเชจเชพ เชฆเซเชตเชพเชฐเชพ เช เชฎเซ เช เชฎเชพเชฐเซ เชตเชฟเชจเชเชคเซเชเชจเซ เชชเซเชฐเซเชเซเชธเซ เชเชฐเซเชถเซเช.
เชชเชฃ, เชเชพเชฒเซ เชเช เชซเชพเชเชฒ เชฌเชจเชพเชตเซเช /etc/nginx/passwd.htpasswd;
เชเซเชฅเซ nginx เชชเชพเชธเซ เชฏเซเชเชฐ เชชเชพเชธเชตเชฐเซเชก เชเซเช เชเชฐเชตเชพ เชฎเชพเชเซ เชเชเชเช เชนเซเชฏ.
sudo apt install apache2-utils
sudo htpasswd -c /etc/nginx/passwd.htpasswd tg
nginx เชชเซเชจเชเชชเซเชฐเชพเชฐเชเชญ เชเชฐเซ:
sudo systemctl restart nginx
เชนเชตเซ เชตเซเชฌเซเชเซเชฐเชพเชฎ เชฎเชพเชคเซเชฐ เชชเชฐ เชเชชเชฒเชฌเซเชง เชฐเชนเซเชถเซ
เชคเซเชฏเชพเช เชฅเซเชกเซเช เชฌเชพเชเซ เชเซ: เช เชฎเซ เชชเซเชฐเซเชเซเชเซเชเชฎเชพเช เช เชจเชพเชจเชพ เชซเซเชฐเชซเชพเชฐเซ เชเชฐเซเชถเซเช.
เชซเชพเชเชฒเชจเซ เชเชกเชฟเชเชฐเชฎเชพเช เชเซเชฒเซ ~/webogram/app/js/lib/mtproto.js
เช เชจเซ เชคเซเชจเซ เชถเชฐเซเชเชค เชจเซเชเซเชจเชพ เชธเซเชตเชฐเซเชชเชฎเชพเช เชฒเชพเชตเซ:
/*!
* Webogram v0.7.0 - messaging web application for MTProto
* https://github.com/zhukov/webogram
* Copyright (C) 2014 Igor Zhukov <[email protected]>
* https://github.com/zhukov/webogram/blob/master/LICENSE
*/
angular.module('izhukov.mtproto', ['izhukov.utils'])
.factory('MtpDcConfigurator', function () {
var sslSubdomains = ['pluto', 'venus', 'aurora', 'vesta', 'flora']
var dcOptions = Config.Modes.test
? [
{id: 1, host: 'mywebogram.localhost/DC1', port: 80},
{id: 2, host: 'mywebogram.localhost/DC2', port: 80},
{id: 3, host: 'mywebogram.localhost/DC3', port: 80}
]
: [
{id: 1, host: 'mywebogram.localhost/DC4', port: 80},
{id: 2, host: 'mywebogram.localhost/DC5', port: 80},
{id: 3, host: 'mywebogram.localhost/DC6', port: 80},
{id: 4, host: 'mywebogram.localhost/DC7', port: 80},
{id: 5, host: 'mywebogram.localhost/DC8', port: 80}
]
var chosenServers = {}
function chooseServer (dcID, upload) {
if (chosenServers[dcID] === undefined) {
var chosenServer = false,
i, dcOption
if (Config.Modes.ssl || !Config.Modes.http) {
var subdomain = sslSubdomains[dcID - 1] + (upload ? '-1' : '')
var path = Config.Modes.test ? 'apiw_test1' : '/apiw1/'
chosenServer = 'https://mywebogram.localhost/' + subdomain + path
return chosenServer
}
for (i = 0; i < dcOptions.length; i++) {
dcOption = dcOptions[i]
if (dcOption.id == dcID) {
chosenServer = 'http://' + dcOption.host + '/apiw1'
break
}
}
chosenServers[dcID] = chosenServer
}
...
เช เชชเชเซ, เชคเชฎเชพเชฐเซ เชฌเซเชฐเชพเชเชเชฐเชฎเชพเช เชเชชเซเชฒเชฟเชเซเชถเชจ เชชเซเชทเซเช เชจเซ เชคเชพเชเซเช เชเชฐเชตเชพเชจเซ เชเชฐเซเชฐ เชเซ.
เชคเชฎเชพเชฐเซเช เชฌเซเชฐเชพเชเชเชฐ เชเชจเซเชธเซเชฒ เชเซเชฒเซ เช เชจเซ เชเชชเซเชฒเชฟเชเซเชถเชจเชจเซ เชจเซเชเชตเชฐเซเช เชตเชฟเชจเชเชคเซเช เชเซเช. เชเซ เชฌเชงเซเช เชเชพเชฎ เชเชฐเซ เชเซ เช เชจเซ XHR เชตเชฟเชจเชเชคเซเช เชคเชฎเชพเชฐเชพ เชธเชฐเซเชตเชฐ เชชเชฐ เชเชพเชฏ เชเซ, เชคเซ เชฌเชงเซเช เชฏเซเชเซเชฏ เชฐเซเชคเซ เชฅเชพเชฏ เชเซ, เช เชจเซ เชตเซเชฌเชเซเชฐเชพเชฎ เชนเชตเซ nginx เชฆเซเชตเชพเชฐเชพ เชชเซเชฐเซเชเซเชธเซ เชฅเชฏเซเชฒ เชเซ.
เชฎเชจเซ เชเชถเชพ เชเซ เชเซ เช เชเซเชฏเซเชเซเชฐเซเชฏเชฒ เชฎเชพเชฐเชพ เชธเชฟเชตเชพเชฏ เชฌเซเชเชพ เชเซเชเชจเซ เชชเชฃ เชเชชเชฏเซเชเซ เชฅเชถเซ.
เช เชเชค เชธเซเชงเซ เชตเชพเชเชเชจเชพเชฐ เชฆเชฐเซเชเชจเซ เชเซเชฌ เชเซเชฌ เชเชญเชพเชฐ.
เชเซ เชเซเชเชจเซ เชเซเช เชฎเซเชถเซเชเซเชฒเซ เชนเซเชฏ เช
เชฅเชตเชพ เชฎเซเช เชเซเช เช
เชเซเชเซเชเชธเชคเชพ เชเชฐเซ เชนเซเชฏ, เชคเซ เชฎเชจเซ เชเชตเชพเชฌ เชเชชเชตเชพเชฎเชพเช เชเชจเชเชฆ เชฅเชถเซ เช
เชจเซ เชเชฟเชชเซเชชเชฃเซเชเชฎเชพเช เช
เชฅเชตเชพ PM เชฎเชพเช เชคเชฎเชจเซ เชฎเชฆเชฆ เชเชฐเชตเชพเชจเซ เชชเซเชฐเชฏเชพเชธ เชฅเชถเซ.
เชธเซเชฐเซเชธ: www.habr.com