เช…เชฎเซ‡ nginx เชฆเซเชตเชพเชฐเชพ เชชเซเชฐเซ‹เช•เซเชธเซ€ เช•เชฐเซ€เชจเซ‡ เช…เชฎเชพเชฐเชพ เชตเซ‡เชฌเซ‹เช—เซเชฐเชพเชฎ เชฆเชพเช–เชฒเชพเชจเซ‡ เชตเชงเชพเชฐเซ€เช เช›เซ€เช

เชนเซ‡ เชนเชฌเชฐ!

เชคเชพเชœเซ‡เชคเชฐเชฎเชพเช‚ เชฎเซ‡เช‚ เชฎเชพเชฐเซ€ เชœเชพเชคเชจเซ‡ เชเชตเซ€ เชชเชฐเชฟเชธเซเชฅเชฟเชคเชฟเชฎเชพเช‚ เชถเซ‹เชงเซ€ เช•เชพเชขเซเชฏเซเช‚ เช•เซ‡ เชœเซ‡เชฎเชพเช‚ เช‡เชจเซเชŸเชฐเชจเซ‡เชŸเชจเซ€ เช…เชชเซ‚เชฐเซเชฃ เชเช•เซเชธเซ‡เชธ เชธเชพเชฅเซ‡ เช•เซ‹เชฐเซเชชเซ‹เชฐเซ‡เชŸ เชจเซ‡เชŸเชตเชฐเซเช•เชจเซ€ เช…เช‚เชฆเชฐ เช•เชพเชฎ เช•เชฐเชตเซเช‚ เชœเชฐเซ‚เชฐเซ€ เชนเชคเซเช‚ เช…เชจเซ‡, เชœเซ‡เชฎ เชคเชฎเซ‡ เชถเซ€เชฐเซเชทเช• เชชเชฐเชฅเซ€ เช…เชจเซเชฎเชพเชจ เช•เชฐเซ€ เชถเช•เซ‹ เช›เซ‹, เชคเซ‡เชฎเชพเช‚ เชŸเซ‡เชฒเชฟเช—เซเชฐเชพเชฎ เช…เชตเชฐเซ‹เชงเชฟเชค เชนเชคเซเช‚. เชฎเชจเซ‡ เช–เชพเชคเชฐเซ€ เช›เซ‡ เช•เซ‡ เช† เชชเชฐเชฟเชธเซเชฅเชฟเชคเชฟ เช˜เชฃเชพ เชฒเซ‹เช•เซ‹ เชฎเชพเชŸเซ‡ เชชเชฐเชฟเชšเชฟเชค เช›เซ‡.

เชนเซเช‚ เช‡เชจเซเชธเซเชŸเชจเซเชŸ เชฎเซ‡เชธเซ‡เชจเซเชœเชฐ เชตเชฟเชจเชพ เช•เชฐเซ€ เชถเช•เซเช‚ เช›เซเช‚, เชชเชฐเช‚เชคเซ เชคเซ‡ เชŸเซ‡เชฒเชฟเช—เซเชฐเชพเชฎ เชนเชคเซเช‚ เชœเซ‡เชจเซ€ เชฎเชจเซ‡ เช•เชพเชฎ เชฎเชพเชŸเซ‡ เชœเชฐเซ‚เชฐ เชนเชคเซ€. เช•เซเชฒเชพเชฏเช‚เชŸเชจเซ‡ เชตเชฐเซเช• เชฎเชถเซ€เชจ เชชเชฐ เช‡เชจเซเชธเซเชŸเซ‹เชฒ เช•เชฐเชตเซเช‚ เชถเช•เซเชฏ เชจ เชนเชคเซเช‚, เชจ เชคเซ‹ เชตเซเชฏเช•เซเชคเชฟเช—เชค เชฒเซ‡เชชเชŸเซ‹เชชเชจเซ‹ เช‰เชชเชฏเซ‹เช— เช•เชฐเชตเซ‹ เชถเช•เซเชฏ เชนเชคเซเช‚. เชคเซ‡เชจเซ‹ เช‰เชชเชฏเซ‹เช— เช•เชฐเชตเชพเชจเซ‹ เชฌเซ€เชœเซ‹ เช‰เชชเชพเชฏ เชœเชฃเชพเชฏ เช›เซ‡ เชธเชคเซเชคเชพเชตเชพเชฐ เชตเซ‡เชฌ เชธเช‚เชธเซเช•เชฐเชฃ, เชชเชฐเช‚เชคเซ เชคเชฎเซ‡ เช…เชจเซเชฎเชพเชจ เช•เชฐเซ€ เชถเช•เซ‹ เช›เซ‹, เชคเซ‡ เชชเชฃ เช…เชจเซเชชเชฒเชฌเซเชง เชนเชคเซเช‚. เชนเซเช‚ เชคเชฐเชค เชœ เชฌเชฟเชจเชธเชคเซเชคเชพเชตเชพเชฐ เชฎเชฟเชฐเชฐ เชถเซ‹เชงเชตเชพเชจเซ‹ เชตเชฟเช•เชฒเซเชช เชชเชพเชฐ เช•เชฐเซเช‚ เช›เซเช‚ (เชนเซเช‚ เชธเซเชชเชทเซเชŸ เช•เชพเชฐเชฃเซ‹เชธเชฐ เช†เชถเชพ เชฐเชพเช–เซเช‚ เช›เซเช‚).

