Вы хотите настроить конвейер CI/CD для своего репозитория GitHub, который будет автоматически развертывать ваши файлы сборки на вашем сервере каждый раз, когда вы отправляете код в определенную ветку?
Этот блог станет вашим приветствием! в мире DevOps.
Введение
Действия GitHub будут иметь файл .yaml, который обеспечит выполнение определенных команд при отправке кода.
В этом примере он войдет на ваш сервер с помощью ключей SSH и скопирует код на ваш сервер.
Это также создаст ваш интерфейс и запустит ваш сервер, если это необходимо.
1. Создайте пару ключей SSH
Я делаю это в Windows, но то же самое можно сделать в Linux и Mac.
а) Загрузите и установите PuTTYgen здесь
б) Откройте PuTTYgen и сгенерируйте ключ, наведя указатель мыши на пустую область.
c) Сохраните открытый ключ и закрытый ключ
г) Экспортируйте закрытый ключ как ключ OpenSSH.
2. Скопируйте открытый ключ на свой сервер Ubuntu.
а) SSH на ваш сервер, где будет развернут ваш код (проект).
б) создать новый файл
sudo nano ~/.ssh/authorized_keys
в) Скопируйте содержимое открытого ключа в это и сохраните его
2. Войдите через SSH-ключ вместо пароля
а) Откройте PuTTY и введите IP-адрес
б) Загрузите закрытый ключ, который вы сохранили на шаге 1с.
c) Нажмите «Открыть» и войдите под своим именем пользователя.
Если вы успешно вошли в систему без пароля, ваши SSH-ключи работают.
3. Настройте секреты GitHub
Секреты действий GitHub подобны вашим переменным среды.
HOST : <Server IP Address> KEY: Copy contents of exported SSH private key PORT : 22 TARGET: <location inside server where you want to deploy>
4. Настройка действий GitHub
Перейдите в свой репозиторий и перейдите к действиям, создайте новый рабочий процесс.
Здесь я развертываю веб-приложение React. Есть два репозитория Frontend и Backend. Для каждого репозитория есть рабочие процессы.
Скопируйте их в соответствующие рабочие процессы.
#FRONTEND name: Build React Files & Deploy to Ubuntu server on: push: branches: [ prod ] pull_request: branches: [ prod ] jobs: build-and-deploy: runs-on: ubuntu-latest steps: - uses: actions/checkout@v2 - name: Use Node.js 14.x to Build uses: actions/setup-node@v2 with: node-version: 14.x #cache: 'npm' - run: npm install - run: REACT_APP_STAGE=production - run: CI=false npm run build - name: ssh deploy on aws ec2 uses: easingthemes/[email protected] env: SSH_PRIVATE_KEY: ${{ secrets.DEPLOY_KEY_PROD }} REMOTE_HOST: ${{ secrets.DEPLOY_HOST_PROD }} REMOTE_USER: ${{ secrets.DEPLOY_USER_PROD }} REMOTE_PORT: ${{ secrets.DEPLOY_PORT_PROD }} SOURCE: "build/" TARGET: ${{ secrets.DEPLOY_TARGET_PROD }} #BACKEND name: Node Github CI to Deploy on AWS Server on: push: branches: - prod jobs: build: runs-on: ubuntu-latest steps: - uses: actions/checkout@v2 - name: ssh deploy on aws ec2 uses: easingthemes/[email protected] env: SSH_PRIVATE_KEY: ${{ secrets.DEPLOY_KEY_PROD}} REMOTE_HOST: ${{ secrets.DEPLOY_HOST_PROD }} REMOTE_USER: ${{ secrets.DEPLOY_USER_PROD }} REMOTE_PORT: ${{ secrets.DEPLOY_PORT_PROD }} SOURCE: "./" TARGET: ${{ secrets.DEPLOY_TARGET_PROD }} deploy: runs-on: ubuntu-latest needs: [build] steps: - name: Configure SSH run: | mkdir -p ~/.ssh/ echo "$SSH_KEY" > ~/.ssh/staging.key chmod 600 ~/.ssh/staging.key cat >>~/.ssh/config <<END Host staging HostName $SSH_HOST User $SSH_USER IdentityFile ~/.ssh/staging.key StrictHostKeyChecking no END env: SSH_USER: ${{ secrets.DEPLOY_USER_PROD }} SSH_KEY: ${{ secrets.DEPLOY_KEY_PROD }} SSH_HOST: ${{ secrets.DEPLOY_HOST_PROD }} - name: Build and Run App run: ssh staging 'cd /root/app/backend; npm install ; pm2 stop backend ; pm2 delete backend ; pm2 start index.js --name "backend"'
Когда вы зафиксируете это изменение, ваше действие Github автоматически запустит новый рабочий процесс, и вы сможете проверить его ход.
5. Отключить вход по паролю (ДОПОЛНИТЕЛЬНО)
Теперь ключ SSH используется по умолчанию для входа в систему, но если вы не хотите, чтобы хакеры взломали и нашли ваш пароль, вы можете отключить вход по паролю.
Чтобы отключить аутентификацию по паролю, отредактируйте файл /etc/ssh/sshd_config
на удаленном сервере. Выполните короткий шаг здесь.
Теперь вы можете настроить конвейер CI/CD для таких серверов, как Digital Ocean, AWS EC2, Contabo и т. д.
Ваш дружелюбный сосед, разработчик,
Ниби Мауриян