- PVSM.RU - https://www.pvsm.ru -

Запуск LAMP и сотен других веб-приложений в несколько кликов

image В прошлой публикации [1] я рассказал как SSHeller помогает быстро и легко развернуть OpenVPN сервер. В версии 1.1.0 был добавлен еще один плагин — Docker.
Хочу сразу предупредить, что если у вас руки заточены под консоль, а управление Docker через командную строку кажется удобным и интуитивно понятным, — не нужно читать дальше, не нужно писать ничего в комментариях, я и так знаю, что SSHeller вам не нужен.

А кому он нужен? В первую очередь разработчикам веб-приложений, а так же всем, кому легко и быстро нужно поднять какой-нибудь сервис, будь то сайт, блог, или импровизированный файлообменник.

Как это работает

Нужен сервер с практически любым современным Linux дистрибутивом. Но, в отличии от OpenVPN, для Docker я бы порекомендовал Debian 9 либо Ubuntu 18.04. С Fedora и Centos дела обстоят чуть хуже, так как требуется ставить больше пакетов, дополнительно настраивать автозапуск, немного иначе построена работа с хранилищем.

Самое главное — это должна быть либо физическая либо виртуальная машина, но никак не контейнер (LXC, OpenVZ не подойдут). И нужен доступ по SSH. В прошлой публикации [1] есть подробное описание, как зарегистрироваться и запустить сервер в DigitalOcean, а в конце — чуть менее подробная инструкция для Linode. Оба этих сервиса предлагают простые машины за $5/месяц и бонусы при регистрации по реферальной ссылке. Для начала этого будет вполне достаточно.

Как только у нас есть IP, логин и пароль к серверу, можно устанавливать SSHeller. Скачать его можно из релизов на GitHub [2], есть версии для macOS, Windows и Linux. После запуска добавляем наш сервер, подключаемся к нему и переходим к плагину Docker.

Запуск LAMP и сотен других веб-приложений в несколько кликов - 2

Если Docker на сервере еще не установлен, сделать это можно нажатием кнопки Install.
Менее, чем через минуту, завершится установка, откроется отчет, который можно непрочитать и закрыть, а в главном окне будет список контейнеров, томов и форма запуска нового контейнера.

Запуск LAMP и сотен других веб-приложений в несколько кликов - 3

Основные функции

Запуск контейнера

В самом низу рабочей области располагается блок запуска нового контейнера. В нем отображается:

  • том, выбранный из списка выше, который будет подключен к контейнеру, если он это поддерживает
  • пароль, который будет установлен приложению в контейнере, опять же, если он это поддерживает
  • выбор образа контейнера
  • и выбор тэга образа

Выбрать можно любой официальный Docker образ и еще несколько дополнительных. Их перечень задается в файле https://github.com/delfer/ssheller/blob/master/plugins/docker-profiles.json [3] и на момент публикации это:

  • jwilder/nginx-proxy — автоматически настраиваемый Nginx для доступа к контейнерам через доменное имя, а не порт
  • panubo/vsftpd — FTP сервер
  • coderaiser/cloudcmd — WEB-инетрфейс для доступа к файлам
  • webdevops/php-apache-dev — сборка Apache + PHP + модули для разработки (выводит ошибки)
  • webdevops/php-apache — сборка Apache + PHP + модули для "прода" (не выводит ошибки)
  • webdevops/php-nginx-dev — сборка Nginx + PHP + модули для разработки (выводит ошибки)
  • webdevops/php-nginx — сборка Nginx + PHP + модули для "прода" (не выводит ошибки)

Большинство контейнеров будут игнорировать содержимое поля Password, кроме перечисленных в docker-profiles.json [3] (секция parameters):

  • panubo/vsftpd — пароль для подключения по FTP под пользователем admin
  • coderaiser/cloudcmd — пароль для входа под пользователем admin
  • mysql/mariadb/postgres/influxdb — пароль для подключения к базе db под пользователем admin
  • rabbitmq/couchdb/orientdb — пароль для подключения под пользователем admin

Важные особенности:

  • Тэги загружаются автоматически после выбора образа. Доступен поиск
  • Контейнер будет доступен на том порту, который указал его автор. Если порт занят — будет выбран первый свободный
  • Контейнер будет доступен на домене <имя контейнера>.<домен сервера> если есть соответствующие записи в DNS
  • Для контейнера будут созданы тома, если их указал автор образа, либо они заданы в docker-profiles.json [3] (секция volumes)

Полезные советы:

  • jwilder/nginx-proxy нужно запускать первым, чтобы он занял 80 порт
  • panubo/vsftpd нужно запускать последним, так как при запуске он меняет права доступа к папке, чтобы иметь к ней полный доступ
  • почти всегда лучше использовать образ с тэгом alpine или latest-alpine — они работают так же как и обычные, но гораздо быстрее загружаются за счет меньшего веса
  • если вам нужна MySQL — используйте лучше MariaDB, если, конечно, вы точно не уверены в том, что MariaDB вам не подходит
  • если вы запускаете что-то с PHP, то fpm вам, скорее всего, не нужен, а нужен apache

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

Доступ через доменное имя

Если вы запускаете несколько контейнеров с веб-интерфейсом, например WordPress и NextCloud, и хотите, чтобы доступ к ним бы не через указание IP и порта, а по доменному имени, то нужно выпонить два простых условия:

  1. Первым запустить jwilder/nginx-proxy
  2. Иметь Wildcard DNS запись

Запуск LAMP и сотен других веб-приложений в несколько кликов - 4

