Понедельник, 13.01.2025 19:42

Установка Docker и тестовый проект Laravel Sail в РЕД ОС Linux

Установка Docker и тестовый проект Laravel Sail в РЕД ОС Linux

Технологии не стоят на месте и в первую очередь это касается разработки программного обеспечения. Появление методологии Devops позволило автоматизировать работу разработчика программного обеспечения и центральной её частью является docker.

Вместо установки множества виртуальных серверов Docker позволяет создать для каждого проекта свой изолированный контейнер тем самым, производить разработку  в среде, полностью не зависящей от остальных проектов.

Сегодня мы рассмотрим установку Docker в РЕД ОС Linux, а также установим laravel в контейнер docker с помощью Laravel Sail.

Установка Docker

Установим необходимые пакеты docker

sudo dnf install docker-ce docker-ce-cli docker-compose -y

Включим и запустим сервис:

sudo systemctl enable docker
sudo systemctl start docker

Проверим статус:

docker info
Client:
Version: 27.4.1
Context: default
Debug Mode: false
Plugins:
 buildx: Docker Buildx (Docker Inc.)
 Version: 0.19.3
 Path: /usr/libexec/docker/cli-plugins/docker-buildx
 compose: Docker Compose (Docker Inc.)
 Version: 2.32.1
 Path: /usr/libexec/docker/cli-plugins/docker-compose
Server:
ERROR: permission denied while trying to connect to the Docker daemon socket at unix:///var/run/docker.sock: Get "http://%2Fvar%2Frun%2Fdocker.sock/v1.47/info": dial unix /var/run/docker.sock: connect: permission denied
errors pretty printing info

Докер установился, но у обычного пользователя нет достаточных прав, чтобы с ним работать.

Предоставление обычному пользователю прав доступа к Docker

Добавим своего пользователя в группу docker:

sudo usermod -aG docker user

Обязательно перезайдем в аккаунт, чтобы применились права:

exit

Проверим статус:

docker info
Client:
Version: 27.4.1
Context: default
Debug Mode: false
Plugins:
 buildx: Docker Buildx (Docker Inc.)
 Version: 0.19.3
 Path: /usr/libexec/docker/cli-plugins/docker-buildx
 compose: Docker Compose (Docker Inc.)
 Version: 2.32.1
 Path: /usr/libexec/docker/cli-plugins/docker-compose
Server:
Containers: 0
 Running: 0
 Paused: 0
 Stopped: 0
Images: 0
Server Version: 27.4.1
Storage Driver: overlay2
 Backing Filesystem: extfs
 Supports d_type: true
 Using metacopy: false
 Native Overlay Diff: true
 userxattr: false
Logging Driver: journald
Cgroup Driver: systemd
Cgroup Version: 2
Plugins:
 Volume: local
 Network: bridge host ipvlan macvlan null overlay
 Log: awslogs fluentd gcplogs gelf journald json-file local splunk syslog
Swarm: inactive
Runtimes: io.containerd.runc.v2 runc
Default Runtime: runc
Init Binary: docker-init
containerd version:
runc version: 1208830-dirty
init version:
Security Options:
 seccomp
 Profile: builtin
 cgroupns
Kernel Version: 6.6.51-1.red80.x86_64
Operating System: RED OS 8.0
OSType: linux
Architecture: x86_64
CPUs: 4
Total Memory: 1.997GiB
Name: localhost.localdomain
ID: 26f526bd-b607-473a-8e94-396a9929c028
Docker Root Dir: /var/lib/docker
Debug Mode: false
Experimental: false
Insecure Registries:
 127.0.0.0/8
Live Restore Enabled: true

Теперь всё работает.

Установка laravel

Далее я подразумеваю, что у вас уже установлен composer и nodejs.

Установку Composer мы рассматривали в этой статье.

Установка Node.js

Установим node.js:

sudo dnf install composer unzip 7zip nodejs -y

Автоустановка с помощью laravel.build

Вы можете использовать команду, для автоустановки:

curl -s "https://laravel.build/newsail-app1" | bash

Она всё сделает автоматически!

