[Веселый проект Docker] Увлекательного общения! Создайте подключаемое и легко расширяемое приложение для обмена мгновенными сообщениями (IM) с открытым исходным кодом за десять минут — Tailchat
[Веселый проект Docker] Увлекательного общения! Создайте подключаемое и легко расширяемое приложение для обмена мгновенными сообщениями (IM) с открытым исходным кодом за десять минут — Tailchat

1. Предисловие

На этой неделе я хотел бы поделиться с вами чатом в реальном времени с открытым исходным кодом.проект。Также автор@moonrailgunНастоятельно рекомендуется для Гугу。

PS: В настоящее время автор работает в команде Feishu компании Byte в качестве фронтенд-инженера.

img
img
image-20221204125057060
image-20221204125057060
image-20221204124746900
image-20221204124746900

1.1 Функция

  • Конфиденциальность: только приглашенные участники могут присоединиться к группе.
  • Чтобы не было посторонних, добавлять друзей можно только через никнейм + строку случайных чисел.
  • Двумерное групповое пространство, разделяющее разные темы по каналам.
  • Широкие возможности настройки группового пространства: создавайте уникальное групповое пространство посредством группировки и перетаскивания. В то же время с помощью дополнительных плагинов можно добавить больше возможностей.
  • Это может быть строго, а может быть весело. Благодаря сочетанию плагинов Tailchat можно создать для разных сценариев. Это может быть для развлечения или для бизнеса.
  • Внутренняя микросервисная архитектура готова к крупномасштабному развертыванию. Не беспокойтесь о том, что делать, когда число пользователей увеличится.
  • Управление пользователями
  • Система имен пользователей, основанная на 4-значной идентификации (аналогично Battle.net)
  • Управление друзьями
  • система чата
  • приватный чат
  • групповой чат
  • Расширенное текстовое сообщение
    • картина
    • Связь
    • упомянуть(@)
    • код
  • подключаемая система
  • внешний интерфейсподключаемая система(на основеministarмикроядерная архитектура)
Язык кода:txt
копировать
- Пользовательская тема
- Пользовательская панель
- Специальное действие
- Преобразование содержимого сообщения
- ...
  • задняя частьподключаемая система(на основеmoleculerмикросервисная архитектура)
  • открытая платформа
  • Connect ID
  • (Остальные в разработке)
  • Быстрый прыжок

1.2 Сценарии использования

Tailchat спроектирован с использованием подключаемой архитектуры для удовлетворения различных потребностей разных людей.

1.2.1 Для индивидуальных пользователей
  • Если вы хотите играть с друзьями
    • Создать группу
    • Разделите разные темы по нескольким каналам
    • Используйте панель «Страницы», чтобы поделиться любимыми веб-страницами.
  • Если вы хотите собрать свой собственный фан-круг
    • Используйте бота, чтобы подписаться на свои сообщения и пересылать их на панель чата.
    • Соберите своих поклонников вместе, не создавая бесчисленные группы QQ/группы WeChat.
    • Несколько каналов позволяют создавать несколько тем вместе.
  • Если вы очень беспокоитесь о своей конфиденциальности
    • Разверните его самостоятельно и держите все под контролем
1.2.2 Для бизнес-пользователей
  • Конструкция панели отвечает индивидуальным потребностям предприятия
  • Архитектура плагинов может облегчить вторичную разработку на основе ядра.
  • Реализация самостоятельного развертывания может защитить ценность предприятия и дать предприятиям душевное спокойствие.
  • Открытый исходный код облегчает проверку

1.3 Связанные адреса

ВоркованиеDemo:https://chat.gugu.ovh/

документ:https://tailchat.msgbyte.com/

GitHubИсходный код:https://github.com/msgbyte/tailchat

Блог автора:https://www.moonrailgun.com/about/

2. Отображение проекта

2.1 Чат

image-20221204125057060
image-20221204125057060

2.2 Центр плагинов

img
img

2.3 Различные темы

img
img

2.4 Бот для подписки на Github

img
img

Собранный файл docker-compose.yaml кидаем прямо сюда. Друзья, знакомые со средой докера, могут его напрямую скопировать и собрать. (Переменные среды можно изменить по мере необходимости, обратившись к документации)

