Локальный code-server ( https://github.com/coder/code-server ) для интервью с live-кодингом.
Текущая версия Dockerfile расширяет code-server для поддержки работы с разными языками программирования, включая возможность запуска написанного кода.
На текущий момент поддерживаются следующие языки:
- Java
- Kotlin
- Go
- SQL (PostgreSQL)
- Python
- Ruby
При необходимости можно дополнить Dockerfile для поддержки любых других языков программирования.
- Публичный домен
- Настроенный сервер
- docker (с podman, по идее, тоже должно работать, но надо переделать скрипт)
- nginx с настроенным сайтом (в принципе, можно и напрямую code-server выпустить в интернет, но лучше не надо). В качестве корневого location сайта взять конфиг из nginx/code-server-location.conf (поменять значения при необходимости)
- certbot или аналог (если испольуется https)
- pwgen
- openssl
- git
- пользователь (не root) в группе docker и (при необходимости) с настроенным доступом к git-серверу
- Папка на сервере с доступом на запись для пользователя, от которого будет запускаться code-server, и (в случае использования HTTP Basic авторизации) на чтение для пользователя nginx.
- git-репозиторий с задачами
Задачи для интервью должны лежать в отдельном git-репозитории. Внутри репозитория могут находиться папки для собеседований по разным техническим стекам. Внутри папки технического стека можно в папку answers складывать канонические ответы: они будут удалены при развертывании сервера.
Для каждого интервью репозиторий заново клонируется и либо целиком (при запуске без параметров), либо из подпапки (имя в параметре скрипта) копируются в папку проекта для code-server.
Генерируется новый пароль и записывается, в зависимости от настроек, либо в конфиг code-server, либо в htpasswd-файл для nginx'а.
Проверяется доступность code-server на локальном порту, после чего в stdout выводится сгенерированный пароль и адрес для доступа к серверу. В случае использования HTTP Basic авторизации в URL зашиваются логин и пароль.
Для задач по SQL в структуре папок ищутся файлы по маске **/init/*.sql
. Если такие файлы есть, то после старта контейнера запускается PostgreSQL и ему скармливаются найденные файлы.
Ниже приведен пример структуры репозитория для трех вариантов собеседования: фронтенд-разработчик, kotlin-разработчик, golang-разработчик
/
frontend/
answers/
task1.ts
task2.ts
task3.ts
tasks/
task1.ts
task2.ts
task3.ts
package-lock.json
package.json
tsconfig.json
golang/
answers/
task1.go
task1.go
kotlin/
answers/
task1.kt
task2.kt
tasks/
task1.kt
task2.kt
sql/
init/
001.sql
002.sql
task1.sql
task2.sql
Папки answers удаляются при разворачивании сервера.
Запускать скрипт соответственно командой:
./run.sh kotlin,java
./run.sh golang
./run.sh frontend
./run.sh
Сначала нужно собрать докер-образ:
docker build -t code-server:local .
Затем скопировать vars.example.sh в vars.sh и настроить необходимые переменные.
Запустить скрипт run.sh, передав ему в качестве аргумента нужный набор задач из репозитория. Можно указать несколько задач через запятую.
После выполнения скрипт выведет в консоль пароль и ссылку.