เชธเชฆเชญเชพเช—เซเชฏเซ‡, เชตเซ‡เชฌเซ‹เช—เซเชฐเชพเชฎ เช เชเช• เช“เชชเชจ เชธเซ‹เชฐเซเชธ เชชเซเชฐเซ‹เชœเซ‡เช•เซเชŸ เช›เซ‡ เชœเซ‡เชจเซ‹ เชธเซเชฐเซ‹เชค เช•เซ‹เชก เช‰เชชเชฒเชฌเซเชง เช›เซ‡ GitHub เชคเซ‡เชจเชพ เชฒเซ‡เช–เช• (เชœเซ‡เชจเชพ เชฎเชพเชŸเซ‡ เชคเซ‡เชฎเชจเซ‡ เช˜เชฃเชพ เช†เชญเชพเชฐ!)
เช‡เชจเซเชธเซเชŸเซ‹เชฒเซ‡เชถเชจ เช…เชจเซ‡ เชฒเซ‹เช‚เชš เชชเซ‹เชคเซ‡ เชœ เชฎเซเชถเซเช•เซ‡เชฒ เชจเชฅเซ€, เชœเซ‹ เช•เซ‡, เชŸเซ‡เชฒเชฟเช—เซเชฐเชพเชฎ เชธเชฐเซเชตเชฐเซเชธเชจเซ€ เช…เชตเชฐเซ‹เชงเชฟเชค เชเช•เซเชธเซ‡เชธเชตเชพเชณเชพ เชจเซ‡เชŸเชตเชฐเซเช•เชฎเชพเช‚ เช“เชชเชฐเซ‡เชถเชจเชจเซ€ เชชเชฐเชฟเชธเซเชฅเชฟเชคเชฟเช“เชฎเชพเช‚, เชคเชฎเซ‡ เชธเชซเชณ เชฅเชตเชพ เช•เชฐเชคเชพเช‚ เชจเชฟเชฐเชพเชถ เชฅเชตเชพเชจเซ€ เชถเช•เซเชฏเชคเชพ เชตเชงเซ เชนเชถเซ‡, เช•เชพเชฐเชฃ เช•เซ‡ เชตเซ‡เชฌ เชธเช‚เชธเซเช•เชฐเชฃ เชตเชชเชฐเชพเชถเช•เชฐเซเชคเชพเชจเชพ เชฎเชถเซ€เชจเชฎเชพเช‚เชฅเซ€ เชŸเซ‡เชฒเชฟเช—เซเชฐเชพเชฎ เชธเชฐเซเชตเชฐเซเชธเชจเซ‡ เชตเชฟเชจเช‚เชคเซ€เช“ เชฎเซ‹เช•เชฒเซ‡ เช›เซ‡.

