Сейчас в локальной среде я разворачиваю свои проекты, используя Local, инструмент от WP Engine. Это очень быстро и удобно, но сейчас не про него.
Сейчас про GitHub CI/CD. Его суть в том, чтобы «деплоить» локальный проект на хостинг.
Раньше я по старинке подключался через FTP и перезаливал файлы. С помощью же CI/CD можно написать правила для GitHub и он по этим правилам сам всё сделает при обновлении проекта на GitHub.
Эти правила пишутся в разрешении .yml и находятся в корне проекта в папке .github.
Я очень часто сталкиваюсь с инструкциями написанными под Docker, но по факту не важно с чем вы работаете в локальной среде. OpenServer, Local, XAMP, MAMP, Docker, Denwer или что угодно еще — все подходит.
Важное условие, что вы используете GItHub и осуществляете «push» проекта на этот сервис.
В локальной среде я, как правило, работаю с несколькими директориями:
- в themes директория с клиентской темой
- в plugins директории с кастомными плагинами
- в mu-plugins неотключаемый плагин (часто просто с регистрацией новых типов записи)
На GitHub улетают только эти папки, с которыми я работаю. И тут начинается магия CI/CD:
- все папки архивируются в
wpcontent.zip - архив заливается на хостинг
- GitHub удаляет прошлые версии этих директорий
-
wpcontent.zipраспаковывается - на время всей операции включается режим обновления (maintenance)
- после распаковки
wpcontent.zipудаляется и режим обновления отключается
Ниже сам код этой магии, но это только один из сценариев. Настроить можно очень кастомно и заливать проект не на один хостинг, но и на несколько сразу.
name: CI/CD Deploy
on:
push:
branches:
- main
jobs:
deploy:
runs-on: ubuntu-latest
env:
REMOTE_DIR: папка_сайта_на_сервере
steps:
- name: Checkout
uses: actions/checkout@master
- name: Prepare plugins and theme zip
run: zip -r wpcontent.zip wp-content
- name: Copy Zips to Server
uses: appleboy/scp-action@master
with:
host: ${{ secrets.SSH_HOST }}
username: ${{ secrets.SSH_USERNAME }}
password: ${{ secrets.SSH_PASSWORD }}
port: ${{ secrets.SSH_PORT }}
source: "./wpcontent.zip"
target: "${{ env.REMOTE_DIR }}"
- name: Copy Maintenance to Server
uses: appleboy/scp-action@master
with:
host: ${{ secrets.SSH_HOST }}
username: ${{ secrets.SSH_USERNAME }}
password: ${{ secrets.SSH_PASSWORD }}
port: ${{ secrets.SSH_PORT }}
source: "_maintenance"
target: "${{ env.REMOTE_DIR }}"
- name: Rename _maintenance to .maintenance
uses: appleboy/ssh-action@v1.0.3
with:
host: ${{ secrets.SSH_HOST }}
username: ${{ secrets.SSH_USERNAME }}
password: ${{ secrets.SSH_PASSWORD }}
port: ${{ secrets.SSH_PORT }}
script: |
mv "${{ env.REMOTE_DIR }}_maintenance" "${{ env.REMOTE_DIR }}.maintenance"
- name: Update Plugins and themes
uses: appleboy/ssh-action@v1.0.3
with:
host: ${{ secrets.SSH_HOST }}
username: ${{ secrets.SSH_USERNAME }}
password: ${{ secrets.SSH_PASSWORD }}
port: ${{ secrets.SSH_PORT }}
script: |
rm -rf "${{ env.REMOTE_DIR }}wp-content/plugins/wpadminpro-core"
rm -rf "${{ env.REMOTE_DIR }}wp-content/mu-plugins/wpadminpro.general.php"
rm -rf "${{ env.REMOTE_DIR }}wp-content/themes/wpadminpro-theme"
unzip -o "${{ env.REMOTE_DIR }}wpcontent.zip" -d "${{ env.REMOTE_DIR }}"
- name: Disable Maintenance Mode and Remove Zips
uses: appleboy/ssh-action@v1.0.3
with:
host: ${{ secrets.SSH_HOST }}
username: ${{ secrets.SSH_USERNAME }}
password: ${{ secrets.SSH_PASSWORD }}
port: ${{ secrets.SSH_PORT }}
script: |
rm -f "${{ env.REMOTE_DIR }}.maintenance"
rm -f "${{ env.REMOTE_DIR }}wpcontent.zip"Какие моменты здесь важны?
REMOTE_DIR— укажите свой путь до папки с сайтом на сервере, можно узнать у техподдержки хостинга${{ secrets.SSH_HOST }}и т.д. — host (сервер), port, username и password также можно узнать у техподдержки хостинга и указать их надо в «секретах» проекта на ГитХаб. Это нужно для безопасности ваших данных.
Есть ли минусы? Да.
- При неаккуратности можно слить данные хостинга в общий доступ
- Локальная БД никак не экспортируется, возможно я просто не знаю как, но если необходимо полностью залить проект с компьютера на хостинг со всей базой данных — это не тот вариант.
