
Установка 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;
- Запустили миграцию и наполнение БД данными.
Добавить комментарий