Установка Laravel Installer

Лучше все установить самому, для этого мы будем использовать установщик Laravel.

Установим требуемый пакет:

composer global require laravel/installer

Если сейчас просто запустить:

laravel

То мы получим ошибку:

-bash: laravel: команда не найдена

Все из-за того, что установщик размещается а папке

~/.config/composer/vendor/bin

О существовании которой система ничего не знает. Нам нужно добавить её в переменную PATH!

Откроем

mcedit ~/.bashrc

После:

export PATH

Добавим:

export PATH="$PATH:$HOME/.config/composer/vendor/bin"

Сохраним файл.

Чтобы перезагрузить конфигурацию, запустим:

source ~/.bashrc

Проверим

laravel -V
Laravel Installer 5.11.0

Запустим установку нового проекта laravel:

cd ~
laravel new newsail-app

   _                               _
  | |                             | |
  | |     __ _ _ __ __ ___   _____| |
  | |    / _` | '__/ _` \ \ / / _ \ |
  | |___| (_| | | | (_| |\ V /  __/ |
  |______\__,_|_|  \__,_| \_/ \___|_|


 ┌ Would you like to install a starter kit? ────────────────────┐
 │ › ● No starter kit                                           │
 │   ○ Laravel Breeze                                           │
 │   ○ Laravel Jetstream                                        │
 └──────────────────────────────────────────────────────────────┘

Выберем:

Laravel Breeze
 ┌ Which Breeze stack would you like to install? ───────────────┐
 │ › ● Blade with Alpine                                      ┃ │
 │   ○ Livewire (Volt Class API) with Alpine                  │ │
 │   ○ Livewire (Volt Functional API) with Alpine             │ │
 │   ○ React with Inertia                                     │ │
 │   ○ Vue with Inertia                                       │ │
 └──────────────────────────────────────────────────────────────┘

Выберем:

Blade with Alpine
 ┌ Would you like dark mode support? ───────────────────────────┐
 │ ○ Yes / ● No                                                 │
 └──────────────────────────────────────────────────────────────┘

Выберем:

No
 ┌ Which testing framework do you prefer? ──────────────────────┐
 │ › ● Pest                                                     │
 │   ○ PHPUnit                                                  │
 └──────────────────────────────────────────────────────────────┘

Выберем

Pest
 ┌ Which database will your application use? ───────────────────┐
 │ › ● SQLite                                                   │
 │   ○ MySQL                                                    │
 │   ○ MariaDB                                                  │
 │   ○ PostgreSQL (Missing PDO extension)                       │
 │   ○ SQL Server (Missing PDO extension)                       │
 └──────────────────────────────────────────────────────────────┘

Выберем:

MariaDB
 ┌ Default database updated. Would you like to run the default database migr… ┐
 │ ● Yes / ○ No                                                               │
 └────────────────────────────────────────────────────────────────────────────┘

Выберем:

No

Перейдем в папку:

cd newsail-app

Проверим установку:

npm install && npm run build

Установка Sail

Sail – специальная утилита, облегчающая нам взаимодействие с проектом на laravel, размещенным внутри контейнеров Docker. С её помощью мы без проблем можем вызывать команды php artisan в контексте контейнера.

Установим требуемые пакеты:

composer require laravel/sail --dev

Настроим sail

php artisan sail:install
 ┌ Which services would you like to install? ───────────────────┐
 │ › ◼ mysql                                                  ┃ │
 │   ◻ pgsql                                                  │ │
 │   ◻ mariadb                                                │ │
 │   ◻ mongodb                                                │ │
 │   ◻ redis                                                  │ │
 └────────────────────────────────────────────────── 1 selected ┘
  Use the space bar to select options.

С помощью клавиши пробел снимем выделение с mysql и выберем mariadb и нажмем Entrer

Начнется загрузка и сборка необходимых образов для Docker. Данный процесс занимает несколько минут и производится один раз при первой установке, следующие проекты будут использовать уже готовые образы!

После этого будут созданы нужные контейнеры.

Для облегчения управления создадим скрипт, который облегчит запуск sail с параметрами:

mcedit ./sail

Содержимое:

#!/bin/bash
./vendor/bin/sail $1 $2 $3 $4 $5 $7 $8 $9

Запустим:

chmod +x ./sail

Если у вас уже установлен nginx или mysql и вы сейчас запустите:

./sail up

То получите ошибку:

[+] Running 4/4
✔ Network newsail-app_sail Created 0.1s
✔ Volume "newsail-app_sail-mariadb" Created 0.0s
✔ Container newsail-app-mariadb-1 Created 0.1s
✔ Container newsail-app-laravel.test-1 Created 0.1s
Attaching to laravel.test-1, mariadb-1
Gracefully stopping... (press Ctrl+C again to force)
Error response from daemon: driver failed programming external connectivity on endpoint newsail-app-mariadb-1 (1f8166ae44059da4cf60cba6127bab36cfb6f55310e8f5ce4bdf749958557be9): failed to bind port 0.0.0.0:3306/tcp: Error starting userland proxy: listen tcp4 0.0.0.0:3306: bind: address already in use

Происходит конфликт портов уже использующихся установленными службами, и нам нужно поменять порты привязки!

Меняем порты для nginx и mariadb в Laravel Sail

Откроем файл:

mcedit .env

Добавим в конец файла:

FORWARD_DB_PORT=3307
APP_PORT=8081

Для каждого нового проекта достаточно просто увеличивать номер порта на единицу, например 3308, 8082.

Запустим:

./sail up
[+] Running 2/2
✔ Container newsail-app-mariadb-1 Running 0.0s
✔ Container newsail-app-laravel.test-1 Recreated 0.1s
Attaching to laravel.test-1, mariadb-1
laravel.test-1 | 2025-01-13 03:02:43,299 INFO Set uid to user 0 succeeded
laravel.test-1 | 2025-01-13 03:02:43,302 INFO supervisord started with pid 1
laravel.test-1 | 2025-01-13 03:02:44,304 INFO spawned: 'php' with pid 16
laravel.test-1 | 2025-01-13 03:02:45,306 INFO success: php entered RUNNING state, process has stayed up for > than 1 seconds (startsecs)
laravel.test-1 | PHP Warning: JIT is incompatible with third party extensions that override zend_execute_ex(). JIT disabled. in Unknown on line 0
laravel.test-1 |
laravel.test-1 | INFO Server running on [http://0.0.0.0:80].
laravel.test-1 |
laravel.test-1 | Press Ctrl+C to stop the server
laravel.test-1 |
w Enable Watch

Откроем адрес нашего сервера:

http://192.168.1.45:8081/

Изображение удалено.

Уже хорошо, осталось провести миграцию бд.

Нажмем Ctrl+c, чтобы закрыть запущенные контейнеры:

Gracefully stopping... (press Ctrl+C again to force)
[+] Stopping 2/2
✔ Container newsail-app-laravel.test-1 Stopped
✔ Container newsail-app-mariadb-1 Stopped

Запустим контейнеры в фоне:

./sail up -d

Запустим миграцию и наполнение бд:

./sail artisan migrate:fresh --seed

Обновим страницу:

http://192.168.1.45:8081/

Изображение удалено.

Laravel установлен и готов к дальнейшей разработке!

Заключение

Сегодня мы рассмотрели установку Docker Red OS Linux:

- Установили и запустили Docker;

- Предоставили обычному пользователю доступ к Docker;

- Установили node.js;

- Установили Laravel Installer;

- Создали новый проект laravel с помощью Laravel Installer;

- Установили Sail в проект Laravel;

- Написали скрипт для упрощения запуска Sail в  контейнере docker;

- Изменили порты nginx и mysql в Laravel Sail;

- Запустили контейнер с Laravel;

- Запустили миграцию и наполнение БД данными.

Категория РЕД ОС Linux

Добавить комментарий

Простой текст

  • HTML-теги не обрабатываются и показываются как обычный текст
  • Строки и абзацы переносятся автоматически.
  • Адреса веб-страниц и email-адреса преобразовываются в ссылки автоматически.
Просмотров: 261