เชธเชฆเชญเชพเช—เซเชฏเซ‡, เช† เชเช•เชฆเชฎ เชธเชฐเชณ (เชชเชฐเช‚เชคเซ เช–เซ‚เชฌ เชธเซเชชเชทเซเชŸ เชจเชฅเซ€) เชซเชฟเช•เซเชธ เช›เซ‡. เชนเซเช‚ เชคเชฎเชจเซ‡ เชšเซ‡เชคเชตเชฃเซ€ เช†เชชเชตเชพ เชฎเชพเช‚เช—เซ เช›เซเช‚ เช•เซ‡ เชนเซเช‚ เช† เช‰เช•เซ‡เชฒเชจเซ‹ เชฒเซ‡เช–เช• เชจเชฅเซ€. เชนเซเช‚ เชคเซ‡เชจเซ‡ เชถเซ‹เชงเชตเชพเชฎเชพเช‚ เชธเชซเชณ เชฐเชนเซเชฏเซ‹ เชถเชพเช–เชพ, เชœเซ‡ เชฎเชพเชฐเซ€ เชœเซ‡เชตเซ€ เชœ เชธเชฎเชธเซเชฏเชพเชจเซ€ เชšเชฐเซเชšเชพ เช•เชฐเซ‡ เช›เซ‡. เช—เซ€เชฅเชฌ เชตเชชเชฐเชพเชถเช•เชฐเซเชคเชพ เชฆเซเชตเชพเชฐเชพ เชธเซ‚เชšเชตเชตเชพเชฎเชพเช‚ เช†เชตเซ‡เชฒ เช‰เช•เซ‡เชฒ เชŸเซ‡เช•เชจเซ‹เชœเซ‰เช•, เชคเซ‡เชฃเซ‡ เชฎเชจเซ‡ เช˜เชฃเซ€ เชฎเชฆเชฆ เช•เชฐเซ€, เชœเซ‹ เช•เซ‡, เชฎเชจเซ‡ เช–เชพเชคเชฐเซ€ เช›เซ‡ เช•เซ‡ เชคเซ‡ เชฌเซ€เชœเชพ เช•เซ‹เชˆเชจเซ‡ เชฎเชฆเชฆ เช•เชฐเซ€ เชถเช•เซ‡ เช›เซ‡, เชคเซ‡เชฅเซ€ เชฎเซ‡เช‚ เช† เชŸเซเชฏเซเชŸเซ‹เชฐเซ€เชฏเชฒ เชฒเช–เชตเชพเชจเซเช‚ เชจเช•เซเช•เซ€ เช•เชฐเซเชฏเซเช‚.

เช•เชŸเชจเซ€ เชจเซ€เชšเซ‡ เชคเชฎเชจเซ‡ เชคเชฎเชพเชฐเชพ เชตเซ‡เชฌเซ‹เช—เซเชฐเชพเชฎ เชฎเชฟเชฐเชฐเชจเซเช‚ เชธเซเชŸเซ‡เชช-เชฌเชพเชฏ-เชธเซเชŸเซ‡เชช เชธเซ‡เชŸเช…เชช เช…เชจเซ‡ 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 เชฆเซเชตเชพเชฐเชพ เชชเซเชฐเซ‹เช•เซเชธเซ€ เช•เชฐเซ€เชจเซ‡ เช…เชฎเชพเชฐเชพ เชตเซ‡เชฌเซ‹เช—เซเชฐเชพเชฎ เชฆเชพเช–เชฒเชพเชจเซ‡ เชตเชงเชพเชฐเซ€เช เช›เซ€เช

nginx เชชเซเชจเชƒเชชเซเชฐเชพเชฐเช‚เชญ เช•เชฐเซ‹:

sudo systemctl restart nginx

