mirror of
https://github.com/elyby/chrly.git
synced 2024-12-22 21:19:55 +05:30
Обновлены docker-compose файлы
Добавлен config.dist.yml Обновлено README проекта (наконец-то нормально описание!) Файл конфигурации теперь автоматически ищется в директории проекта.
This commit is contained in:
parent
340b24d862
commit
bdd7c5e15e
6
.gitignore
vendored
6
.gitignore
vendored
@ -7,3 +7,9 @@ docker-compose.override.yml
|
|||||||
|
|
||||||
# vendor
|
# vendor
|
||||||
vendor
|
vendor
|
||||||
|
|
||||||
|
# Cover output
|
||||||
|
.cover
|
||||||
|
|
||||||
|
# Local config
|
||||||
|
config.yml
|
||||||
|
@ -1,23 +0,0 @@
|
|||||||
FROM golang:1.9-alpine
|
|
||||||
|
|
||||||
RUN mkdir -p /go/src/elyby/minecraft-skinsystem \
|
|
||||||
/go/src/elyby/minecraft-skinsystem/data/capes \
|
|
||||||
&& ln -s /go/src/elyby/minecraft-skinsystem /go/src/app
|
|
||||||
|
|
||||||
WORKDIR /go/src/app
|
|
||||||
|
|
||||||
COPY ./ /go/src/app/
|
|
||||||
|
|
||||||
RUN apk add --no-cache git \
|
|
||||||
&& go get -u github.com/golang/dep/cmd/dep \
|
|
||||||
&& dep ensure \
|
|
||||||
&& go clean -i github.com/golang/dep \
|
|
||||||
&& rm -rf $GOPATH/src/github.com/golang/dep \
|
|
||||||
&& apk del git \
|
|
||||||
&& go build main.go \
|
|
||||||
&& mv main /usr/local/bin/minecraft-skinsystem
|
|
||||||
|
|
||||||
EXPOSE 80
|
|
||||||
|
|
||||||
ENTRYPOINT ["minecraft-skinsystem"]
|
|
||||||
CMD ["serve"]
|
|
91
README.md
91
README.md
@ -1,61 +1,74 @@
|
|||||||
# Это заготовка для нормального файла
|
# Ely.by Minecraft Skinsystem
|
||||||
|
|
||||||
Для настройки Dev-окружения нужно склонировать проект в удобное место,
|
Реализация API системы скинов для Minecraft v4.
|
||||||
за тем сделать символьную ссылку в свой GOPATH:
|
|
||||||
|
|
||||||
```sh
|
## Config
|
||||||
# Выполнять, находясь внутри директории репозитория
|
|
||||||
mkdir -p $GOPATH/src/elyby
|
|
||||||
ln -s $PWD $GOPATH/src/elyby/minecraft-skinsystem
|
|
||||||
```
|
|
||||||
|
|
||||||
Или можно склонировать репозиторий сразу в нужную локацию:
|
Конфигурация может задаваться посредством любого из перечисленных форматов файлов: JSON, TOML, YAML, HCL и
|
||||||
|
Java properties. Кроме того, параметры конфигурации могут перезаписываться доступными при запуске программы
|
||||||
|
ENV переменными.
|
||||||
|
|
||||||
```sh
|
> **Заметка**: ENV переменные именуются как KEY.SUBKEY.SUBSUBKEY, т.е. все символы должны быть заглавными,
|
||||||
git clone git@bitbucket.org:elyby/minecraft-skinsystem.git $GOPATH/src/elyby/minecraft-skinsystem
|
а точки должны отделять уровень вложенности.
|
||||||
```
|
|
||||||
|
|
||||||
Нужно скопировать правильный docker-compose файл для желаемого окружения:
|
Пример файла конфигурации находится в [config.dist.yml](config.dist.yml). Внутри dist-файла есть комментарии,
|
||||||
|
поясняющие назначение тех или иных параметров. Для работы его следует скопировать в локальный `config.yml`
|
||||||
|
и отредактировать под свои нужды.
|
||||||
|
|
||||||
```sh
|
## Развёртывание
|
||||||
cp docker-compose.dev.yml docker-compose.yml # dev env
|
|
||||||
cp docker-compose.prod.yml docker-compose.yml # prod env
|
|
||||||
```
|
|
||||||
|
|
||||||
И за тем всё это поднять:
|
Деплоить проект можно двумя способами:
|
||||||
|
|
||||||
|
1. Скомпилировав и запустив бинарный файл, а также обеспечив ему доступ ко всем необходмым сервисам.
|
||||||
|
|
||||||
|
2. Используя Docker и docker-compose.
|
||||||
|
|
||||||
|
*Первый случай не буду описывать, т.к. долго, мучительно и никто так делать не будет, я гарантирую это*,
|
||||||
|
поэтому перейдём сразу ко второму.
|
||||||
|
|
||||||
|
Прежде всего необходимо установить [Docker](https://docs.docker.com/engine/installation/) и
|
||||||
|
[docker-compose](https://docs.docker.com/compose/install/).
|
||||||
|
|
||||||
|
Для запуска последней версии проекта достаточно скопировать содержимое файла
|
||||||
|
[docker-compose.prod.yml](docker-compose.prod.yml) в файл `docker-compose.yml` непосредственно на месте
|
||||||
|
установки, после чего ввести в консоль команду:
|
||||||
|
|
||||||
```sh
|
```sh
|
||||||
docker-compose up -d
|
docker-compose up -d
|
||||||
```
|
```
|
||||||
|
|
||||||
Если нужно пересобрать весь контейнер, то выполняем следующее:
|
Web-приложение, amqp worker и все сопутствующие сервисы будут автоматически запущены. Данные из контейнеров
|
||||||
|
будут синхронизироваться в папку `data`.
|
||||||
|
|
||||||
```
|
## Разработка
|
||||||
docker-compose stop app # Останавливаем конейтнер, если он ещё работает
|
|
||||||
docker-compose rm -f app # Удаляем конейтнер
|
|
||||||
docker-compose build app # Запускаем билд по новой
|
|
||||||
docker-compose up -d app # Поднимаем свежесобранный контейнер обратно
|
|
||||||
```
|
|
||||||
|
|
||||||
### Шорткаты для разработки
|
Перво-наперво необходимо [установить последнюю версию Go](https://golang.org/doc/install) и сконфигурировать
|
||||||
|
переменную окружения GOPATH, а также установить инструмент контроля версий [dep](https://github.com/golang/dep).
|
||||||
|
|
||||||
Потом это надо преобразовать в нормальные доки.
|
Затем можно склонировать репозиторий хитрым способом, чтобы удовлетворить все прекрасные особенности Go:
|
||||||
|
|
||||||
Run Redis:
|
|
||||||
|
|
||||||
```sh
|
```sh
|
||||||
docker run --rm \
|
# Сперва создадим подпапку для приватных Go проектов Ely.by
|
||||||
-p 6379:6379 \
|
mkdir -p $GOPATH/src/elyby
|
||||||
redis:3.0-alpine
|
# Затем непосредственно клинируем репозиторий туда, где его ожидает увидеть Go
|
||||||
|
git clone git@gitlab.ely.by:elyby/minecraft-skinsystem.git $GOPATH/src/elyby/minecraft-skinsystem
|
||||||
|
# Переходим в папку проекта
|
||||||
|
cd $GOPATH/src/elyby/minecraft-skinsystem
|
||||||
|
# Устанавливаем зависимости
|
||||||
|
dep ensure
|
||||||
```
|
```
|
||||||
|
|
||||||
Run RabbitMQ:
|
Чтобы запустить проект достаточно написать `go run main.go`, но без файла конфигурации и Redis
|
||||||
|
программа долго не проработает. Поэтому сперва копируем `config.dist.yml` в `config.yml` и, при необходимости,
|
||||||
|
затачиваем его под себя.
|
||||||
|
|
||||||
|
Redis можно установить в систему самостоятельно, но гораздо удобнее воспользоваться готовыми сервисами,
|
||||||
|
описанными в [docker-compose.dev.yml](docker-compose.dev.yml). Для этого просто копируем `docker-compose.dev.yml`
|
||||||
|
и поднимаем сервисы:
|
||||||
|
|
||||||
```sh
|
```sh
|
||||||
docker run --rm \
|
cp docker-compose.dev.yml docker-compose.yml
|
||||||
-p 5672:5672 \
|
docker-compose up -d
|
||||||
-e RABBITMQ_DEFAULT_USER=ely-skinsystem-app \
|
|
||||||
-e RABBITMQ_DEFAULT_PASS=ely-skinsystem-app-password \
|
|
||||||
-e RABBITMQ_DEFAULT_VHOST=/ely \
|
|
||||||
rabbitmq:3.6
|
|
||||||
```
|
```
|
||||||
|
|
||||||
|
После этого `go run main.go serve` должен запустить web-сервер без дополнительной модификации файла конфигурации.
|
||||||
|
@ -32,6 +32,10 @@ func init() {
|
|||||||
func initConfig() {
|
func initConfig() {
|
||||||
if cfgFile != "" {
|
if cfgFile != "" {
|
||||||
viper.SetConfigFile(cfgFile)
|
viper.SetConfigFile(cfgFile)
|
||||||
|
} else {
|
||||||
|
viper.SetConfigName("config")
|
||||||
|
viper.AddConfigPath("/data")
|
||||||
|
viper.AddConfigPath(".")
|
||||||
}
|
}
|
||||||
|
|
||||||
viper.AutomaticEnv()
|
viper.AutomaticEnv()
|
||||||
|
51
config.dist.yml
Normal file
51
config.dist.yml
Normal file
@ -0,0 +1,51 @@
|
|||||||
|
# Main server configuration. Actually you don't want to change it,
|
||||||
|
# but you able to change host or port, that will be used by serve command
|
||||||
|
server:
|
||||||
|
host: localhost
|
||||||
|
port: 80
|
||||||
|
|
||||||
|
# Worker listen to AMQP events, so it should know how to connect to any
|
||||||
|
# AMQP provider (actually RabbitMQ). You should not escape any vhost
|
||||||
|
# characters, 'cause it will be done by application automatically
|
||||||
|
amqp:
|
||||||
|
host: localhost
|
||||||
|
port: 5672
|
||||||
|
username: amqp-user
|
||||||
|
password: amqp-password
|
||||||
|
vhost: /
|
||||||
|
|
||||||
|
# Both of web or worker depends on storage.
|
||||||
|
storage:
|
||||||
|
# For now app require Redis and don't support any other backends to store
|
||||||
|
# skins, but in the future we can have more backends. Poll size tune amount
|
||||||
|
# of connections to the redis. It's not recommended to set it less then 2
|
||||||
|
# because it will lead to panic on high load.
|
||||||
|
redis:
|
||||||
|
host: localhost
|
||||||
|
port: 6379
|
||||||
|
poolSize: 10
|
||||||
|
|
||||||
|
# Filesystem storage used to store capes. basePath specify absolute or relative
|
||||||
|
# path to storage and capesDirName specify which folder in this base path will
|
||||||
|
# be used to search capes.
|
||||||
|
filesystem:
|
||||||
|
basePath: data
|
||||||
|
capesDirName: capes
|
||||||
|
|
||||||
|
# Accounts Ely.by internal API will be used in cases, when by some reasons
|
||||||
|
# information about user will be unavailable in the app storage.
|
||||||
|
api:
|
||||||
|
accounts:
|
||||||
|
host: https://account.ely.by
|
||||||
|
id: app-id
|
||||||
|
secret: secret
|
||||||
|
scopes:
|
||||||
|
- internal_account_info
|
||||||
|
|
||||||
|
# StatsD can be used to collect metrics
|
||||||
|
# statsd:
|
||||||
|
# addr: localhost:3746
|
||||||
|
|
||||||
|
# Sentry can be used to collect app errors
|
||||||
|
# sentry:
|
||||||
|
# dsn: "https://public:private@your.sentry.io/1"
|
2
data/statsd/.gitignore
vendored
2
data/statsd/.gitignore
vendored
@ -1,2 +0,0 @@
|
|||||||
*
|
|
||||||
!.gitignore
|
|
@ -1,20 +0,0 @@
|
|||||||
version: '2'
|
|
||||||
services:
|
|
||||||
redis:
|
|
||||||
image: redis:3.2-32bit
|
|
||||||
volumes:
|
|
||||||
- ./data/redis:/data
|
|
||||||
|
|
||||||
rabbitmq:
|
|
||||||
image: rabbitmq:3.6
|
|
||||||
environment:
|
|
||||||
RABBITMQ_DEFAULT_USER: "ely-skinsystem-app"
|
|
||||||
RABBITMQ_DEFAULT_PASS: "ely-skinsystem-app-password"
|
|
||||||
RABBITMQ_DEFAULT_VHOST: "/ely"
|
|
||||||
|
|
||||||
statsd:
|
|
||||||
image: hopsoft/graphite-statsd
|
|
||||||
volumes:
|
|
||||||
- ./data/statsd:/opt/graphite/storage
|
|
||||||
- ./data/graphite-config:/opt/graphite/conf
|
|
||||||
- ./data/statsd-config/config.json:/opt/statsd/config.js
|
|
@ -1,35 +1,45 @@
|
|||||||
|
# This compose file contains necessary docker-compose config to quick start
|
||||||
|
# services required by app. Ports published to host.
|
||||||
|
#
|
||||||
|
# Usage:
|
||||||
|
# 1. Clone this file as docker-compose.yml:
|
||||||
|
# cp docker-compose.dev.yml docker-compose.yml
|
||||||
|
#
|
||||||
|
# 2. If necessary, then you can fix configuration to your environment.
|
||||||
|
# Then start all services:
|
||||||
|
# docker-compose up -d
|
||||||
|
#
|
||||||
|
# 3. Pass to the project configuration links to this services:
|
||||||
|
# amqp:
|
||||||
|
# host: localhost
|
||||||
|
# port: 5672
|
||||||
|
# username: ely
|
||||||
|
# password: ely
|
||||||
|
# vhost: /ely
|
||||||
|
#
|
||||||
|
# storage:
|
||||||
|
# redis:
|
||||||
|
# host: localhost
|
||||||
|
# port: 6379
|
||||||
|
# poolSize: 10
|
||||||
|
#
|
||||||
|
# 4. After job is done all services can be stopped:
|
||||||
|
# docker-compose stop
|
||||||
|
|
||||||
version: '2'
|
version: '2'
|
||||||
services:
|
services:
|
||||||
app:
|
|
||||||
build: .
|
|
||||||
image: registry.ely.by/elyby/skinsystem:latest
|
|
||||||
ports:
|
|
||||||
- "80:80"
|
|
||||||
volumes:
|
|
||||||
- ./:/go/src/app
|
|
||||||
command: ["go", "run", "minecraft-skinsystem.go"]
|
|
||||||
links:
|
|
||||||
- redis
|
|
||||||
- rabbitmq
|
|
||||||
- statsd
|
|
||||||
environment:
|
|
||||||
ACCOUNTS_API_ID: ""
|
|
||||||
ACCOUNTS_API_SECRET: ""
|
|
||||||
STATSD_ADDR: ""
|
|
||||||
|
|
||||||
redis:
|
redis:
|
||||||
extends:
|
image: redis:3.2-32bit
|
||||||
file: docker-compose.base.yml
|
ports:
|
||||||
service: redis
|
- "6379:6379"
|
||||||
|
volumes:
|
||||||
|
- ./data/redis:/data
|
||||||
|
|
||||||
rabbitmq:
|
rabbitmq:
|
||||||
extends:
|
image: rabbitmq:3.6-manager
|
||||||
file: docker-compose.base.yml
|
|
||||||
service: rabbitmq
|
|
||||||
|
|
||||||
statsd:
|
|
||||||
extends:
|
|
||||||
file: docker-compose.base.yml
|
|
||||||
service: statsd
|
|
||||||
ports:
|
ports:
|
||||||
- "8123:80"
|
- "5672:5672"
|
||||||
|
environment:
|
||||||
|
RABBITMQ_DEFAULT_USER: "ely"
|
||||||
|
RABBITMQ_DEFAULT_PASS: "ely"
|
||||||
|
RABBITMQ_DEFAULT_VHOST: "/ely"
|
||||||
|
@ -1,26 +1,33 @@
|
|||||||
version: '2'
|
version: '2'
|
||||||
services:
|
services:
|
||||||
app:
|
web:
|
||||||
image: registry.ely.by/elyby/skinsystem:latest
|
image: registry.ely.by/elyby/skinsystem:latest
|
||||||
|
restart: always
|
||||||
ports:
|
ports:
|
||||||
- "80:80"
|
- "80:80"
|
||||||
links:
|
links:
|
||||||
- redis
|
- redis
|
||||||
- rabbitmq
|
volumes:
|
||||||
|
- ./data/capes:/data/capes
|
||||||
|
|
||||||
|
worker:
|
||||||
|
image: registry.ely.by/elyby/skinsystem:latest
|
||||||
restart: always
|
restart: always
|
||||||
environment:
|
links:
|
||||||
ACCOUNTS_API_ID: ""
|
- redis
|
||||||
ACCOUNTS_API_SECRET: ""
|
- rabbitmq
|
||||||
STATSD_ADDR: ""
|
command: ["amqp-worker"]
|
||||||
|
|
||||||
redis:
|
redis:
|
||||||
extends:
|
image: redis:3.2-32bit # 32-bit version used to decrease memory usage
|
||||||
file: docker-compose.base.yml
|
|
||||||
service: redis
|
|
||||||
restart: always
|
restart: always
|
||||||
|
volumes:
|
||||||
|
- ./data/redis:/data
|
||||||
|
|
||||||
rabbitmq:
|
rabbitmq:
|
||||||
extends:
|
image: rabbitmq:3.6
|
||||||
file: docker-compose.base.yml
|
|
||||||
service: rabbitmq
|
|
||||||
restart: always
|
restart: always
|
||||||
|
environment:
|
||||||
|
RABBITMQ_DEFAULT_USER: "ely-skinsystem-app"
|
||||||
|
RABBITMQ_DEFAULT_PASS: "ely-skinsystem-app-password"
|
||||||
|
RABBITMQ_DEFAULT_VHOST: "/ely"
|
||||||
|
Loading…
Reference in New Issue
Block a user