Джинблог (проект завершён, добро пожаловать!)
Важные обновления:
Введение:
Проект 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
Запуск и развёртывание:
git clone git@gitee.com:wejectchan/ginblog.git
#or
git clone https://github.com/wejectchen/Ginblog.git
cd yourPath/ginbolg
go mod tidy
./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 =
Рекомендуется использовать Navicat или другое программное обеспечение для управления базами данных для импорта. 6. Запустите проект:
go run main.go
Теперь проект запущен, и вы можете получить доступ к страницам:
Главная страница
http://localhost:3000
Страница бэкэнда
http://localhost:3000/admin
По умолчанию имя пользователя: admin, пароль: 123456
Наслаждайтесь~~~~
==При использовании или открытии проекта, если возникают проблемы или требуются дополнительные функции, пожалуйста, отправьте Iusse
или напрямую PR
==
Реализованные функции:
Технологический стек:
Предварительный просмотр проекта:
Страница внешнего интерфейса:
Страница внешнего интерфейса:
Логин на страницу бэкэнда:
Страница управления бэкэндом:
Прогресс обновления (видео процесса создания в основном завершено):
Третий раздел: создание модуля обработки ошибок архитектуры и интерфейса маршрутизации
Четвёртый раздел: написание интерфейса модуля пользователя, реализация первичной проверки и функции разбивки на страницы
Пятый раздел: представление и выбор стратегии хранения зашифрованных паролей пользователей
Шестой раздел: написание интерфейсов для редактирования информации о пользователе и удаления пользователя
Седьмой раздел: завершение написания интерфейса категорий блога
Восьмой раздел: написание интерфейса статей блога (добавление, редактирование, удаление)
Девятый раздел: завершение интерфейса статей блога (связь между статьями и категориями)
Десятый раздел: написание интерфейса входа в систему, завершение промежуточного программного обеспечения JWT
Одиннадцатый раздел: завершение интерфейса входа
Двенадцатый раздел: завершение интерфейса загрузки (GIN + хранилище объектов Qiniu)
Тринадцатый раздел: обработка системы журналов (настраиваемые журналы, разделение журналов по времени, мягкое соединение с последними журналами)
Четырнадцатый раздел: проверка данных на стороне сервера, настройка параметров междоменного доступа, увеличение количества возвращаемых общих результатов запроса
Первый раздел: инициализация фронтенда, создание среды разработки и установка соответствующих зависимостей
Второй раздел: написание страницы входа, реализация двусторонней привязки данных и проверки данных
Третий раздел: завершение страницы входа
Четвертый раздел: настройка навигации по маршруту и создание структуры страниц управления бэкэндом
Пятый раздел: завершение меню страницы управления и перехода по страницам
Раздел шестой: написание страницы списка пользователей
Седьмой раздел: функции поиска и удаления пользователей в списке пользователей
Восьмой раздел: завершение функций добавления и редактирования пользователей в списке пользователей
Девятый раздел: исправление некоторых ошибок
Десятый раздел: написание страниц списка категорий и списка статей
Одиннадцатый раздел: завершение страниц добавления статей и редактирования статей
Двенадцатый раздел: индивидуальная упаковка редактора форматированного текста TinyMCE, реализация функций загрузки изображений и т. д.
Тринадцатый раздел: завершение работы над страницами управления бэкэнда, упаковка и развёртывание Vue
Первый раздел: построение структуры проекта
Второй раздел: написание основного контента и личной информации
Третий раздел: завершение функции обновления личной информации
Четвёртый раздел: завершение страницы списка статей
Пятый раздел: завершение страницы сведений о статье
Официальная документация: 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 официально настроена.
Далее мы создадим образы, необходимые для запуска проекта.
Прежде всего, я настоятельно не рекомендую использовать Docker для развёртывания MySQL по нескольким причинам:
# Сначала убедитесь, что 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 адрес проекта
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"]
# config/config.ini
# DbHost = ginblog-mysql это делается для подготовки к взаимодействию между контейнерами, соответствует имени контейнера mysql
Db = mysql
DbHost = ginblog-mysql
DbPort = 3306
DbUser = ginblog
DbPassWord = admin123
DbName = ginblog
Таким образом, мы примерно завершили настройку файла сборки образа Docker.
// В папках 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 )