1 В избранное 0 Ответвления 0

OSCHINA-MIRROR/wejectchan-ginblog

Присоединиться к Gitlife
Откройте для себя и примите участие в публичных проектах с открытым исходным кодом с участием более 10 миллионов разработчиков. Приватные репозитории также полностью бесплатны :)
Присоединиться бесплатно
Клонировать/Скачать
Внести вклад в разработку кода
Синхронизировать код
Отмена
Подсказка: Поскольку Git не поддерживает пустые директории, создание директории приведёт к созданию пустого файла .keep.
Loading...
README.md

Джинблог (проект завершён, добро пожаловать!)

Важные обновления:

  • 2022.8.17: добавлена конфигурация региона сервера для облачного хранилища Qiniu в config/config.ini. Теперь настройка региона сервера облачного хранилища Qiniu стала более удобной.
  • 2022.4.28: отменена проверка на обязательное наличие загружаемого изображения при добавлении статьи в бэкэнде. Это позволяет избежать ошибок при неудачной загрузке изображений в облачное хранилище Qiniu.
  • 2021.3.7: внесены изменения в стиль CSS страницы чтения статей.
  • 2021.3.2: изменены пути к статическим ресурсам. Фронтенд-проект теперь можно сразу упаковать, без необходимости перемещения файлов в каталог static. Это упрощает процесс сборки.
  • 2021.2.12: для удобства общения создана группа QQ: 951736723. Если у вас есть вопросы, приглашаем присоединиться к группе для обсуждения.
  • 2021.2.10: добавлена адаптация для мобильных устройств на страницах демонстрации.
  • 2021.1.2: добавлены функции регистрации, входа и комментирования. В бэкэнде добавлена функция проверки комментариев.
  • 2021.1.3: добавлены функции проверки входа и регистрации; отображение количества комментариев и просмотров; количество комментариев и количество просмотров на странице статьи.

Введение:

