Laravel на виртуальном хостинге (shared hosting) TimeWeb
{% import 'macros/index.njk' as macro with context %}
{{ macro.task ('поднять Laravel на хостинге TimeWeb и вкрутить CI/CD через GitHub Actions.') }}
Так случилось, что хостинг клиента — виртуальный (shared) на TimeWeb. Тариф ничем не выделяется.
Внутри есть SSH, БД, вообще всё, что нужно и задача в целом, реальная и решаемая.
В терминале версия PHP5.6:
client@vh2**:~/site.tld$ php -v PHP 5.6.37 (cli) (built: Jul 24 2018 00:54:11)
А нужна минимум PHP7.3. В настройках каждого сайта в личном кабинете хостера можно указать требуемую версию PHP, но вот терминалу на это плевать.
Установка Composer и Laravel ¶
В терминале можно указать путь к исполняемому пакету с нужной версией PHP. Laravel ставится через Composer, его надо скачать и положить рядом.
php -r "copy('https://getcomposer.org/installer', 'composer-setup.php');" ... php -r "unlink('composer-setup.php');"
В корне появился composer.phar
. Ставим Laravel, выбирая нужную версию PHP:
/opt/php73/bin/php composer.phar create-project laravel/laravel
Устанавливается без каких-либо проблем. Важно знать, что к artisan
обращаться надо также:
/opt/php73/bin/php artisan optimize
У проектов в таймвебе паблик-директория — ./public_html
. А Laravel торчит наружу из ./public
в корне файловой структуры. Чтобы это просто завести на таймвебе — можно обойтись симлинком:
ln -s ~/site.tld/public ~/site.tld/public_html
GitHub Actions ¶
В Marketplace GitHub Actions есть уже куча пакетов для Laravel. Моя задача была простой и я обошёлся rsync-deployments:
# .github/workflows/timeweb-deploy.yml name: Deployment site.tld on: push: branches: - main jobs: deploy: runs-on: ubuntu-latest if: "!contains(github.event.head_commit.message, 'skip ci')" steps: - name: Загрузка актуальной кодовой базы uses: actions/checkout@v2 - uses: actions/setup-node@v2 with: node-version: "14" - name: Создаёт .env-файл run: echo "${{ secrets.ENV_PRODUCTION }}" > ".env" # Install Сomposer - name: Установка Сomposer-зависимостей run: composer install --optimize-autoloader --no-dev # Artisan cli commands - name: Трудится, artisan run: | php artisan clear-compiled php artisan optimize php artisan migrate # Install NPM - name: Установка NPM-зависимостей и сборка статики run: | npm ci npm run prod # Deploy - name: Публикация проекта site.tld uses: burnett01/rsync-deployments@4.1 with: switches: -az --delete --exclude-from="rsync-excludes.txt" path: . remote_path: ${{ secrets.SERVER_PATH }} remote_host: ${{ secrets.SERVER_IP }} remote_user: ${{ secrets.SERVER_USER }} remote_key: ${{ secrets.SSH_KEY_PRIVATE }}
Все параметры, как и .env
-конфиг для production-окружения, будут взяты из Actions secrets.