Хөөе Хабр!
Саяхан би интернетэд бүрэн нэвтрэх боломжгүй корпорацийн сүлжээнд ажиллах шаардлагатай нөхцөл байдалд орсон бөгөөд гарчигнаас нь харахад Telegram-ыг хаасан байна. Энэ байдал олон хүнд танил болсон гэдэгт итгэлтэй байна.
Би шуурхай мессенжергүйгээр хийж чадна, гэхдээ ажилд Telegram хэрэгтэй байсан. Үйлчлүүлэгчийг ажлын машин дээр суулгах боломжгүй, хувийн зөөврийн компьютер ашиглах боломжгүй байсан. Өөр нэг шийдэл бол үүнийг ашиглах явдал юм
Аз болоход Webogram бол нээлттэй эхийн төсөл бөгөөд эх кодыг нь ашиглах боломжтой
Суулгах, эхлүүлэх нь өөрөө тийм ч хэцүү биш боловч Telegram серверт хандах хандалтыг хаасан сүлжээнд ажиллах тохиолдолд вэб хувилбар нь хэрэглэгчийн машинаас Telegram сервер рүү хүсэлт илгээдэг тул амжилтанд хүрэхээсээ илүү сэтгэл дундуур байх болно.
Аз болоход, энэ нь нэлээд энгийн (гэхдээ тийм ч тодорхой биш) засвар юм. Би энэ шийдлийн зохиогч биш гэдгийг анхааруулмаар байна. Би үүнийг дотроос нь олж чадсан
Тайлбарын доор та өөрийн Webogram толин тусгалыг алхам алхмаар тохируулж, nginx ашиглан Telegram серверт хүсэлтээ илгээх тохиргоог олох болно.
Жишээлбэл, би шинээр суулгаж, шинэчлэгдсэн Ubuntu Server 18.04.3-ийг сонгосон.
Анхааруулга: Энэ зааварт nginx дээр домэйн тохируулах зааврыг оруулахгүй. Та үүнийг өөрөө хийх хэрэгтэй. Энэхүү заавар нь таныг аль хэдийн ssl-тэй домэйныг тохируулсан бөгөөд үүнийг тохируулахаар төлөвлөж буй сервер өөрөө Telegram серверт хандах боломжтой (таны хүссэн хэлбэрээр) гэж үздэг.
Энэ серверийн IP нь 10.23.0.3, домайн нэр нь mywebogram.localhost гэж бодъё.
Эдгээр конвенцид үндэслэн би тохиргооны жишээг өгөх болно. Үнэт зүйлсийг өөрийнхөөрөө өөрчлөхөө бүү мартаарай.
Тиймээс эхлүүлье:
Webogram ажиллуулахын тулд бидэнд nodejs хэрэгтэй. Анхдагч байдлаар, хэрэв бид үүнийг Ubuntu репозитороос суулгавал nodejs 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
Хэрэв та энэ хүртэл бүх зүйлийг зөв хийсэн бол Webogram зөвшөөрлийн хуудас нээгдэнэ.
Одоо бид програмыг үйлчилгээ болгон ажиллуулахаар тохируулах хэрэгтэй. Үүнийг хийхийн тулд файл үүсгэцгээе
sudo touch /lib/systemd/system/webogram.service
Үүнийг дурын редактор дээр нээгээд дараах дүр төрхийг өгнө үү (WorkDirectory руу орох замаа оруулна уу)
[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
Алхамуудыг гүйцэтгэсний дараа Webogram 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 тохиргоонд юу нэмэх вэ:
- Бид эх байршлыг өөрчилдөг бөгөөд энэ нь Webogram-аас хариу өгөх 8000 порт руу хүсэлт илгээх болно
- Бид basic-auth ашиглан үндсэн байршлыг хаадаг. Энэ бол бидний аппликейшнийг сониуч нүд, роботоос хаах цэвэр бэлгэдлийн алхам юм. (Мөн блоклохтой холбоотой асуудлаас зайлсхийхийн тулд)
- Telegram сервер дээрх 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 зөвхөн хаягаар л боломжтой болно
Цөөн үлдлээ: бид төсөлдөө жижиг өөрчлөлт хийх болно.
Файлыг засварлагчаар нээнэ үү ~/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 хүсэлтүүд таны серверт очвол бүх зүйл зөв хийгдсэн бөгөөд Webogram одоо nginx-ээр дамжуулан проксид холбогдсон байна.
Энэ заавар надаас өөр хэн нэгэнд хэрэг болно гэж найдаж байна.
Дуустал нь уншсан бүх хүмүүст маш их баярлалаа.
Хэрэв хэн нэгэнд ямар нэгэн бэрхшээл тулгарсан эсвэл би алдаа гаргасан бол би хариулахдаа баяртай байх болно, коммент эсвэл PM-ээр танд туслах болно.
Эх сурвалж: www.habr.com