[Fun Docker Project] Разверните платформу вопросов и ответов с открытым исходным кодом, похожую на Zhihu, за 10 минут - Ответ
[Fun Docker Project] Разверните платформу вопросов и ответов с открытым исходным кодом, похожую на Zhihu, за 10 минут - Ответ

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

image-20230110145936305
image-20230110145936305

Answer — это сообщество вопросов и ответов с открытым исходным кодом, похожее на Zhihu. Поддерживает развертывание Docker, в настоящее время GitHub имеет 5,4 тыс. звезд.

Давайте потратим 10 минут на его создание сегодня!

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

Answer чиновникURL-адрес:https://answer.dev/

Answer чиновник GitHub:https://github.com/answerdev/answer

Answer чиновникдокумент:https://answer.dev/docs/installation/

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

2.1 Домашняя страница

screenshot
screenshot

2.2 Страница входа

image-20230110145609206
image-20230110145609206

2.3 Страница вопросов

image-20230110145543815
image-20230110145543815

2.4 Домашняя страница пользователя

image-20230110145644846
image-20230110145644846

2.5 Страница настроек учетной записи

image-20230110145713063
image-20230110145713063

2.6 Страница управления серверной частью

image-20230110150002951
image-20230110150002951

Выкидывайте ядро ​​прямо сюда docker-compose.yaml файл, знакомый docker Друзья окружающей среды могут напрямую копировать и строить его.

Answer развертывать:

