docker compose 快速部署 LNMP 环境 (DNMP)
Включает, но не ограничивается Nginx, Mysql, PHP, Redis. Это многоверсионная программа, использующая supervisor для управления процессами PHP и nginx с использованием acme.sh для автоматического запроса и обновления бесплатных SSL-сертификатов. Программа может быть установлена одним кликом.
Перед использованием рекомендуется прочитать прилагаемый файл с инструкциями, чтобы быстро начать работу и иметь возможность оперативно решать возникающие проблемы.
QQ 交流群: 544315207
git clone https://github.com/xiaoyu98628/dnmp.git
# или
git clone https://gitee.com/xiaoyu98628/dnmp.git
# переход в каталог проекта
cd dnmp
# копирование и переименование sample.env в .env
cp sample.env .env
# копирование и переименование compose.sample.yml в compose.yml
cp compose.sample.yml compose.yml
# копирование и переименование vhost-файла
cp panel/vhost/nginx/nginx1.21/localhost.conf.sample panel/vhost/nginx/nginx1.21/ваш_домен.conf
# перед запуском docker compose up рекомендуется просмотреть compose.yml для быстрого старта.
docker compose up # запуск сервисов
http[s]://[ваш_домен]/72 # PHP72
http[s]://[ваш_домен]/73 # PHP73
http[s]://[ваш_домен]/74 # PHP74
http[s]://[ваш_домен]/80 # PHP80
http[s]://[ваш_домен]/81 # PHP81
http[s]://[ваш_домен]/82 # PHP82
http[s]://[ваш_домен]/83 # PHP83
http[s]://[ваш_домен]/84 # PHP84
``` **Постоянный;**
... }
Сервер:
Слушаю 443 SSL; Слушаю [::]:443 ssl; Имя_сервера xxx; # имя домена совпадает с именем домена выше
ssl_certificate /usr/panel/ssl/nginx/nginx1.21/имя_сайта/xxx; # открытый ключ ssl_certificate_key /usr/panel/ssl/nginx/nginx1.21/имя_сайта/xxx; # закрытый ключ
ssl_session_timeout 5m; # срок действия кеша ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4; # алгоритм шифрования ssl_protocols TLSv1 TLSv1.1 TLSv1.2; # доступные протоколы безопасного соединения ssl_prefer_server_ciphers on; # использовать предпочтительные алгоритмы сервера
... }
```shell
# Способ 1: перезапустить сервис docker compose restart
docker compose restart nginx1.21
# Способ 2: перезагрузить docker exec контейнер nginx -s reload
docker exec nginx1.21 nginx -s reload
``` ### Создание и запуск всех сервисов
*docker compose up -d* — создать и запустить все сервисы в фоновом режиме.
*docker compose up «имя сервиса»* — создать и запустить сервис.
*docker compose up -d «имя сервиса» —* создать и запустить сервис в фоновом режиме.
### Запуск сервиса
*docker compose start «имя сервиса» — *запустить сервис.
### Остановка сервиса
*docker compose stop «имя сервиса» —* остановить сервис.
### Перезапуск сервиса
*docker compose restart «имя сервиса» —* перезапустить сервис.
### Сборка или перестройка сервиса
*docker compose build «имя сервиса».*
### Удаление и остановка сервиса
*docker compose rm «имя сервиса».*
### Останов и удаление контейнера, сети, образа и монтирования
*docker compose down.*
## 4.2. Импорт и экспорт образов (контейнеров) Docker
Импорт и экспорт образов Docker используются для миграции, резервного копирования, обновления и других сценариев. В этом процессе используются команды *save*, *load*, *export* и *import*.
### Сохранение образа (экспорт контейнера)
```shell
# docker save [опции] «имя образа 1» [«имя образа 2» ...]
# опции:
# -o, --output string запись в файл вместо STDOUT
docker save -o dnmp-php72.tar dnmp-php72
# docker export [опции] контейнер
# опции:
# -o, --output string запись в файл вместо STDOUT
docker export -o php72.tar php72
Примечание: dnmp-php72 — это существующий локальный образ. После завершения будет создан сжатый файл пакета dnmp-php72.tar.
# docker load [опции]
# опции:
# -i, --input string чтение из файла архива tar вместо STDIN
# -q, --quiet подавление вывода загрузки
docker load -i dnmp-php72.tar
# docker import [опции] file|URL|- [«репозиторий»:«тег»]
# опции:
# -c, --change list применить инструкцию Dockerfile к созданному образу
# -m, --message string установить сообщение фиксации для импортированного образа
# --platform string установить платформу, если сервер поддерживает мультиплатформенность
docker import php72.tar php72:v1
Примечание: перед импортом не забудьте удалить одноимённые образы на локальном компьютере и импортируемые.
docker save сохраняет образ (image), а docker export сохраняет контейнер (container).
docker load используется для импорта образа пакета, который должен быть файлом многоуровневой файловой системы и пакетом docker save.
docker import используется для импорта пакета контейнера, но оба будут восстановлены как образ.
docker load не может переименовать импортированный образ, а docker import может указать новое имя для образа.
Пакет docker export меньше пакета docker save, потому что docker save экспортирует многоуровневую файловую систему, а docker export экспортирует каталог файлов Linux.
Известно, что при запуске контейнера без использования файлов или папок хост-компьютера файлы конфигурации внутри контейнера могут быть изменены только после входа в контейнер. Журналы также неудобно просматривать и собирать, поэтому обычно используются параметры для монтирования файлов или папок.
Режимы rw, ro и отсутствие указания являются важными аспектами, которые влияют на взаимосвязь изменений файлов и папок хоста и контейнера. Ниже приводится подробное объяснение каждого режима.
Отсутствие указания.
Режим ro.
Режим rw.
Время в контейнерах настраивается в файле .env с помощью переменной TZ. Список поддерживаемых часовых поясов можно найти в Википедии или на официальном сайте PHP.
Если в файле compose.yml или команде docker run -e задана только переменная MYSQL_ROOT_PASSWORD, эта проблема не возникнет. Если в файле compose.yml или docker run -e установлены переменные MYSQL_ROOT_HOST, MYSQL_USER, MYSQL_PASSWORD и соединение осуществляется не с пользователем root, то эта ошибка может возникнуть.
Причина проблемы заключается в правах доступа. По умолчанию у пользователя есть доступ только к библиотеке information_schema. Решение проблемы описано в статье «MySQL数据库远程连接创建用户权限等».
Если при выполнении команды docker compose build «имя службы» появляется сообщение «[output clipped, Log limit 1MiB reached]», и сборка завершается неудачно, можно использовать команду COMPOSE_DOCKER_CLI_BUILD=0 DOCKER_BUILDKIT=0 docker compose build «имя службы», чтобы увидеть ошибку. Это поможет исправить проблему.
unix:///var/run/supervisor/supervisor.sock no such file Проблема: после установки supervisor не удалось запустить службу напрямую с помощью supervisorctl, и появилась ошибка. Решение: supervisord -c /etc/supervisord.conf.
Команда указывает на запущенный процесс, но supervisor продолжает перезапускать его. Проблема: команда запуска в command указывает на фоновый запуск, что приводит к невозможности определить PID, и supervisor постоянно перезапускает процесс. Например, для elasticsearch команда $path/bin/elasticsearch -d. Решение: supervisor не может отслеживать фоновые процессы, но сам является фоновым процессом. Поэтому не стоит беспокоиться об этой проблеме.
Запущено несколько служб supervisor, и невозможно нормально остановить службу.
Проблема: перед выполнением supervisord -c /etc/supervisor.d/xx.conf была выполнена команда supervisord -c /etc/supervisord.conf, что привело к тому, что некоторые процессы стали управляться несколькими службами supervisor. Теперь эти процессы не могут быть остановлены нормально.
Решение: используйте ps -fe | grep supervisord для просмотра всех запущенных служб supervisor и завершите соответствующие процессы. Благодарим за использование скрипта для быстрой установки PHP-расширений docker-php-extension-installer:
https://github.com/mlocati/docker-php-extension-installer.
Благодарим за скрипт на чистом Unix shell, реализующий ACME (Automated Certificate Management Environment) — клиентский протокол взаимодействия с центрами сертификации:
https://github.com/acmesh-official/acme.sh.
Благодарим за сценарий автоматической выдачи SSL-сертификатов для контейнеров Nginx:
https://github.com/xiaojun207/docker-nginx.
Открытые проекты не могут существовать без поддержки сообщества. Если у вас есть идеи по улучшению проекта или вы исправили какие-то ошибки, приглашаем вас принять участие в разработке и внести свой вклад в проект. Для этого нужно выполнить следующие шаги:
Вы можете оставить комментарий после Вход в систему
Неприемлемый контент может быть отображен здесь и не будет показан на странице. Вы можете проверить и изменить его с помощью соответствующей функции редактирования.
Если вы подтверждаете, что содержание не содержит непристойной лексики/перенаправления на рекламу/насилия/вульгарной порнографии/нарушений/пиратства/ложного/незначительного или незаконного контента, связанного с национальными законами и предписаниями, вы можете нажать «Отправить» для подачи апелляции, и мы обработаем ее как можно скорее.
Комментарии ( 0 )