Язык кода:yaml
копировать
version: "3.3"

services:
  # шлюз приложений
  service-gateway:
    build:
      context: .
    image: tailchat
    restart: unless-stopped
    env_file: docker-compose.env
    environment:
      SERVICES: core/gateway
      PORT: 3000
    depends_on:
      - mongo
      - redis
    labels:
      - "traefik.enable=true"
      - "traefik.http.routers.api-gw.rule=PathPrefix(`/`)"
      - "traefik.http.services.api-gw.loadbalancer.server.port=3000"
    networks:
      - internal

  # Обслуживание пользователей
  service-user:
    build:
      context: .
    image: tailchat
    restart: unless-stopped
    env_file: docker-compose.env
    environment:
      SERVICES: core/user/*
    depends_on:
      - mongo
      - redis
    networks:
      - internal

  # Групповое обслуживание
  service-group:
    build:
      context: .
    image: tailchat
    restart: unless-stopped
    env_file: docker-compose.env
    environment:
      SERVICES: core/group/*
    depends_on:
      - mongo
      - redis
    networks:
      - internal

  # чат-сервис
  service-chat:
    build:
      context: .
    image: tailchat
    restart: unless-stopped
    env_file: docker-compose.env
    environment:
      SERVICES: core/chat/*
    depends_on:
      - mongo
      - redis
    networks:
      - internal

  # файловый сервис / Центр регистрации плагинов / Сервис конфигурации
  service-file:
    build:
      context: .
    image: tailchat
    restart: unless-stopped
    env_file: docker-compose.env
    environment:
      SERVICES: core/file,core/plugin/registry,core/config
    depends_on:
      - mongo
      - redis
      - minio
    networks:
      - internal

  service-openapi:
    build:
      context: .
    image: tailchat
    restart: unless-stopped
    env_file: docker-compose.env
    environment:
      SERVICES: openapi/app,openapi/oidc/oidc
      OPENAPI_PORT: 3003
      OPENAPI_UNDER_PROXY: "true"
    depends_on:
      - mongo
      - redis
      - minio
    labels:
      - "traefik.enable=true"
      - "traefik.http.routers.openapi-oidc.rule=PathPrefix(`/open`)"
      - "traefik.http.services.openapi-oidc.loadbalancer.server.port=3003"
    networks:
      - internal

  # Служба плагинов (все плагины)
  service-all-plugins:
    build:
      context: .
    image: tailchat
    restart: unless-stopped
    env_file: docker-compose.env
    environment:
      SERVICEDIR: plugins
    depends_on:
      - mongo
      - redis
      - minio
    networks:
      - internal

  # база данных
  mongo:
    image: mongo:4
    restart: on-failure
    volumes:
      - ./data:/data/db
    networks:
      - internal

  # Кэширование данных и релейная связь
  redis:
    image: redis:alpine
    restart: on-failure
    networks:
      - internal

  # Служба хранения
  minio:
    image: minio/minio
    restart: on-failure
    networks:
      - internal
    environment:
      MINIO_ROOT_USER: tailchat
      MINIO_ROOT_PASSWORD: com.msgbyte.tailchat
    volumes:
      - ./storage:/data
    command: minio server /data --console-address ":9001"

  # Маршрутизация и переадресация
  traefik:
    image: traefik:v2.1
    restart: unless-stopped
    command:
      - "--api.insecure=true" # Don't do that in production!
      - "--providers.docker=true"
      - "--providers.docker.exposedbydefault=false"
      - "--entryPoints.web.address=:80"
      - "--entryPoints.web.forwardedHeaders.insecure" # Not good
    ports:
      - 8080:80        # 8080 можно изменить на незанятый порт на вашем сервере.
      - 127.0.0.1:11001:8080     #то же самое
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock:ro
    networks:
      - internal
      - default

networks:
  internal:
    name: tailchat-internal

Ниже приводится подробное руководство по сборке.

3. Настройте среду

Требования к серверу: для этого проекта лучше всего использовать VPS с 1 ядром и 2G или более. Чем больше жесткий диск, тем лучше.

4. Создайте видео

Билибили:https://www.bilibili.com/BV1aG411u7M8

5. Метод строительства

Установите систему (облегченный сервер приложений Tencent Cloud)

e59713fba8726d3cb55ae11bca83fe3c.png
e59713fba8726d3cb55ae11bca83fe3c.png

Самая большая особенность легкого сервера Tencent Cloud заключается в том, что он «легкий». По сравнению с CVM, он больше подходит для начала работы новичкам. Здесь мы выбираем базовый образ Docker, который может сохранить этапы установки Docker позже (если вы захотите). настаивайте на использовании внутреннего сервера, установленный здесь образ Docker также поможет вам настроить внутренние источники изображений, что позволит ускорить доступ к ресурсам образа Docker).

Войдите в систему (облегченный сервер приложений Tencent Cloud)

2722040ee311eb4a9ebf2a4945bf38f4.png
2722040ee311eb4a9ebf2a4945bf38f4.png
c0b5d360053746c4095d592967ee401f.png
c0b5d360053746c4095d592967ee401f.png
e0ba858f021b846ad0abc27acf5008c2.png
e0ba858f021b846ad0abc27acf5008c2.png

5.1 Предварительная настройка сервера

Начальные настройки сервера, см.:

6 мелочей, которые вы «должны» сделать при покупке нового сервера

Защитите своих птенцов! Учебник по безопасности сервера на уровне няни!

Здесь, потому что мы используем Tencent Cloud Легкий сервер приложений,По умолчанию система создает нам имя.lighthouseпользователей,В фоновом режиме системы также имеется брандмауэр (несколько часто используемых портов открыты по умолчанию)

Начинающим пользователям больше не придется беспокоиться о сложных конфигурациях безопасности сервера, что значительно снижает порог защиты сервера.

[Серия Docker] Новички могут играть на VPS-серверах без использования панели пагоды!

Язык кода:shell
копировать
sudo -i # Переключиться на пользователя root

apt update -y  # Пакеты обновления

apt install wget curl sudo vim git -y  # Система Debian относительно чистая, в ней установлено часто используемое программное обеспечение.

Примечание. Если памяти VPS слишком мало, рекомендуется установить SWAP, обычно в 1–1,5 раза больше памяти, что может обеспечить более плавную работу системы!

Для настройки SWAP можно использовать скрипты:

Язык кода:shell
копировать
wget -O box.sh https://raw.githubusercontent.com/BlueSkyXN/SKY-BOX/main/box.sh && chmod +x box.sh && clear && ./box.sh

<img src="https://img.laoda.de/i/2022/05/28/uoikkd-0.webp" alt="image-20220528185512488" style="zoom:50%;" />

выбирать18,Затем введите значение, которое вы хотите расширить.

<img src="https://img.laoda.de/i/2022/05/28/up2dkf-0.webp" alt="image-20220528185604586" style="zoom:50%;" />

Используйте Tencent Cloud Легкий сервер приложений Друзья могут перейти непосредственно к5.2.4

5.2 Установите Docker (вы можете пропустить эту часть, если используете облегченный сервер приложений Tencent Cloud)

5.2.1 Установка Docker на неконтинентальных серверах
Язык кода:shell
копировать
wget -qO- get.docker.com | bash
Язык кода:shell
копировать
docker -v  #Проверить версию докера
Язык кода:shell
копировать
systemctl enable docker  # Установите автоматический запуск при загрузке

Измените конфигурацию Docker (необязательно) (изШаобин Блог

Следующая конфигурация добавит пользовательскую интрасеть IPv6 Адрес для открытия контейнера IPv6 функцию, а также ограничение размера файла журнала для предотвращения Docker Логи заполняют винчестер (уроки из слез):

Язык кода:shell
копировать
cat > /etc/docker/daemon.json <<EOF
{
    "log-driver": "json-file",
    "log-opts": {
        "max-size": "20m",
        "max-file": "3"
    },
    "ipv6": true,
    "fixed-cidr-v6": "fd00:dead:beef:c0::/80",
    "experimental":true,
    "ip6tables":true
}
EOF

Затем перезапустите службу Docker:

Язык кода:shell
копировать
systemctl restart docker
5.2.2 Установка Docker-compose не на материковом сервере
Язык кода:shell
копировать
sudo curl -L "https://github.com/docker/compose/releases/download/1.29.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
Язык кода:shell
копировать
sudo chmod +x /usr/local/bin/docker-compose
Язык кода:shell
копировать
docker-compose --version  #Просмотреть версию docker-compose
5.2.3 Установите докер на домашний сервер
Язык кода:shell
копировать
curl -sSL https://get.daocloud.io/docker | sh
Язык кода:shell
копировать
docker -v  #Проверить версию докера
Язык кода:shell
копировать
systemctl enable docker  # Установите автоматический запуск при загрузке

Измените конфигурацию Docker (необязательно) (изШаобин Блог

Следующая конфигурация добавит пользовательскую интрасеть IPv6 Адрес для открытия контейнера IPv6 функцию, а также ограничение размера файла журнала для предотвращения Docker Логи заполняют винчестер (уроки из слез):

Язык кода:shell
копировать
cat > /etc/docker/daemon.json <<EOF
{
    "log-driver": "json-file",
    "log-opts": {
        "max-size": "20m",
        "max-file": "3"
    },
    "ipv6": true,
    "fixed-cidr-v6": "fd00:dead:beef:c0::/80",
    "experimental":true,
    "ip6tables":true
}
EOF

Затем перезапустите службу Docker:

Язык кода:shell
копировать
systemctl restart docker
5.2.4 Установите докер на домашний сервер-compose
Язык кода:shell
копировать
curl -L https://get.daocloud.io/docker/compose/releases/download/v2.1.1/docker-compose-`uname -s`-`uname -m` > /usr/local/bin/docker-compose

chmod +x /usr/local/bin/docker-compose

docker-compose --version  #Просмотреть версию docker-compose

5.3 Установите NginxProxyManager

Обратитесь к содержанию здесь:https://blog.laoda.de/archives/nginxproxymanager

5.4 Создайте каталог установки

Создайте каталог установки:

Язык кода:shell
копировать
sudo -i

mkdir -p /root/data/docker_data/tailchat

cd /root/data/docker_data/tailchat

Здесь мы устанавливаем напрямую с помощью докера.

Язык кода:shell
копировать
vim docker-compose.yml

Под английским методом ввода,в соответствии сi

Язык кода:yaml
копировать
version: "3.3"

services:
  # шлюз приложений
  service-gateway:
    build:
      context: .
    image: tailchat
    restart: unless-stopped
    env_file: docker-compose.env
    environment:
      SERVICES: core/gateway
      PORT: 3000
    depends_on:
      - mongo
      - redis
    labels:
      - "traefik.enable=true"
      - "traefik.http.routers.api-gw.rule=PathPrefix(`/`)"
      - "traefik.http.services.api-gw.loadbalancer.server.port=3000"
    networks:
      - internal

  # Обслуживание пользователей
  service-user:
    build:
      context: .
    image: tailchat
    restart: unless-stopped
    env_file: docker-compose.env
    environment:
      SERVICES: core/user/*
    depends_on:
      - mongo
      - redis
    networks:
      - internal

  # Групповое обслуживание
  service-group:
    build:
      context: .
    image: tailchat
    restart: unless-stopped
    env_file: docker-compose.env
    environment:
      SERVICES: core/group/*
    depends_on:
      - mongo
      - redis
    networks:
      - internal

  # чат-сервис
  service-chat:
    build:
      context: .
    image: tailchat
    restart: unless-stopped
    env_file: docker-compose.env
    environment:
      SERVICES: core/chat/*
    depends_on:
      - mongo
      - redis
    networks:
      - internal

  # файловый сервис / Центр регистрации плагинов / Сервис конфигурации
  service-file:
    build:
      context: .
    image: tailchat
    restart: unless-stopped
    env_file: docker-compose.env
    environment:
      SERVICES: core/file,core/plugin/registry,core/config
    depends_on:
      - mongo
      - redis
      - minio
    networks:
      - internal

  service-openapi:
    build:
      context: .
    image: tailchat
    restart: unless-stopped
    env_file: docker-compose.env
    environment:
      SERVICES: openapi/app,openapi/oidc/oidc
      OPENAPI_PORT: 3003
      OPENAPI_UNDER_PROXY: "true"
    depends_on:
      - mongo
      - redis
      - minio
    labels:
      - "traefik.enable=true"
      - "traefik.http.routers.openapi-oidc.rule=PathPrefix(`/open`)"
      - "traefik.http.services.openapi-oidc.loadbalancer.server.port=3003"
    networks:
      - internal

  # Служба плагинов (все плагины)
  service-all-plugins:
    build:
      context: .
    image: tailchat
    restart: unless-stopped
    env_file: docker-compose.env
    environment:
      SERVICEDIR: plugins
    depends_on:
      - mongo
      - redis
      - minio
    networks:
      - internal

  # база данных
  mongo:
    image: mongo:4
    restart: on-failure
    volumes:
      - ./data:/data/db
    networks:
      - internal

  # Кэширование данных и релейная связь
  redis:
    image: redis:alpine
    restart: on-failure
    networks:
      - internal

  # Служба хранения
  minio:
    image: minio/minio
    restart: on-failure
    networks:
      - internal
    environment:
      MINIO_ROOT_USER: tailchat
      MINIO_ROOT_PASSWORD: com.msgbyte.tailchat
    volumes:
      - ./storage:/data
    command: minio server /data --console-address ":9001"

  # Маршрутизация и переадресация
  traefik:
    image: traefik:v2.1
    restart: unless-stopped
    command:
      - "--api.insecure=true" # Don't do that in production!
      - "--providers.docker=true"
      - "--providers.docker.exposedbydefault=false"
      - "--entryPoints.web.address=:80"
      - "--entryPoints.web.forwardedHeaders.insecure" # Not good
    ports:
      - 8080:80            # 8080 можно изменить на незанятый порт на вашем сервере.
      - 127.0.0.1:11001:8080     #11001 То же, что и выше.
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock:ro
    networks:
      - internal
      - default

networks:
  internal:
    name: tailchat-internal

в соответствии содин разesc,Затем:wq Сохраните и выйдите, затем

Язык кода:shell
копировать
vim docker-compose.env

Напишите также следующий контент:

Язык кода:shell
копировать
LOGGER=true
LOGLEVEL=info
SERVICEDIR=services

TRANSPORTER=redis://redis:6379

CACHER=redis://redis:6379

REDIS_URL=redis://redis:6379
MONGO_URL=mongodb://mongo/tailchat
SECRET=adswddWEQ@4  # Сменить ключ на свой

# file
API_URL=https://chat.gugu.ovh   # Измените его на свой сайт

# minio
MINIO_URL=minio:9000
MINIO_USER=tailchat
MINIO_PASS=com.msgbyte.tailchat

# SMTP
SMTP_SENDER=
SMTP_URI=

# metrics
PROMETHEUS=1

в соответствии содин разesc,Затем:wq Сохраните и выйдите, затем

Язык кода:shell
копировать
docker pull moonrailgun/tailchat
docker tag moonrailgun/tailchat tailchat # Измените тег, чтобы файл конфигурации мог его распознать.

наконец:

Язык кода:shell
копировать
cd /root/data/docker_data/tailchat    # Обязательно перейдите в папку, где находится файл dockercompose.

# Убедитесь, что файлы конфигурации (docker-compose.yml и docker-compose.env) находятся в текущем каталоге.
# Выполните следующую команду, чтобы начать одним щелчком мыши
docker-compose up -d

доступ: http://<server ip>:8080 Вы можете открыть чат

Обратите внимание, что для некоторых облачных сервисов может потребоваться ручное открытие портов брандмауэра.

существоватьdocker-compose.envНекоторые переменные среды представлены в файле для конфигурации.。

tailchat изdocker-compose.ymlКонфигурация по умолчанию обеспечивает следующую конфигурацию:

  • mongodb: Постоянная база данных
  • redis: База данных KV и служба ретрансляции сообщений
  • minio: Распределенный файловый сервис

5.5 Откройте брандмауэр сервера и получите доступ к веб-странице.

открытый брандмауэризпорт8080

Способ открытия Tencent Cloud следующий:

<img src="https://img.laoda.de/i/2022/06/30/zlio5h-2.webp" alt="image-20220630215240864" style="zoom:33%;" />

<img src="https://img.laoda.de/i/2022/06/30/10h3dqt-2.webp" alt="image-20220630220546335" style="zoom:33%;" />

На картинке Заполните примеризда5230,Заполните примечанияиздаmemos,Здесь мы заполняем8080,Заполните примерmicrobin ,ХОРОШО(если тысуществоватьdocker-composeИзменено в файле8081,Вам нужно заполнить это здесь8081,и так далее)

<img src="https://img.laoda.de/i/2022/08/19/o4byqz-2.webp" alt="image-20220819145844555" style="zoom:33%;" />

Проверятьпорт Оно занято?(к8080Например),входить:

Язык кода:shell
копировать
lsof -i:8080 #Проверить, занят ли порт 8080,если занято,Переопределить порт

Если ничего не появляется, это означает, что порт не занят и мы можем продолжить следующие операции ~

Если оно появляется:

Язык кода:shell
копировать
-bash: lsof: command not found

бегать:

Язык кода:shell
копировать
apt install lsof  #Установить lsof

Если порт не занят (если занят, измените порт, например на 8081, обратите внимание на изменение в командной строке докера и фаерволе)

Теоретически мы можемквходитьhttp://ip:8080посетил。

Уведомление: 1、понятия не имеюсерверIP,Можеткпрямойсуществоватькомандная строкавходить:curl ip.sb,отобразит текущийсерверизIP。 2. Если вы не можете получить доступ, проверьте еще раз, открыт ли соответствующий порт в брандмауэре панели Pagoda и внутреннем брандмауэре поставщика услуг.

Некоторые друзья могут захотеть создать его и поделиться им с другими.,Если вы хотите позже поделиться им с другими,IP+порт — это слишком неэлегантно,Гугу предлагает каждому получить доменное имя,легко запомнить,Это также выглядит немного более официально. Это может сделать https,Это сделает веб-страницу более безопасной. (требуется доступ к IP+порту,Можеткпрямой跳到5.6,и пропустить6. Обратный проксичасть)

иnamesiloвышеxyzсуффиксиздоменное имя Всего один год7кусокденьги,Можно выбрасывать каждый год.

Если вы хотите использовать его в течение длительного времени,По-прежнему рекомендуется покупать доменное имя с суффиксом com.,более формальный,Можетквходитьlaodadeполучить1Долларизскидка(понятия не имею现существовать Есть ли еще)

namesiloПоставляется с защитой конфиденциальности,Гугу использовал этот,Цена также относительно низкая среди этих регистраторов.,Ключевым моментом является то, что его компания не похожа на других регистраторов доменных имен.,№ 7788изрутина!(Это просто какой-то фоновый интерфейсуродливыйдревний = =)

[Покупка доменного имени] Код скидки Namesilo и руководство по разрешению доменных имен (с рекомендациями и мерами предосторожности при покупке сервера)

Давайте посмотрим вниз!

5.6 Обновить

5.6.1 развертывание docker-compose
Язык кода:shell
копировать
cd /root/data/docker_data/tailchat

docker-compose down 

cp -r /root/data/docker_data/tailchat /root/data/docker_data/tailchat.archive  # Предварительно сделайте резервную копию, на всякий случай. На самом деле здесь она не нужна, потому что мы не сопоставляем ее с локальной папкой.

docker-compose pull

docker-compose up -d    # Пожалуйста, не используйте docker-compose stop, чтобы остановить контейнер, поскольку для этого требуется дополнительное время для ожидания остановки контейнера; up Когда -d напрямую обновляет контейнер, он автоматически останавливается и немедленно пересобирает новый контейнер. Нет необходимости тратить это время.

docker image prune  # prune Команда используется для удаления тех, которые больше не используются. docker объект. Удалить все элементы, которые не были tag Теги и изображения, не используемые контейнерами

намекать:

Язык кода:shell
копировать
WARNING! This will remove all dangling images.
Are you sure you want to continue? [y/N] 

входитьy

Приложения, созданные с использованием Docker, очень легко обновлять~

5.7 Удаление

Язык кода:shell
копировать
cd /root/data/docker_data/tailchat

docker-compose down 

rm -rf /root/data/docker_data/tailchat  # Полностью удалить данные, сопоставленные с локальными

Может быть удален очень чисто.

6. Обратный прокси

6.1 Использование прокси-менеджера Nginx

Добавление поворота прокси До,Убедитесь, что вы завершили анализ доменного имени.,Не будетиз Можеткпосмотри на это:Доменное имя и разрешить его на сервереПокупка доменного имени, разрешение доменного имени Видеоурок

image-20221016140213282
image-20221016140213282

После этого войдите в Nginx. Proxy Manager(Не будетизпосмотри на это:Установите прокси-менеджер Nginx.Связанные руководства))

Уведомление: Nginx Proxy Manager(к В дальнейшем именуемыйNPM)будет использоваться80443порт,Поэтому эту машину невозможно занять (например, там изначально стоит Nginx)

Просто добавьте несколько фотографий:

<img src="https://img.laoda.de/i/2022/05/02/kfes4s\_7.webp" alt="image-20220502123517401" style="zoom: 33%;" />

image-20221016140258381
image-20221016140258381

Обратите внимание на заполнение соответствующегоиздоменное имяIPипорт,Согласно статье,должно быть8080

Заполните IP:

Если Nginx Proxy Manager и Tailchat находятся на одном сервере, вы можете ввести:

Язык кода:shell
копировать
ip addr show docker0

Просмотрите соответствующий внутренний IP-адрес контейнера Docker.

В противном случае заполните напрямуюtailchatМестосуществоватьизсерверIPПросто отлично。

<img src="https://img.laoda.de/i/2022/04/03/h9azjx\_7.webp" alt="image-20220403104353185" style="zoom: 33%;" />

Откройте его еще раз и проверьте следующее:

image-20221016140356324
image-20221016140356324

Затем вы можете использовать доменное имя для установки и доступа к нему.

6.2 Использование панели «Пагода»

Я обнаружил, что многие друзья до сих пор привыкли использовать панель Pagoda, и вот обратная конфигурация панели Pagoda:

Просто создайте новый сайт, без базы данных, без PHP, просто статический.

Затем откройте следующую конфигурацию и измените конфигурацию Nginx.

image-20220819150345725
image-20220819150345725
image-20220819150542867
image-20220819150542867

Код выглядит следующим образом:

Язык кода:text
копировать
    location / {
      proxy_pass http://127.0.0.1:8080/;       # Будьте осторожны и измените его на тот порт, который вы действительно используете.
      rewrite ^/(.*)$ /$1 break;
      proxy_redirect off;
      proxy_set_header Host $host;
      proxy_set_header X-Forwarded-Proto $scheme;
      proxy_set_header X-Real-IP $remote_addr;
      proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
      proxy_set_header Upgrade-Insecure-Requests 1;
      proxy_set_header X-Forwarded-Proto https;
    }

Этот метод работает для 90% обратных прокси.

Некоторые студенты могут спросить, почему бы просто не использовать обратную прокси-функцию, идущую в комплекте с пагодой.

image-20220819150730128
image-20220819150730128

Это также возможно, но сам Гугу уже сталкивался с ситуацией, когда при наличии нескольких веб-сайтов, которые необходимо отменить, при настройке здесь будет сообщаться об ошибке = =

Так что позже он мне не понадобился, и я просто использовал описанный выше метод для его работы.

7. Руководство по использованию

7.1 Установка и настройка

Посмотрите видео Гугу.

8. Возникшие текущие проблемы

8.1 Функция AirDrop Не знаю, как ею пользоваться

8.2 Голосовой чат временно не поддерживается

8.3 Самостоятельная загрузка смайлов на данный момент не поддерживается.

Вы можете использовать его больше и давать больше комментариев и предложений автору, чтобы помочь проекту быстрее обновляться и обновляться!

9. Концовка

Желаю вам всем получить удовольствие от его использования,有问题МожеткидтиGitHubнестиIssues,Вы также можете общаться и обсуждать друг с другом в комментариях.

в то же время,проект находится на начальной стадии,Студенты, которые имеют возможность внести свой вклад в проект,Вы также можете активно присоединитьсяпроектЧжунлай,Внесите свой вклад!

Ссылки

ВоркованиеDemo:https://chat.gugu.ovh/

документ:https://tailchat.msgbyte.com/

GitHubИсходный код:https://github.com/msgbyte/tailchat

boy illustration
Неразрушающее увеличение изображений одним щелчком мыши, чтобы сделать их более четкими артефактами искусственного интеллекта, включая руководства по установке и использованию.
boy illustration
Копикодер: этот инструмент отлично работает с Cursor, Bolt и V0! Предоставьте более качественные подсказки для разработки интерфейса (создание навигационного веб-сайта с использованием искусственного интеллекта).
boy illustration
Новый бесплатный RooCline превосходит Cline v3.1? ! Быстрее, умнее и лучше вилка Cline! (Независимое программирование AI, порог 0)
boy illustration
Разработав более 10 проектов с помощью Cursor, я собрал 10 примеров и 60 подсказок.
boy illustration
Я потратил 72 часа на изучение курсорных агентов, и вот неоспоримые факты, которыми я должен поделиться!
boy illustration
Идеальная интеграция Cursor и DeepSeek API
boy illustration
DeepSeek V3 снижает затраты на обучение больших моделей
boy illustration
Артефакт, увеличивающий количество очков: на основе улучшения характеристик препятствия малым целям Yolov8 (SEAM, MultiSEAM).
boy illustration
DeepSeek V3 раскручивался уже три дня. Сегодня я попробовал самопровозглашенную модель «ChatGPT».
boy illustration
Open Devin — инженер-программист искусственного интеллекта с открытым исходным кодом, который меньше программирует и больше создает.
boy illustration
Эксклюзивное оригинальное улучшение YOLOv8: собственная разработка SPPF | SPPF сочетается с воспринимаемой большой сверткой ядра UniRepLK, а свертка с большим ядром + без расширения улучшает восприимчивое поле
boy illustration
Популярное и подробное объяснение DeepSeek-V3: от его появления до преимуществ и сравнения с GPT-4o.
boy illustration
9 основных словесных инструкций по доработке академических работ с помощью ChatGPT, эффективных и практичных, которые стоит собрать
boy illustration
Вызовите deepseek в vscode для реализации программирования с помощью искусственного интеллекта.
boy illustration
Познакомьтесь с принципами сверточных нейронных сетей (CNN) в одной статье (суперподробно)
boy illustration
50,3 тыс. звезд! Immich: автономное решение для резервного копирования фотографий и видео, которое экономит деньги и избавляет от беспокойства.
boy illustration
Cloud Native|Практика: установка Dashbaord для K8s, графика неплохая
boy illustration
Краткий обзор статьи — использование синтетических данных при обучении больших моделей и оптимизации производительности
boy illustration
MiniPerplx: новая поисковая система искусственного интеллекта с открытым исходным кодом, спонсируемая xAI и Vercel.
boy illustration
Конструкция сервиса Synology Drive сочетает проникновение в интрасеть и синхронизацию папок заметок Obsidian в облаке.
boy illustration
Центр конфигурации————Накос
boy illustration
Начинаем с нуля при разработке в облаке Copilot: начать разработку с минимальным использованием кода стало проще
boy illustration
[Серия Docker] Docker создает мультиплатформенные образы: практика архитектуры Arm64
boy illustration
Обновление новых возможностей coze | Я использовал coze для создания апплета помощника по исправлению домашних заданий по математике
boy illustration
Советы по развертыванию Nginx: практическое создание статических веб-сайтов на облачных серверах
boy illustration
Feiniu fnos использует Docker для развертывания личного блокнота Notepad
boy illustration
Сверточная нейронная сеть VGG реализует классификацию изображений Cifar10 — практический опыт Pytorch
boy illustration
Начало работы с EdgeonePages — новым недорогим решением для хостинга веб-сайтов
boy illustration
[Зона легкого облачного игрового сервера] Управление игровыми архивами
boy illustration
Развертывание SpringCloud-проекта на базе Docker и Docker-Compose