เชนเชตเซ‡ เชตเซ‡เชฌเซ‹เช—เซเชฐเชพเชฎ เชฎเชพเชคเซเชฐ เชชเชฐ เช‰เชชเชฒเชฌเซเชง เชฐเชนเซ‡เชถเซ‡ mywebogram.localhost/app/index.html htpasswd เช†เชฆเซ‡เชถ เชฌเชจเชพเชตเชคเซ€ เชตเช–เชคเซ‡ เชคเชฎเซ‡ เชตเซเชฏเชพเช–เซเชฏเชพเชฏเชฟเชค เช•เชฐเซ‡เชฒ เชฒเซ‹เช—เชฟเชจ เช…เชจเซ‡ เชชเชพเชธเชตเชฐเซเชก เชฆเชพเช–เชฒ เชฅเชฏเชพ เชชเช›เซ€.

เชคเซเชฏเชพเช‚ เชฅเซ‹เชกเซเช‚ เชฌเชพเช•เซ€ เช›เซ‡: เช…เชฎเซ‡ เชชเซเชฐเซ‹เชœเซ‡เช•เซเชŸเชฎเชพเช‚ เชœ เชจเชพเชจเชพ เชซเซ‡เชฐเชซเชพเชฐเซ‹ เช•เชฐเซ€เชถเซเช‚.

เชซเชพเช‡เชฒเชจเซ‡ เชเชกเชฟเชŸเชฐเชฎเชพเช‚ เช–เซ‹เชฒเซ‹ ~/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 เชฆเซเชตเชพเชฐเชพ เชชเซเชฐเซ‹เช•เซเชธเซ€ เชฅเชฏเซ‡เชฒ เช›เซ‡.

เช…เชฎเซ‡ nginx เชฆเซเชตเชพเชฐเชพ เชชเซเชฐเซ‹เช•เซเชธเซ€ เช•เชฐเซ€เชจเซ‡ เช…เชฎเชพเชฐเชพ เชตเซ‡เชฌเซ‹เช—เซเชฐเชพเชฎ เชฆเชพเช–เชฒเชพเชจเซ‡ เชตเชงเชพเชฐเซ€เช เช›เซ€เช

เชฎเชจเซ‡ เช†เชถเชพ เช›เซ‡ เช•เซ‡ เช† เชŸเซเชฏเซเชŸเซ‹เชฐเซ€เชฏเชฒ เชฎเชพเชฐเชพ เชธเชฟเชตเชพเชฏ เชฌเซ€เชœเชพ เช•เซ‹เชˆเชจเซ‡ เชชเชฃ เช‰เชชเชฏเซ‹เช—เซ€ เชฅเชถเซ‡.

เช…เช‚เชค เชธเซเชงเซ€ เชตเชพเช‚เชšเชจเชพเชฐ เชฆเชฐเซ‡เช•เชจเซ‹ เช–เซ‚เชฌ เช–เซ‚เชฌ เช†เชญเชพเชฐ.

เชœเซ‹ เช•เซ‹เชˆเชจเซ‡ เช•เซ‹เชˆ เชฎเซเชถเซเช•เซ‡เชฒเซ€ เชนเซ‹เชฏ เช…เชฅเชตเชพ เชฎเซ‡เช‚ เช•เซ‹เชˆ เช…เชšเซ‹เช•เซเช•เชธเชคเชพ เช•เชฐเซ€ เชนเซ‹เชฏ, เชคเซ‹ เชฎเชจเซ‡ เชœเชตเชพเชฌ เช†เชชเชตเชพเชฎเชพเช‚ เช†เชจเช‚เชฆ เชฅเชถเซ‡ เช…เชจเซ‡ เชŸเชฟเชชเซเชชเชฃเซ€เช“เชฎเชพเช‚ เช…เชฅเชตเชพ PM เชฎเชพเช‚ เชคเชฎเชจเซ‡ เชฎเชฆเชฆ เช•เชฐเชตเชพเชจเซ‹ เชชเซเชฐเชฏเชพเชธ เชฅเชถเซ‡.

เชธเซ‹เชฐเซเชธ: www.habr.com

เชเช• เชŸเชฟเชชเซเชชเชฃเซ€ เช‰เชฎเซ‡เชฐเซ‹