diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index 52e7ec1..860a4a9 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -4,10 +4,13 @@ on: pull_request: branches: [ "*" ] +env: + API_PORT: 0 + DOMAIN_URL: example.com + jobs: build: runs-on: ubuntu-latest - environment: build steps: - uses: actions/checkout@v3 diff --git a/Makefile b/Makefile index 882b468..6185327 100644 --- a/Makefile +++ b/Makefile @@ -1,6 +1,17 @@ #TAG ?= $(shell git symbolic-ref -q --short HEAD || git describe --tags --exact-match) -include ./docker-deploy/.env +build: + cd docker-deploy && \ + docker compose build --no-cache --progress=plain nginx +run: + cd docker-deploy && \ + docker compose down && \ + docker compose up -d nginx +down: + cd docker-deploy && \ + docker compose down + generate-certs: cd docker-deploy && \ docker compose down && \ @@ -21,19 +32,6 @@ set-auto-renewing-certs: read ENTER crontab -e -run: - cd docker-deploy && \ - docker compose down && \ - docker compose up -d nginx - -down: - cd docker-deploy && \ - docker compose down - -build: - cd docker-deploy && \ - docker compose build --no-cache --progress=plain nginx - update: git fetch --all git reset --hard origin/master @@ -67,11 +65,30 @@ setup-ci: sudo mkdir -p ~/.ssh sudo cat /tmp/tmp_key.pub >> ~/.ssh/authorized_keys echo '' && \ - echo 'Add this private rsa key secret deploy variables to SSH_DEPLOY_KEY on your github repo: ' && \ + echo 'Add this private rsa key secret deploy environment variables to SSH_DEPLOY_KEY on your github repo: ' && \ echo '[To see key press Enter...]' && \ read ENTER sudo less /tmp/tmp_key +install-docker-if-not-exists: # fully copied from https://docs.docker.com/engine/install/ubuntu/ + if ! command -v docker; then \ + sudo apt-get update; \ + sudo apt-get install -y --no-install-recommended ca-certificates curl; \ + sudo install -m 0755 -d /etc/apt/keyrings; \ + sudo curl -fsSL https://download.docker.com/linux/ubuntu/gpg -o /etc/apt/keyrings/docker.asc; \ + sudo chmod a+r /etc/apt/keyrings/docker.asc; \ + # Add the repository to Apt sources: \ + echo \ + "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.asc] https://download.docker.com/linux/ubuntu \ + $(. /etc/os-release && echo "$${VERSION_CODENAME}") stable" | \ + sudo tee /etc/apt/sources.list.d/docker.list > /dev/null; \ + sudo apt-get update; \ + sudo apt-get install -y --no-install-recommended docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin; \ + make set-docker-not-sudo; \ + else \ + echo "Docker already installed!"; \ + fi + set-docker-not-sudo: # add user to docker group getent group docker || sudo groupadd docker # Add group if not exists @@ -79,16 +96,25 @@ set-docker-not-sudo: newgrp docker sudo systemctl restart docker -all: +setup-env-file: cp --no-clobber ./docker-deploy/.env.example ./docker-deploy/.env echo '' && \ echo 'Edit .env file. Write right DOMAIN_URL!' && \ echo '[press Enter...]' && \ read ENTER nano ./docker-deploy/.env + +all: + make install-docker-if-not-exists + make setup-env-file make generate-certs make set-auto-renewing-certs make down make setup-ci sudo chmod ug+rwx -R /home/legend/vue-frontend-template/docker-deploy/certbot/ make update + echo 'Now read README.md and setup another deploy environments variables.' && \ + echo 'It seems like values must be:' && \ + echo 'SERVER_USERNAME=$$(whoami) \# ! MUST BE SECRET VARIABLE !' && \ + echo 'DEPLOY_HOST=$$(cat ./docker-deploy/.env | grep DOMAIN_URL | sed "s/.*=//") \# NOT SECURE' && \ + echo 'PROJECT_PATH=$$(pwd) \# NOT SECURE' diff --git a/README.md b/README.md index b526d7d..7dbbd59 100644 --- a/README.md +++ b/README.md @@ -1,10 +1,10 @@ ![GithubCI](https://github.com/sergtyapkin/vue-frontend-template/actions/workflows/deploy.yml/badge.svg) -# Фронентд с авто-деплоем на _Nginx_ и получением сертификатов _Letsencript_ +# Веб-вервис в докере с авто-деплоем на _Nginx_ и получением сертификатов _Letsencript_ Всё делается через команды `make` -### 1. Клонируем: +### 1. Клонируем репозиторий: ```SHELL git clone git@github.com:SergTyapkin/vue-frontend-template.git ``` @@ -16,5 +16,20 @@ cd vue-frontend-template make all ```` -Всё. Наслаждаемся тем, что за нас всё сделали, сайт раздаётся, сертификаты обновляются. +Всё. Наслаждаемся тем, что за нас всё сделали, установили докер, сайт раздаётся, сертификаты обновляются. Теперь `Github CI` сам будет проверять, собирается ли контейнер при **Pull Request**'ах, а при **Push**'ах в ветку `master` будет автоматически выполняться `make update` на сервере и обновлять деплой! + +## Полный список действий скриптов +1. Устанавливает `docker`, если его ещё нет +2. Добавляет текущего пользователя в группу `Docker`, чтобы запускать его без `sudo` +3. Предлагает настроить `.env` файл +4. Получает сертификаты Letsencrypt +5. Устанавливает и настраивает `cron` на ежемесячное обновление сертификатов +6. Создаёт пару SSH ключей, публичный добавляет в `~/.ssh/authorized_keys`, приватный выводит в консоль, его нужно добавить как секретную переменную среды `SSH_DEPLOY_KEY` в настройках Github. +7. Собирает приложение из последнего коммита в ветку `master`, запускает финальный docker-контейнер с ним + +### 3. Установка переменных +1. Заходим в `Settings` -> `Environments`, создаём новое окружение под названием `deploy` (важно). +![](/README_res/1.png) +2. Создаём внутри окружения все необходимые переменные. Их выведет `make all` после завершения выполнения, или можно прописать самому. +![](/README_res/2.png)