Язык кода:yaml
копировать
version: "3"
services:
  answer:
    image: answerdev/answer
    ports:
      - '9008:80'            # Левую часть двоеточия можно заменить на незанятый порт на вашем сервере.
    restart: on-failure
    volumes:
      - ./answer-data:/data  # Путь слева от двоеточия можно изменить. Теперь это означает, что данные хранятся в текущей папке. answer-data в папке
      
  db:
    image: mariadb:10
    command: --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci
    environment:
      MYSQL_ROOT_PASSWORD: answer   # Пароль пользователя базы данных root. Рекомендуется изменить его самостоятельно.
      MYSQL_USER: answer         
      MYSQL_PASSWORD: answer   # Пароль ответа пользователя базы данных. Рекомендуется изменить его самостоятельно.
      MYSQL_DATABASE: answer 
    volumes:
      - ./mariadb:/var/lib/mysql  # Путь слева от двоеточия можно изменить. Теперь это означает, что данные хранятся в текущей папке. mariadb в папке
    restart: on-failure

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

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

  • сервер:Тенсент Гонконг Легкий сервер приложений 24 Юань / луна VPS один Гугу построил его сам, используяЛегкий сервер приложений Tencent , (лучше всего выбрать Серверы за пределами материка (Гонконг))если Если вы новичок, который только начал играть,,Также доступен для покупки Racknerd сервер, минимум менее одного года 100 блок (но рекомендуется выбирать 1G Машины с оперативной памятью больше) (Racknerd серверпредставлять:Нажмите, чтобы просмотреть
  • Система: Дебиан 10 (ДД-скрипт Не требуется ДД, даже с оригинальной системой Хорошо, я буду использовать его во всех последующих уроках. Debian или Ubuntu Построить~)
  • Установлено Docker、Docker-compose(Связанные скрипты
  • 【Не требуется Но рекомендуется】Доменное имя и разрешить его на сервере(Покупка доменного имени, разрешение доменного имени Видеоурок
  • 【Не требуется】нести прежнюю установленную панель пагоды, зарубежная версия aapanel,и Установлено Nginx(Адрес установки
  • 【Не требуется В этом уроке используется】Установлено Nginx Proxy Manager(Связанные руководства

Требования к серверу: рекомендуется 1 ГБ памяти или более, жесткий диск может быть больше.

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

4. Билибили

[Вы можете нажать, чтобы пожаловаться и посмотреть версию в высоком разрешении на станции B]:

https://www.bilibili.com/BV1xG4y1c7gx

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

Если вы не используете облегченный сервер приложений Tencent Cloud, вы можете сразу перейти к разделу 5.1.

Установите систему (облегченный сервер приложений 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 Установите Docker и Nginx Proxy Manager

Вы можете напрямую ссылаться на этот контент:https://blog.laoda.de/archives/nginxproxymanager

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

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

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

mkdir -p /root/data/docker_data/answer

cd /root/data/docker_data/answer

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

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

В разделе «Английский метод ввода» нажмите i

Язык кода:yaml
копировать
version: "3"
services:
  answer:
    image: answerdev/answer
    ports:
      - '9008:80'            # Левую часть двоеточия можно заменить на незанятый порт на вашем сервере.
    restart: on-failure
    volumes:
      - ./answer-data:/data  # Путь слева от двоеточия можно изменить. Теперь это означает, что данные хранятся в текущей папке. answer-data в папке
      
  db:
    image: mariadb:10
    command: --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci
    environment:
      MYSQL_ROOT_PASSWORD: answer   # Пароль пользователя базы данных root. Рекомендуется изменить его самостоятельно.
      MYSQL_USER: answer         
      MYSQL_PASSWORD: answer   # Пароль ответа пользователя базы данных. Рекомендуется изменить его самостоятельно.
      MYSQL_DATABASE: answer 
    volumes:
      - ./mariadb:/var/lib/mysql  # Путь слева от двоеточия можно изменить. Теперь это означает, что данные хранятся в текущей папке. mariadb в папке
    restart: on-failure

щелкнуть esc,Затем :wq Сохраняем и выходим.

5.3 Включите брандмауэр сервера (не обязательно) и зайдите на веб-страницу.

Открыть порты брандмауэра 9008

Например, способ открытия 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,Здесь мы заполняем 9008,Заполните пример answer , просто подтвердите (если вы находитесь в docker-compose Изменено в файле 9009,Вам нужно заполнить это здесь 9009,и так далее)

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

Проверьте, занят ли порт (начните с 9008 (например), введите:

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

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

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

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

бегать:

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

Если порт не занят (если занят, измените порт, например, измените его на 8081,Уведомление docker И командную строку, и фаервол надо менять)

наконец:

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

docker-compose up -d 

Теоретически мы можем войти http://ip:9008 Доступ установлен.

Уведомление:

1. Не знаю сервера IP,Вы можете напрямую использовать командную строкувходить:curl ip.sb,Будет отображен IP текущего сервера.

2. Если вы не можете получить доступ, проверьте еще раз, открыт ли соответствующий порт в брандмауэре панели Pagoda и внутреннем брандмауэре поставщика услуг.

Некоторые друзья могут захотеть настроить его и поделиться им с другими. Если они захотят поделиться им с другими позже, IP + порт слишком неэлегантны. Gugu рекомендует вам создать доменное имя, которое легко запомнить и которое выглядит более формально. Это позволит вам использовать https, что сделает веб-страницу более безопасной.

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

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

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

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

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

5.4 Обновить ответ

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

docker-compose down 

cp -r /root/data/docker_data/answer/root/data/docker_data/hexo.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.5 Удаление ответа

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

docker-compose down

cd ..

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

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

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

Для доступа к нашему сервису нам нужно использовать доменное имя вместо IP+порта!

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

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

image-20221016140213282
image-20221016140213282

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

Уведомление:

Nginx Proxy Менеджер (далее – НПМ) будет использоваться 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 и порт,Согласно статье,Должен быть 9008

Заполните IP:

если Nginx Proxy Manager и ответить На одном сервере вы можете использовать терминал входить:

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

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

В противном случае заполните напрямую answer Сервер, где 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:9008/;       # Будьте осторожны и измените его на тот порт, который вы действительно используете.
      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% изобратный прокси может быть эффективным, затем вы можете использовать доменное имя для установки и доступа к нему.

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

image-20220819150730128
image-20220819150730128

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

Поэтому позже я перестал его использовать и просто использовал метод выше для управления им.

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

Установка конфигурации смотрите видео Гугу.

8. Проблемы, возникшие на данный момент

Никто

9. Концовка

Желаю всем удачи и не стесняйтесь спрашивать, если у вас есть какие-либо вопросы. GitHub нести Issues,Вы также можете общаться и обсуждать друг с другом в комментариях.

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

Ссылки

Answer чиновникURL-адрес:https://answer.dev/

Answer чиновник GitHub:https://github.com/answerdev/answer

Answer чиновникдокумент:https://answer.dev/docs/installation/

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