Проект Ginblog представляет собой блог, созданный с использованием стека технологий gin+vue. Цель проекта — поделиться опытом создания блога на основе полного стека и предоставить возможность заинтересованным разработчикам познакомиться с созданием веб-приложений на Golang. Вы можете посмотреть видео о процессе создания полного стека на Bilibili (https://space.bilibili.com/402177130). Также вы можете оставить свои комментарии и поделиться своим мнением. Мы готовы обсудить ваши идеи.

Структура каталогов:

├─  .gitignore
│  go.mod // Зависимости проекта
│  go.sum
│  LICENSE
│  main.go // Основная программа
│  README.md
│  tree.txt

├─api         
├─config // Вход в конфигурацию проекта   
├─database  // Файлы резервных копий базы данных (инициализация)
├─log  // Журнал проекта
├─middleware  // Промежуточное ПО
├─model // Уровень модели данных
├─routes
│      router.go // Вход в маршрутизацию    
├─static // Статические файлы для упаковки
│  ├─admin  // Страница бэкэнда управления (уже не используется, статические файлы упакованы в web/admin/dist)         
│  └─front  // Страница внешнего интерфейса (уже не используется, статические файлы упакованы в web/front/dist) 
├─upload   
├─utils // Инструменты общего пользования проекта
│  │  setting.go 
│  ├─errmsg   
│  └─validator         
└─web // Исходный код внешнего интерфейса (VUECLI проект исходного файла)
    ├─admin             
    └─front

Запуск и развёртывание:

  1. Клонируйте проект:
git clone git@gitee.com:wejectchan/ginblog.git
#or
git clone https://github.com/wejectchen/Ginblog.git
  1. Перейдите в папку проекта:
cd yourPath/ginbolg
  1. Установите зависимости:
go mod tidy
  1. Инициализируйте конфигурацию проекта в файле config.ini:
./config/config.ini

[server]
AppMode = debug # Режим отладки для разработки, режим выпуска для производства
HttpPort = :3000 # Порт проекта
JwtKey = 89js82js72 #Ключ JWT, может быть случайной строкой

[database]
Db = mysql #Тип базы данных, не может быть изменён на другие формы
DbHost = 127.0.0.1 # Адрес базы данных
DbPort = 3306 # Порт базы данных
DbUser = ginblog # Имя пользователя базы данных
DbPassWord = admin123 # Пароль пользователя базы данных
DbName = ginblog # Название базы данных

[qiniu]
# Информация об облачном хранилище Qiniu
Zone = 1 # 1: Восток Китая; 2: Север Китая; 3: Юг Китая, по умолчанию Север Китая, если не указано иное. Для особых случаев использования за пределами страны настройте самостоятельно
AccessKey =
SecretKey =
Bucket =
QiniuSever =
  1. Импортируйте файлы SQL в базу данных в каталоге database:

Рекомендуется использовать Navicat или другое программное обеспечение для управления базами данных для импорта. 6. Запустите проект:

 go run main.go

Теперь проект запущен, и вы можете получить доступ к страницам:

Главная страница
http://localhost:3000
Страница бэкэнда
http://localhost:3000/admin

По умолчанию имя пользователя: admin, пароль: 123456

Наслаждайтесь~~~~

==При использовании или открытии проекта, если возникают проблемы или требуются дополнительные функции, пожалуйста, отправьте Iusse или напрямую PR==

Реализованные функции:

  1. Простое управление правами пользователей.
  2. Шифрование паролей пользователей.
  3. Пользовательская классификация статей.
  4. Разбиение на страницы списка.
  5. Загрузка изображений в облако Qiniu.
  6. Аутентификация JWT.
  7. Настраиваемая функция журнала.
  8. Настройка CORS для междоменного доступа.
  9. Функция комментирования статей.

Технологический стек:

  • Golang
    • Gin web framework
    • gorm(v1 && v2)
    • jwt-go
    • scrypt
    • logrus
    • gin-contrib/cors
    • go-playground/validator/v10
    • go-ini
  • JavaScript
    • vue
    • vue cli
    • vue router
    • ant design vue
    • vuetify
    • axios
    • tinymce
    • moment
  • MySQL version:8.0.21

Предварительный просмотр проекта:

  • Страница внешнего интерфейса:

  • Страница внешнего интерфейса:

  • Логин на страницу бэкэнда:

  • Страница управления бэкэндом:

Прогресс обновления (видео процесса создания в основном завершено):

Бэкэнд завершён Конфигурация базы данных и модели данных

Третий раздел: создание модуля обработки ошибок архитектуры и интерфейса маршрутизации

Четвёртый раздел: написание интерфейса модуля пользователя, реализация первичной проверки и функции разбивки на страницы

Пятый раздел: представление и выбор стратегии хранения зашифрованных паролей пользователей

Шестой раздел: написание интерфейсов для редактирования информации о пользователе и удаления пользователя

Седьмой раздел: завершение написания интерфейса категорий блога

Восьмой раздел: написание интерфейса статей блога (добавление, редактирование, удаление)

Девятый раздел: завершение интерфейса статей блога (связь между статьями и категориями)

Десятый раздел: написание интерфейса входа в систему, завершение промежуточного программного обеспечения JWT

Одиннадцатый раздел: завершение интерфейса входа

Двенадцатый раздел: завершение интерфейса загрузки (GIN + хранилище объектов Qiniu)

Тринадцатый раздел: обработка системы журналов (настраиваемые журналы, разделение журналов по времени, мягкое соединение с последними журналами)

Четырнадцатый раздел: проверка данных на стороне сервера, настройка параметров междоменного доступа, увеличение количества возвращаемых общих результатов запроса

Завершение создания страниц управления бэкендом

Первый раздел: инициализация фронтенда, создание среды разработки и установка соответствующих зависимостей

Второй раздел: написание страницы входа, реализация двусторонней привязки данных и проверки данных

Третий раздел: завершение страницы входа

Четвертый раздел: настройка навигации по маршруту и создание структуры страниц управления бэкэндом

Пятый раздел: завершение меню страницы управления и перехода по страницам

Раздел шестой: написание страницы списка пользователей

Седьмой раздел: функции поиска и удаления пользователей в списке пользователей

Восьмой раздел: завершение функций добавления и редактирования пользователей в списке пользователей

Девятый раздел: исправление некоторых ошибок

Десятый раздел: написание страниц списка категорий и списка статей

Одиннадцатый раздел: завершение страниц добавления статей и редактирования статей

Двенадцатый раздел: индивидуальная упаковка редактора форматированного текста TinyMCE, реализация функций загрузки изображений и т. д.

Тринадцатый раздел: завершение работы над страницами управления бэкэнда, упаковка и развёртывание Vue

Фронтенд-демонстрация завершённых страниц (обновлённых)

Первый раздел: построение структуры проекта

Второй раздел: написание основного контента и личной информации

Третий раздел: завершение функции обновления личной информации

Четвёртый раздел: завершение страницы списка статей

Пятый раздел: завершение страницы сведений о статье

Развёртывание Docker

Как установить Docker

Официальная документация: Get Docker | Docker Documentation

Выберите соответствующую систему для просмотра, например, Ubuntu 18.04 LTS.

  • Удаление старой версии:

    • sudo apt-get remove docker docker-engine docker.io containerd runc
  • Добавление новой версии репозитория:

    • sudo apt-get update
    • sudo apt-get install \ apt-transport-https \ ca-certificates \ curl \ gnupg-agent \ software-properties-common
  • Получение официального ключа GPG:

    • curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
  • Проверка ключа: если вывод представляет собой следующее содержимое, это означает, что проверка прошла успешно.

    • sudo apt-key fingerprint 0EBFCD88
    • 
      

pub rsa4096 2017-02-22 [SCEA] 9DC8 5822 9FC7 DD38 854A E2D8 8D81 803C 0EBF CD88 uid [ unknown] Docker Release (CE deb) docker@docker.com sub rsa4096 2017-02-22 [S]```

  • Добавление адреса репозитория:

    • sudo add-apt-repository \ "deb [arch=amd64] https://download.docker.com/linux/ubuntu \ $(lsb_release -cs) \ stable"
    • Также можно использовать внутренний репозиторий для загрузки, скорость загрузки выше, рекомендуется
    • sudo add-apt-repository \ "deb [arch=amd64] https://mirrors.ustc.edu.cn/docker-ce/linux/ubuntu/ \ $(lsb_release -cs) \ stable"
  • Обновление репозитория и установка:

    • sudo apt-get update
    • sudo apt-get install docker-ce docker-ce-cli containerd.io
  • Подтверждение установки: запустите «hello-world», чтобы проверить успешность установки Docker.

    • docker pull hello-world
    • docker run hello-world Перевод текста на русский язык:

Образ «hello-world» из Docker Hub (amd64). 3. Демон Docker создал новый контейнер из этого образа, который запускает исполняемый файл, создающий вывод, который вы сейчас читаете. 4. Демон Docker передал этот вывод клиенту Docker, который отправил его в ваш терминал. Чтобы попробовать что-то более амбициозное, вы можете запустить контейнер Ubuntu с помощью команды: $ docker run -it ubuntu bash Делитесь образами, автоматизируйте рабочие процессы и многое другое с бесплатным Docker ID: https://hub.docker.com/ Дополнительные примеры и идеи можно найти по адресу: https://docs.docker.com/get-started/

Дополнительно: настройте локальное хранилище образов, чтобы обеспечить скорость загрузки.

# Здесь в качестве примера используется Alibaba Cloud, которое предоставляет частное хранилище для пользователей. Настройка немного отличается.

# Необходимо войти в систему управления Alibaba Cloud, перейти в консоль, найти «Ускоритель службы образов» -> «Инструменты образов» -> «Ускоритель образов».

sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{
 "registry-mirrors": ["https://XXX ваш id.mirror.aliyuncs.com"]
}
EOF
sudo systemctl daemon-reload
sudo systemctl restart docker

Теперь наша среда Docker официально настроена.

2. Загрузка образов и создание образов и контейнеров

Далее мы создадим образы, необходимые для запуска проекта.

Образ сервера MySQL

Прежде всего, я настоятельно не рекомендую использовать Docker для развёртывания MySQL по нескольким причинам:

  1. Необходимо выполнить сопоставление томов данных, что категорически запрещено. Нельзя помещать данные базы данных в работающий контейнер Docker, иначе при удалении контейнера данные будут полностью очищены, поэтому необходимо обеспечить постоянное хранение данных!;
  2. Не подходит для ввода-вывода, данные считываются и записываются дважды: один раз в контейнере и ещё раз в связанном томе, что приводит к удвоенной нагрузке на ввод-вывод и снижению производительности. Если вы всё же хотите развернуть MySQL на Docker, это можно сделать следующим образом:
# Сначала убедитесь, что MySQL можно найти, этот шаг можно пропустить или выполнить поиск на dockerhub.com.
$ docker search mysql

# Загрузить образ
docker pull mysql # По умолчанию загружается последняя версия, если требуется определённая версия, можно добавить тег после имени образа, конкретную информацию о версии можно запросить на dockerhub.com

# Загрузка определённой версии, например, загрузка 8.0.22 (номер версии должен быть официальным номером версии, предоставленным Oracle, в противном случае он не будет найден)
docker pull mysql:8.0.22

# Теперь можно просмотреть загруженные образы
docker images

# Запустить образ
docker run -d -p 3306:3306 -v /my/own/datadir:/var/lib/mysql --name ginblog-mysql -e MYSQL_ROOT_PASSWORD=admin123  mysql

# -d означает запуск в фоновом режиме и возврат идентификатора контейнера
# -p 3006:3306 означает сопоставление портов, а именно: порт хоста: порт контейнера
# --name позволяет дать контейнеру имя
# -e MYSQL_ROOT_PASSWORD = пароль устанавливает пароль администратора MySQL root
# -v / my / own / datadir: / var / lib / mysql добавляет том данных / my / own / datadir — это путь к базе данных на хосте, / var / lib / mysql — путь к базе данных контейнера, этот шаг очень важен

# Войти в конфигурацию контейнера
docker exec -it ginblog-mysql bash

root@ed9345077e02:/# mysql -u root -p
Введите пароль:
Добро пожаловать в монитор MySQL. Команды заканчиваются на ; или \g.
Ваш идентификатор подключения MySQL равен 8
Версия сервера: 8.0.22 MySQL Community Server — GPL
Авторское право (c) 2000, 2020, Oracle и/или её дочерние компании. Все права защищены.
Oracle является зарегистрированным товарным знаком корпорации Oracle и/или её аффилированных лиц.
Другие названия могут быть товарными знаками соответствующих владельцев.

Тип 'help;' или '\h' для получения справки. Введите '\c', чтобы очистить текущее заявление ввода.

mysql>

После этого работа с MySQL будет такой же, как обычно.
### Создание образа проекта ginblog

- Сначала загрузите наш проект ginblog.

```shell
# Создайте новую папку проекта в любом подходящем месте

$ cd /
$ mkdir app

# Мы используем git для удалённого синхронизации здесь

$ git clone адрес проекта
  • Напишите Dockerfile
FROM golang:latest
RUN go env -w GO111MODULE=on
RUN go env -w GOPROXY=https://goproxy.cn,https://goproxy.io,direct

WORKDIR /app
COPY . /app

RUN go build .

EXPOSE 3000

ENTRYPOINT ["./ginblog"]
  • Настройте конфигурацию ginblog
# config/config.ini

# DbHost = ginblog-mysql это делается для подготовки к взаимодействию между контейнерами, соответствует имени контейнера mysql

Db = mysql
DbHost = ginblog-mysql
DbPort = 3306
DbUser = ginblog
DbPassWord = admin123
DbName = ginblog

Таким образом, мы примерно завершили настройку файла сборки образа Docker.

  • Наконец, нам нужно определить базовый URL-адрес запроса axios в папке web/front/src/plugin/http.js переднего плана. Рекомендуется использовать Nginx для развёртывания переднего плана.
// В папках web/admin/src/plugin/http.js и web/front/src/plugin/http.js измените baseURL на адрес сервера развёртывания.

axios.defaults.baseURL = 'http://localhost:3000/api/v1'

// Изменить на

axios.defaults.baseURL = 'http://IP-адрес или доменное имя сервера:3000/api/v1'

Не забудьте перестроить после изменения адреса.

$ yarn build

$ npm run build

Создать образ

Последний шаг — создать образ нашего ginblog Docker. Это довольно просто, выполните следующую команду:

$ docker build -t ginblog .
$ docker run -d -p 3000:3000 --name ginblog ginblog

# Затем вы можете получить доступ к веб-сайту по IP-адресу сервера:3000.
## Спасибо за бесплатную лицензию JetBrains Open Source

Благодарим за бесплатное разрешение на использование открытого исходного кода от JetBrains.
<a href="https://www.jetbrains.com" target="_blank"><img src="https://gitee.com/wejectchan/ginblog/raw/master/upload/jet.png" height="200" /></a>

Комментарии ( 0 )

Вы можете оставить комментарий после Вход в систему

Введение

Создание блога на основе стека gin+vue. Развернуть Свернуть
MIT
Отмена

Обновления

Пока нет обновлений

Участники

все

Недавние действия

Загрузить больше
Больше нет результатов для загрузки
1
https://api.gitlife.ru/oschina-mirror/wejectchan-ginblog.git
git@api.gitlife.ru:oschina-mirror/wejectchan-ginblog.git
oschina-mirror
wejectchan-ginblog
wejectchan-ginblog
master