- 2: создание юнит-файла systemd
- 3: nginx как обратный прокси-сервер
- 4: тестирование приложения
- Hello, world!
- What are some cheap hosting options for a small web app created in golang?
- Добавление нестандартных маршрутов
- Компиляция
- Модификация приложения для работы на облачном сервере под управлением linux
- Публикация проекта
- Регистрация, создание сайта и бд на хостинге
- Хостинг для golang mongodb?
2: создание юнит-файла systemd
На этом этапе нужно создать юнит-файл systemd, чтобы приложение работало в фоновом режиме, даже когда пользователь выходит с сервера. Это обеспечит постоянную работу сервера и сделает вас на шаг ближе к развертыванию в среде производства.
Сначала создайте новый файл goweb.service в каталоге /lib/systemd/system, используя текстовый редактор:
sudo nano /lib/systemd/system/goweb.service
Чтобы установить параметры сервиса, добавьте в файл следующие строки.
3: nginx как обратный прокси-сервер
На этом этапе нужно создать блок server для Nginx и настроить его как обратный прокси-сервер, чтобы приложение стало доступно в Интернете.
Сначала перейдите в каталог sites-available:
cd /etc/nginx/sites-available
Создайте новый файл, имя которого совпадает с именем вашего домена, по которому будет работать приложение. Здесь это домен your_domain:
sudo nano your_domain
Добавьте следующие строки в файл, чтобы определить настройки для your_domain:
4: тестирование приложения
Давайте откроем приложение через безопасное соединение, чтобы убедиться, что все работает.
В браузере введите:
Hello, world!
Создать веб-сервер на Go можно очень быстро. Вот пример использования обработчика, который возвращает обещанный выше «Hello, world!».
What are some cheap hosting options for a small web app created in golang?
Something went wrong. Wait a moment and try again.
Добавление нестандартных маршрутов
Дефолтный маршрутизатор, включенный в стандартную библиотеку, хорош, но он очень простой. В большинстве приложений нужна более сложная маршрутизация, включая вложенные и wildcard-маршруты или же процедуру установки шаблонов и параметров путей.
В этом случае стоит использовать пакеты gorilla/mux и go-chi/chi. С последним мы и научимся работать — ниже показан пример.
Дано — файл api/v1/api.go, содержащий маршруты для нашего API:
Компиляция
Для работы приложения на сервере хостинга, он должен быть скомпилирован под соответствующую платформу (Linuх). Компилятор Go при компиляции исходного кода в ОС Windows называет исполняемый файл с расширением .exe. В ОС Linux он создает файл без расширения.
Модификация приложения для работы на облачном сервере под управлением linux
Так как наш сайт будет работать на облачном сервере под управлением ОС Linux, то для его работы потребуется предусмотреть следующие особенности:
- Все пути к файлам, например при рендеринге страниц должны генерироваться через функцию filepath.Join(). Это позволит избежать ошибок с доступом к файлам, если вы разрабатывали приложение на windows, но публиковать и использовать его будете на linux. Например:
pathOk := filepath.Join("public", "templates", "index.html")//ок
pathBad := "public/templates/index.html"//не используйте
t, err := template.ParseFiles(pathOk)
if err != nil { log.Fatal(err)
}Публикация проекта
Подключаемся по FTP к серверу и в папку “app” закидываем скомпилированный бинарник “main” и (важно!) папку со скриптами, стилями и html шаблонами.
При загрузке на сервер на файл были установлены стандартные права, которые не подразумевают возможность его исполнения (запуска). Чтобы установить права на исполнение, мы должны подключиться к консоли нашего сервера (см. “Открыть терминал” на скриншоте ниже).
В командной строке заходим в директорию проекта (команда “cd app”) где лежит наш бинарник и используем следующую команду: chmod x main
Далее в переменных окружения для APP_PATH устанавливаем путь открываемого приложения и перезапускаем приложение.
На этом все. Ваш проект должен работать!
Примечание: Если вы работаете через IDE “Goland”, то там поддерживаются возможности, работы с консолью, подключения к хостингу по FTP и установки/изменения прав файлов на хостинге. Описанный процесс публикации там становится в разы легче.
Регистрация, создание сайта и бд на хостинге
Прежде чем приступить к публикации необходимо:
- Зарегистрироваться на NetAngels;
- Приобрести/перенести домен;
- Создать сайт на облачном хостинге. Важно указать, что сайт работает на Python AsyncIO (это не ошибка, данная конфигурация подходит для работы с golang).
- В качестве БД выбрать MySQL. Можете выбрать и другую БД, но тонкости подключения к ней на облачном сервере вам придется выяснять отдельно.
- После того как сайт будет создан, проведите все необходимые работы с БД (создайте таблицы и убедитесь, что их структура совпадает, с той, которую вы использовали при локальной работе).
Подробно эти шаги не имеет смысла описывать, так как у провайдера есть набор своих инструкций, а цель данной статьи осветить вопрос публикации.
Хостинг для golang mongodb?
Там своя БД — Google Datastore
С Монгой — нужен VPS/VDS.
Можно Vscale.io. Не бесплатно. Но там почасовая оплата. То есть если поднимать только по мере необходимости — это реально копейки.
Можно Heroku. Они предоставляют все что нужно.
Но там специфические требования к архитектуре развертывания.

