Copy link
در این آموزش، نحوه راهاندازی یک سرور چت مبتنی بر Matrix (Synapse) به همراه Element Web و پنل مدیریت (Synapse Admin) روی لینوکس با استفاده از Docker را یاد میگیرید(داک همچنین نسخه element-web را ارائه میدهد و اگر مشتری درخواست کردند میتوانید آنرا نیز در مرحله 2 این آموزش در فایل compose درج کنید ، یعنی ساب دامنه ای که در browser چت را لود میکند)
c1.maral.chat
80
443
8008
apt update -ysudo apt install docker.io docker-compose -ysudo systemctl enable dockersudo systemctl start docker
توجه کنید که در این بخش بدلیل وضعیت اینترنت ایران احتمالا آپدیت درست انجام نشود بهمین دلیل پیشنهاد میشود که رپازتوری اوبونتو را به archive.ubuntu تغییر دهید ، برای سرور های ایران بصورت پیش فرض بروی ir.archive.ubuntu است .
mkdir -p /opt/matrixcd /opt/matrix/nano docker-compose.yml
version: "3.8" services: synapse: image: matrixdotorg/synapse:latest container_name: synapse restart: unless-stopped volumes: - ./synapse:/data environment: - SYNAPSE_SERVER_NAME=c1.maral.chat - SYNAPSE_REPORT_STATS=no ports: - "8008:8008" synapse-admin: image: awesometechnologies/synapse-admin container_name: synapse-admin restart: unless-stopped ports: - "8080:80" environment: - REACT_APP_SERVER=https://c1.maral.chat postgres: image: postgres:15 container_name: matrix-db restart: unless-stopped environment: POSTGRES_USER: synapse POSTGRES_PASSWORD: strongpassword POSTGRES_DB: synapse volumes: - ./db:/var/lib/postgresql/data coturn: image: instrumentisto/coturn container_name: coturn restart: unless-stopped network_mode: host command: > -n --log-file=stdout --lt-cred-mech --fingerprint --realm=c1.maral.chat --user=turnuser:turnpass
توجه کنید در این بخش بدلیل وضعیت اینترنت ممکن است awesometechnologies/synapse-admin بدرستی دانلود نشود و یا هنگام لاگین به پنل سریع لاگ اوت شوید ، پیشنهاد میشود اگر دسترسی به مخزن داکر پایدار است نسخه پایدارتری از این image را دانلود کنید بصورت پیش فرض آخرین نسخه را نصب میکند که باگ دارد .
docker run -it --rm \-v /opt/matrix/synapse:/data \-e SYNAPSE_SERVER_NAME=c1.maral.chat \-e SYNAPSE_REPORT_STATS=no \matrixdotorg/synapse:latest generate
docker-compose up -ddocker ps
با دستور اول هر کدی که در فایل کامپوز زده شده اجرا میشود و سرویس ها بروی پورت هایی که تعیین شده ران میشود ، دستور دوم نشان میدهد که آیا سرویس های ما بروی پورت نظر اجرا شده اند یا خیر .
sudo apt install nginx certbot python3-certbot-nginx -ynano /etc/nginx/sites-available/matrix
# ========================= # c1.maral.chat (Synapse) # ========================= server { listen 80; server_name c1.maral.chat; client_max_body_size 50M; return 301 https://$host$request_uri; } server { listen 443 ssl; server_name c1.maral.chat; client_max_body_size 50M; ssl_certificate /etc/nginx/ssl/fullchain.pem; ssl_certificate_key /etc/nginx/ssl/c1.maral.chat.key; location / { proxy_pass http://127.0.0.1:8008; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto https; proxy_set_header X-Forwarded-Host $host; proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection "upgrade"; } } # ========================= # c1admin.maral.chat (Admin UI) # ========================= server { listen 80; server_name c1admin.maral.chat; return 301 https://$host$request_uri; } server { listen 443 ssl; server_name c1admin.maral.chat; ssl_certificate /etc/nginx/ssl/fullchain.pem; ssl_certificate_key /etc/nginx/ssl/c1.maral.chat.key; location / { proxy_pass http://127.0.0.1:8080; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto https; proxy_set_header X-Forwarded-Host $host; proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection "upgrade"; } } # ========================= # maral.chat (.well-known) # ========================= server { listen 80; server_name maral.chat; return 301 https://$host$request_uri; } server { listen 443 ssl; server_name maral.chat; ssl_certificate /etc/nginx/ssl/fullchain.pem; ssl_certificate_key /etc/nginx/ssl/c1.maral.chat.key; location /.well-known/matrix/client { default_type application/json; return 200 '{"m.homeserver":{"base_url":"https://c1.maral.chat"}}'; } location /.well-known/matrix/server { default_type application/json; return 200 '{"m.server":"c1.maral.chat:443"}'; } }
چند مورد را در فایل کانفیگ nginx رعایت کنید :
1- مسیر فایل های ssl (این بخش را در مرحله 6 بصورت عملی توضیح داده ام)
قبل از انجام فایل های ssl خود شامل fullchain.pem (فایل اصلی و باندل ها) و pkey را بسازید و پرمیژن های لازم را بدهید .(در این مثال ما فایل ssl آماده wildcard داشتیم ، شما میتوانید از طریق certbot سه ماهه نصب کنید و تنظیم کنید در فایل )
2- بخش well-known را داخل فایل تعیین کنید زیرا نسخه اپلیکشن موبایل این برنامه هنگام لاگین خطا میدهید به نبود آن .
فعالسازی:
ln -s /etc/nginx/sites-available/matrix /etc/nginx/sites-enabled/nginx -tsystemctl restart nginx
mkdir -p /etc/nginx/sslnano /etc/nginx/ssl/fullchain.pemnano /etc/nginx/ssl/c1.maral.chat.key
یا سادهتر با Certbot:
certbot --nginx -d c1.maral.chat
curl c1.maral.chatdocker ps
docker exec -it synapse register_new_matrix_user \-c /data/homeserver.yaml \http://localhost:8008
توجه کنید که ممکن است این دستور نیاز به صدا زدن key مخصوص در دستور میباشد ، اگر چنین شد با دستور grep متن خطا و key را پیدا کنید و در دستور با “” صدا بزنید .
docker exec -it synapse bash -c "register_new_matrix_user http://localhost:8008 -u USERNAME -p PASSWORD --admin"
docker exec -it synapse bash -c "register_new_matrix_user http://localhost:8008 -u USERNAME -p NEWPASSWORD --admin"
docker exec -it synapse deactivate_account -u USERNAME
docker restart synapsedocker restart synapse-admin
بعد از بالا آمدن سرویس:
http://YOUR-IP:8080
یا از طریق دامنه.
cd /opt/matrix/synapsenano homeserver.yaml
نمونه فایل homeserver :
# Configuration file for Synapse. # # This is a YAML file: see [1] for a quick introduction. Note in particular # that *indentation is important*: all the elements of a list or dictionary # should have the same indentation. # # [1] https://docs.ansible.com/ansible/latest/reference_appendices/YAMLSyntax.html # # For more information on how to configure Synapse, including a complete accounting of # each option, go to docs/usage/configuration/config_documentation.md or # https://element-hq.github.io/synapse/latest/usage/configuration/config_documentation.html server_name: "c1.maral.chat" public_baseurl: "https://c1.maral.chat/" max_upload_size: "50M" cors_origins: - https://c1admin.maral.chat - https://c1.maral.chat pid_file: /data/homeserver.pid listeners: - port: 8008 tls: false type: http x_forwarded: true resources: - names: [client, federation] compress: false database: name: sqlite3 args: database: /data/homeserver.db log_config: "/data/c1.maral.chat.log.config" media_store_path: /data/media_store registration_shared_secret: "OhdwCo1j9W=biDt=oLNHkyts65S&rygJr:zMLnTC8n*4kel;u2" report_stats: false macaroon_secret_key: "xld5^BM2Di4@7;JCkGwS4wi+exzO3eHjNNYDm^BXYGJ#D93Dlm" form_secret: "c8+V,SAvNeH86rvv;k3X*fvI#+M6~uYWEz^QE8,TeC8Lxgam&3" signing_key_path: "/data/c1.maral.chat.signing.key" trusted_key_servers: - server_name: "matrix.org" enable_voip: true turn_uris: - "turn:c1rtc.maral.chat:3478?transport=udp" turn_shared_secret: "supersecret" turn_user_lifetime: 86400000 turn_allow_guests: true trusted_reverse_proxies: - 127.0.0.1 - ::1 # vim:ft=yaml
موارد مهم:
enable_registration: true
docker pscurl http://127.0.0.1:8008
اگر سرویس بالا نیامد:
docker logs synapse
کیان پور
1. مقدمهبا رشد سرویسهای این...
CXS یک ابزار امنیتی پیشرفته است ...
ذخیره نام، ایمیل و وبسایت من در مرورگر برای زمانی که دوباره دیدگاهی مینویسم.
Or copy link