Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Dev #8

Merged
merged 37 commits into from
Jan 30, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
37 commits
Select commit Hold shift + click to select a range
3adc568
fix
SergTyapkin Jan 29, 2024
d4a1ba4
fix
SergTyapkin Jan 29, 2024
2e5a676
fix
SergTyapkin Jan 29, 2024
924fa73
fix
SergTyapkin Jan 29, 2024
33ef924
fix
SergTyapkin Jan 29, 2024
01b10ef
fix
SergTyapkin Jan 29, 2024
7c9b905
fix
SergTyapkin Jan 29, 2024
3a4a118
fix
SergTyapkin Jan 29, 2024
3a8451d
fix
SergTyapkin Jan 29, 2024
fe81d05
fix
SergTyapkin Jan 29, 2024
c19c4b0
Write README
SergTyapkin Jan 29, 2024
92485be
Write README
SergTyapkin Jan 29, 2024
0710ef4
fix mkdir
SergTyapkin Jan 29, 2024
ceaf172
fix path
SergTyapkin Jan 29, 2024
0147a1c
Merge branch 'master' into dev
SergTyapkin Jan 29, 2024
67cb430
fix deploy.yml
SergTyapkin Jan 29, 2024
daf2ee7
Merge branch 'master' into dev
SergTyapkin Jan 29, 2024
96b86e5
fix deploy.yml
SergTyapkin Jan 29, 2024
aa24b56
Merge branch 'master' into dev
SergTyapkin Jan 29, 2024
72506d6
fix deploy.yml
SergTyapkin Jan 29, 2024
1c50147
fix deploy.yml
SergTyapkin Jan 29, 2024
2f50fb5
fix Make
SergTyapkin Jan 29, 2024
6e7bcb9
fix Make
SergTyapkin Jan 29, 2024
92c27ca
fix Make
SergTyapkin Jan 29, 2024
2d2e748
fix Make
SergTyapkin Jan 29, 2024
aae6a93
fix Make
SergTyapkin Jan 29, 2024
3aa43af
fix Make
SergTyapkin Jan 29, 2024
58ef377
fix Make
SergTyapkin Jan 29, 2024
c1a7bc4
Избавился от sudo для make
SergTyapkin Jan 29, 2024
4fe894f
Коммит для теста
SergTyapkin Jan 29, 2024
5f6bcf0
Добавил установку докера
SergTyapkin Jan 29, 2024
40281a2
Дописал make
SergTyapkin Jan 29, 2024
8c1dc50
Дописал readme
SergTyapkin Jan 29, 2024
3e0e10b
Fix docker
SergTyapkin Jan 29, 2024
a41ad77
Fix docker
SergTyapkin Jan 29, 2024
90f9f3e
Finally all
SergTyapkin Jan 30, 2024
3177602
Merge branch 'master' into dev
SergTyapkin Jan 30, 2024
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 4 additions & 1 deletion .github/workflows/test.yml
Original file line number Diff line number Diff line change
Expand Up @@ -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

Expand Down
56 changes: 41 additions & 15 deletions Makefile
Original file line number Diff line number Diff line change
@@ -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 && \
Expand All @@ -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
Expand Down Expand Up @@ -67,28 +65,56 @@ 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
sudo usermod -aG docker ${USER}
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'
21 changes: 18 additions & 3 deletions README.md
Original file line number Diff line number Diff line change
@@ -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 [email protected]:SergTyapkin/vue-frontend-template.git
```
Expand All @@ -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)
Loading