1 В избранное 0 Ответвления 0

OSCHINA-MIRROR/xiaoyucc521-dnmp

Присоединиться к Gitlife
Откройте для себя и примите участие в публичных проектах с открытым исходным кодом с участием более 10 миллионов разработчиков. Приватные репозитории также полностью бесплатны :)
Присоединиться бесплатно
Клонировать/Скачать
Внести вклад в разработку кода
Синхронизировать код
Отмена
Подсказка: Поскольку Git не поддерживает пустые директории, создание директории приведёт к созданию пустого файла .keep.
Loading...
README.md

docker compose 快速部署 LNMP 环境 (DNMP)

Включает, но не ограничивается Nginx, Mysql, PHP, Redis. Это многоверсионная программа, использующая supervisor для управления процессами PHP и nginx с использованием acme.sh для автоматического запроса и обновления бесплатных SSL-сертификатов. Программа может быть установлена одним кликом.

Перед использованием рекомендуется прочитать прилагаемый файл с инструкциями, чтобы быстро начать работу и иметь возможность оперативно решать возникающие проблемы.

QQ 交流群: 544315207

Быстрое использование

  1. Локальная установка:
    • git;
    • Docker;
    • docker-compose 2.0.0+.
  2. Клонирование проекта:
    git clone https://github.com/xiaoyu98628/dnmp.git
    # или
    git clone https://gitee.com/xiaoyu98628/dnmp.git
  3. Копирование и переименование конфигурационного файла .env, запуск (обратите внимание на необходимость настройки разрешений для монтируемых каталогов):
    # переход в каталог проекта
    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 # запуск сервисов
  4. После запуска проверьте версию PHP:
    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

ssl_certificate /usr/panel/ssl/nginx/nginx1.21/имя_сайта/xxx; # открытый ключ ssl_certificate_key /usr/panel/ssl/nginx/nginx1.21/имя_сайта/xxx; # закрытый ключ

Конфигурация, связанная с проверкой SSL

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

Примечание: перед импортом не забудьте удалить одноимённые образы на локальном компьютере и импортируемые.

Разница и связь между save, load, export, import

  • 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.

5. Другие вопросы

Объяснение rw и ro в файле compose.sample.yml для томов

Известно, что при запуске контейнера без использования файлов или папок хост-компьютера файлы конфигурации внутри контейнера могут быть изменены только после входа в контейнер. Журналы также неудобно просматривать и собирать, поэтому обычно используются параметры для монтирования файлов или папок.

Режимы rw, ro и отсутствие указания являются важными аспектами, которые влияют на взаимосвязь изменений файлов и папок хоста и контейнера. Ниже приводится подробное объяснение каждого режима.

  1. Отсутствие указания.

    • Файлы: изменения в файлах на хосте не видны в контейнере, и наоборот.
    • Папки: любые изменения, включая добавление, удаление и создание новых файлов в папке, синхронизируются.
  2. Режим ro.

    • Файлы: файлы в контейнере доступны только для чтения, и при попытке их изменить появится сообщение об ошибке readonly.
    • Папки: файлы и папки в контейнере доступны только для чтения. Попытка изменить, добавить или удалить файлы или папки приведёт к сообщению об ошибке readonly.
  3. Режим rw.

    • Файлы: любые изменения файлов на хосте или в контейнере синхронизируются, но контейнер не позволяет удалять файлы. При попытке удаления появится сообщение об ошибке Device or resource busy. Хост может удалить файл, но это не будет синхронизировано с контейнером.
    • Папки: любые изменения папок на хосте или в контейнере синхронизируются.

Проблема времени в контейнерах

Время в контейнерах настраивается в файле .env с помощью переменной TZ. Список поддерживаемых часовых поясов можно найти в Википедии или на официальном сайте PHP.

Ошибка SQLSTATE[HY000] [1044] Access denied for user 'ваше имя пользователя'@'%' to database 'mysql'

Если в файле compose.yml или команде docker run -e задана только переменная MYSQL_ROOT_PASSWORD, эта проблема не возникнет. Если в файле compose.yml или docker run -e установлены переменные MYSQL_ROOT_HOST, MYSQL_USER, MYSQL_PASSWORD и соединение осуществляется не с пользователем root, то эта ошибка может возникнуть.

Причина проблемы заключается в правах доступа. По умолчанию у пользователя есть доступ только к библиотеке information_schema. Решение проблемы описано в статье «MySQL数据库远程连接创建用户权限等».

Ограничение журнала в 1 МиБ достигнуто

Если при выполнении команды docker compose build «имя службы» появляется сообщение «[output clipped, Log limit 1MiB reached]», и сборка завершается неудачно, можно использовать команду COMPOSE_DOCKER_CLI_BUILD=0 DOCKER_BUILDKIT=0 docker compose build «имя службы», чтобы увидеть ошибку. Это поможет исправить проблему.

Общие проблемы с supervisor

  1. unix:///var/run/supervisor/supervisor.sock no such file Проблема: после установки supervisor не удалось запустить службу напрямую с помощью supervisorctl, и появилась ошибка. Решение: supervisord -c /etc/supervisord.conf.

  2. Команда указывает на запущенный процесс, но supervisor продолжает перезапускать его. Проблема: команда запуска в command указывает на фоновый запуск, что приводит к невозможности определить PID, и supervisor постоянно перезапускает процесс. Например, для elasticsearch команда $path/bin/elasticsearch -d. Решение: supervisor не может отслеживать фоновые процессы, но сам является фоновым процессом. Поэтому не стоит беспокоиться об этой проблеме.

  3. Запущено несколько служб 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.

Открытое сотрудничество

Открытые проекты не могут существовать без поддержки сообщества. Если у вас есть идеи по улучшению проекта или вы исправили какие-то ошибки, приглашаем вас принять участие в разработке и внести свой вклад в проект. Для этого нужно выполнить следующие шаги:

  1. Форк (fork) этого проекта в свою собственную ветку repo.
  2. Клонировать (clone) форкнутый проект в локальное хранилище.
  3. Изменить код.
  4. Зафиксировать изменения (commit) и отправить их в своё хранилище (push).
  5. Отправить запрос на включение изменений (pull request) в ветку develop.
  6. Дождаться, пока автор объединит изменения. Спасибо всем, кто использует этот код! Если он вам пригодился, поставьте ⭐ (Star) в правом верхнем углу. Заранее благодарим!

Лицензия

Apache License 2.0

Star History Chart

Комментарии ( 0 )

Вы можете оставить комментарий после Вход в систему

Введение

Описание недоступно Развернуть Свернуть
Shell и 4 других языков
Apache-2.0
Отмена

Обновления

Пока нет обновлений

Участники

все

Недавние действия

Загрузить больше
Больше нет результатов для загрузки
1
https://api.gitlife.ru/oschina-mirror/xiaoyucc521-dnmp.git
git@api.gitlife.ru:oschina-mirror/xiaoyucc521-dnmp.git
oschina-mirror
xiaoyucc521-dnmp
xiaoyucc521-dnmp
main