Fakeheal
Super Moderator
Здравейте,
имам един сайт на react (направен с create-react-app), чието репозитори е в Gitlab. Хостинга е дроплет в digital ocean. Искам при push-ването в определен бранч, да ми се деплойне сайтчето на този хостинг.
Състоянието, до което го докарах е:
- при пуш в определния бранч се изпълняват стейджовете ми
- при успешен инстал/билд/тест се копират файловете на сървъра
- извиква се docker restart my-container-name
По-долу са:
- gitlab-ci.yml
- docker-compose.staging.yml
- Dockerfile.staging
Въпросите ми са няколко:
- docker restart my-container-name ще отрази ли промените по файловете на сайта (папка app/)
- docker restart my-container-name ще отрази ли промени по docker файловете: Dockerfile.staging, docker-compose.staging.yml
- има ли по-кратък път към дестинацията ми (описана в началото на поста)
Поздрави,
Ив'
PS: Сега като се замисля, може би .htpasswd, не трябва да е в git
имам един сайт на react (направен с create-react-app), чието репозитори е в Gitlab. Хостинга е дроплет в digital ocean. Искам при push-ването в определен бранч, да ми се деплойне сайтчето на този хостинг.
Състоянието, до което го докарах е:
- при пуш в определния бранч се изпълняват стейджовете ми
- при успешен инстал/билд/тест се копират файловете на сървъра
- извиква се docker restart my-container-name
По-долу са:
- gitlab-ci.yml
- docker-compose.staging.yml
- Dockerfile.staging
Код:
stages:
- install
- test
- build
- deploy
variables:
REACT_APP_DOMAIN: my-domain.com
REACT_APP_RELEASE_VERSION: staging
# в git repository-то има private git submodules за това ми трябва и ключ, който има
# достъп до submodules
.project_setup:
image: node:12-alpine3.12
before_script:
- apk --no-cache add git openssh-client bash
- eval `ssh-agent -s`
- echo "$SSH_SUBMODULES_ed25519" | tr -d '\r' | ssh-add -
- mkdir -p ~/.ssh
- touch ~/.ssh/known_hosts
- ssh-keyscan -t ed25519 gitlab.com >> ~/.ssh/known_hosts
- ssh-keyscan -t ed25519 "$REACT_APP_DOMAIN" >> ~/.ssh/known_hosts
- git submodule sync
- git submodule update --init --recursive --remote
# инсталирам проекта, за да може после да пусна тестовете
# артифактите са ми dependency-тата, nginx настройките (в папката data),
# docker файловете: docker-compose.staging.yml, Docker.staging
install:
extends: .project_setup
stage: install
script:
- yarn install
environment:
name: staging
url: $REACT_APP_DOMAIN
rules:
- if: $CI_COMMIT_BRANCH == "staging"
artifacts:
name: "artifacts"
untracked: true
expire_in: 60 mins
paths:
- .npm/
- node_modules/
- docker-compose.staging.yml
- Dockerfile.staging
- data
# пускаме тестове
test:
extends: .project_setup
stage: test
script:
- yarn test
environment:
name: staging
url: $REACT_APP_DOMAIN
rules:
- if: $CI_COMMIT_BRANCH == "staging"
dependencies:
- install
# правим optimized build на сайтчето и копираме файловете
# накрая рескаме container-a ми
build:
extends: .project_setup
stage: build
script:
- CI=false yarn build
artifacts:
paths:
- build
expire_in: 60 mins
environment:
name: staging
url: $REACT_APP_DOMAIN
rules:
- if: $CI_COMMIT_BRANCH == "staging"
dependencies:
- install
deploy:
extends: .project_setup
stage: deploy
rules:
- if: $CI_COMMIT_BRANCH == "staging"
script:
- scp -r ./build/* deployer@$REACT_APP_DOMAIN:/var/www/create-react-app/my-website
- scp -r ./data deployer@$REACT_APP_DOMAIN:/var/www/create-react-app/my-website/
- scp ./docker-compose.staging.yml deployer@$REACT_APP_DOMAIN:/var/www/create-react-app/my-website
- scp ./Dockerfile.staging deployer@$REACT_APP_DOMAIN:/var/www/create-react-app/my-website
- ssh deployer@$REACT_APP_DOMAIN mv /var/www/create-react-app/my-website/docker-compose.staging.yml /var/www/create-react-app/my-website/docker-compose.yml
- ssh deployer@$REACT_APP_DOMAIN mv /var/www/create-react-app/my-website/Dockerfile.staging /var/www/create-react-app/my-website/Dockerfile
- ssh deployer@$REACT_APP_DOMAIN docker restart my-container-name
dependencies:
- install
- build
Код:
version: "3.7"
services:
nginx:
container_name: my-container-name
build: .
ports:
- "80:80"
- "443:443"
volumes:
- ./data/nginx:/etc/nginx/conf.d
- ./data/certbot/conf:/etc/letsencrypt
- ./data/certbot/www:/var/www/certbot
certbot:
image: certbot/certbot
volumes:
- ./data/certbot/conf:/etc/letsencrypt
- ./data/certbot/www:/var/www/certbot
Код:
FROM nginx:stable-alpine
COPY ./app/ /usr/share/nginx/html
COPY ./data/nginx/.htpasswd /etc/nginx/passwd/
CMD ["nginx", "-g", "daemon off;"]
Въпросите ми са няколко:
- docker restart my-container-name ще отрази ли промените по файловете на сайта (папка app/)
- docker restart my-container-name ще отрази ли промени по docker файловете: Dockerfile.staging, docker-compose.staging.yml
- има ли по-кратък път към дестинацията ми (описана в началото на поста)
Поздрави,
Ив'
PS: Сега като се замисля, може би .htpasswd, не трябва да е в git