Т.е. если, например, у вас есть домен example.com, то нужно добавить в него запись * типа A и указать IP сервера. В таком случае, запущенный контейнер worpdress будет доступен по адресу http://wordpress.example.com [4]

А если домена нет — не проблема, можно воспользоваться сервисом nip.io [5] — не нужно ни регистрироваться, ни добавлять записи. Если, например, у вашего сервера IP 172.104.129.183, и на нем запущены jwilder/nginx-proxy и nextcloud, то последний будет доступен по адресу http://nextcloud.172.104.129.183.nip.io [6]

Запуск двух контейнеров с одним томом

Часто бывает, например, что один контейнер файлы публикует (nginx), а второй — загружает (panubo/vsftpd). Или второй нужен чтобы посмотреть/скачать содержимое первого.

Например, Jenkins после запуска спрашивает пароль, записанный в файле.

Запуск LAMP и сотен других веб-приложений в несколько кликов - 5

  1. Запускаем Jenkins
  2. Выбираем его том jenkins_var_jenkins_home
  3. Указываем пароль для доступа
  4. Запускаем coderaiser/cloudcmd
  5. Открываем http://coderaiser-cloudcmd [7].<домен>, вводим логин admin и пароль из п. 3
  6. Смотрим пароль от Jenkins

Запуск LAMP и сотен других веб-приложений в несколько кликов - 6

Запуск LAMP и сотен других веб-приложений в несколько кликов - 7

Взаимодействие между контейнерами

Также бывает нужно из одного контейнера подключаться к другому. Например wordpress при установке попросит указать параметры подключения к базе данных: адрес сервера (host) и порт.

localhost для взаимодействия между контейнерами работать не будет.

В общем случае, нужно указывать внешний IP адрес сервера и порт, отображенный
перед стрелкой (->) в списке контейнеров. Для простоты, добавлена возможность вместо IP адреса сервера указывать просто слово host.

Кроме MySQL, может пригодиться PostgreSQL, MongoDB, Redis, memcached, Tomcat, InfluxDB, CouchDB и т.п..

Примеры использования

Файлообменник

  1. Запускаем nginx:alpine
  2. Вводим пароль администратора для web-интерфейса
  3. Выбираем том nginx_usr_share_nginx_html
  4. Запускаем coderaiser/cloudcmd:latest-alpine

Теперь можно зайти на http://<адрес сервера>:8000 [8], чтобы загружать файлы с авторизацией, а через http://<адрес сервера> [9] будут доступны прямые ссылки. Нужно только указать полный путь к файлу.

WordPress

  1. Придумываем и вводим пароль для базы данных
  2. Запускам mariadb
  3. Запускаем wordpress:apache
  4. Переходим по адресу http://<адрес сервера> [9], начинаем установку и указываем параметры подключения к СУБД:
    • Имя базы данных: db
    • Имя пользователя: admin
    • Пароль — тот, что ввели в п.1
    • Сервер базы данных: host
    • Префикс таблиц — любой

LAMP

  1. Придумываем и вводим пароль для базы данных
  2. Запускам mariadb
  3. Запускаем webdevops/php-apache-dev:alpine
  4. Выбираем том webdevops-php-apache-dev_app
  5. Придумываем и вводим пароль для FTP сервера
  6. Запускаем panubo/vsftpd

Теперь можно загрузить .php файлы на ftp://<адрес сервера> [10] и запустить их, перейдя по адресу http://<адрес сервера> [9]

P.S.

Далеко не все контейнеры доступны в приложении, а некоторые из доступных — не работают без дополнительных настроек — редактируйте файл [3] на GitHub и присылайте свои Pull Request'ы. Если не знаете как — открывайте Issue [11]. Этим вы поможете развитию проекта.

Другие способы поддержать проект, а так же множество полезной информации — в файле README [12].

Автор: delfer

Источник [13]


Сайт-источник PVSM.RU: https://www.pvsm.ru

Путь до страницы источника: https://www.pvsm.ru/linux/282454

Ссылки в тексте:

[1] прошлой публикации: https://habr.com/post/371475/

[2] релизов на GitHub: https://github.com/delfer/ssheller/releases

[3] https://github.com/delfer/ssheller/blob/master/plugins/docker-profiles.json: https://github.com/delfer/ssheller/blob/master/plugins/docker-profiles.json

[4] http://wordpress.example.com: http://wordpress.example.com

[5] nip.io: http://nip.io

[6] http://nextcloud.172.104.129.183.nip.io: http://nextcloud.172.104.129.183.nip.io

[7] http://coderaiser-cloudcmd: http://coderaiser-cloudcmd.%3C%D0%B4%D0%BE%D0%BC%D0%B5%D0%BD%3E

[8] http://<адрес сервера>:8000: http://%3C%D0%B0%D0%B4%D1%80%D0%B5%D1%81%20%D1%81%D0%B5%D1%80%D0%B2%D0%B5%D1%80%D0%B0%3E:8000

[9] http://<адрес сервера>: http://%3C%D0%B0%D0%B4%D1%80%D0%B5%D1%81%20%D1%81%D0%B5%D1%80%D0%B2%D0%B5%D1%80%D0%B0%3E

[10] ftp://<адрес сервера>: https://www.pvsm.ruftp://%3C%D0%B0%D0%B4%D1%80%D0%B5%D1%81%20%D1%81%D0%B5%D1%80%D0%B2%D0%B5%D1%80%D0%B0%3E

[11] Issue: https://github.com/delfer/ssheller/issues

[12] README: https://github.com/delfer/ssheller#ssheller

[13] Источник: https://habr.com/post/413743/?utm_campaign=413743