В прошлой публикации я рассказал как SSHeller помогает быстро и легко развернуть OpenVPN сервер. В версии 1.1.0 был добавлен еще один плагин — Docker.
Хочу сразу предупредить, что если у вас руки заточены под консоль, а управление Docker через командную строку кажется удобным и интуитивно понятным, — не нужно читать дальше, не нужно писать ничего в комментариях, я и так знаю, что SSHeller вам не нужен.
А кому он нужен? В первую очередь разработчикам веб-приложений, а так же всем, кому легко и быстро нужно поднять какой-нибудь сервис, будь то сайт, блог, или импровизированный файлообменник.
Нужен сервер с практически любым современным Linux дистрибутивом. Но, в отличии от OpenVPN, для Docker я бы порекомендовал Debian 9
либо Ubuntu 18.04
. С Fedora
и Centos
дела обстоят чуть хуже, так как требуется ставить больше пакетов, дополнительно настраивать автозапуск, немного иначе построена работа с хранилищем.
Самое главное — это должна быть либо физическая либо виртуальная машина, но никак не контейнер (LXC, OpenVZ не подойдут). И нужен доступ по SSH. В прошлой публикации есть подробное описание, как зарегистрироваться и запустить сервер в DigitalOcean, а в конце — чуть менее подробная инструкция для Linode. Оба этих сервиса предлагают простые машины за $5/месяц и бонусы при регистрации по реферальной ссылке. Для начала этого будет вполне достаточно.
Как только у нас есть IP, логин и пароль к серверу, можно устанавливать SSHeller. Скачать его можно из релизов на GitHub, есть версии для macOS, Windows и Linux. После запуска добавляем наш сервер, подключаемся к нему и переходим к плагину Docker.
Если Docker на сервере еще не установлен, сделать это можно нажатием кнопки Install
.
Менее, чем через минуту, завершится установка, откроется отчет, который можно непрочитать и закрыть, а в главном окне будет список контейнеров, томов и форма запуска нового контейнера.
В самом низу рабочей области располагается блок запуска нового контейнера. В нем отображается:
Выбрать можно любой официальный Docker образ и еще несколько дополнительных. Их перечень задается в файле https://github.com/delfer/ssheller/blob/master/plugins/docker-profiles.json и на момент публикации это:
Большинство контейнеров будут игнорировать содержимое поля Password, кроме перечисленных в docker-profiles.json (секция parameters):
Важные особенности:
Полезные советы:
alpine
или latest-alpine
— они работают так же как и обычные, но гораздо быстрее загружаются за счет меньшего весаfpm
вам, скорее всего, не нужен, а нужен apache
Дополнительная информация
После нажатия на кнопку RUN
, как только контейнер будет запущен, появится окно с отчетом, в котором будет указана выполненная команда docker run
. Она расскажет много интересного о том, как все на самом деле устроено.
Если вы запускаете несколько контейнеров с веб-интерфейсом, например Wordpress и NextCloud, и хотите, чтобы доступ к ним бы не через указание IP и порта, а по доменному имени, то нужно выпонить два простых условия:
Т.е. если, например, у вас есть домен example.com, то нужно добавить в него запись *
типа A
и указать IP сервера. В таком случае, запущенный контейнер worpdress будет доступен по адресу http://wordpress.example.com
А если домена нет — не проблема, можно воспользоваться сервисом nip.io — не нужно ни регистрироваться, ни добавлять записи. Если, например, у вашего сервера IP 172.104.129.183, и на нем запущены jwilder/nginx-proxy и nextcloud, то последний будет доступен по адресу http://nextcloud.172.104.129.183.nip.io
Часто бывает, например, что один контейнер файлы публикует (nginx), а второй — загружает (panubo/vsftpd). Или второй нужен чтобы посмотреть/скачать содержимое первого.
Например, Jenkins после запуска спрашивает пароль, записанный в файле.
jenkins_var_jenkins_home
admin
и пароль из п. 3Также бывает нужно из одного контейнера подключаться к другому. Например wordpress при установке попросит указать параметры подключения к базе данных: адрес сервера (host) и порт.
localhost
для взаимодействия между контейнерами работать не будет.
В общем случае, нужно указывать внешний IP адрес сервера и порт, отображенный
перед стрелкой (->
) в списке контейнеров. Для простоты, добавлена возможность вместо IP адреса сервера указывать просто слово host
.
Кроме MySQL, может пригодиться PostgreSQL, MongoDB, Redis, memcached, Tomcat, InfluxDB, CouchDB и т.п..
nginx_usr_share_nginx_html
Теперь можно зайти на http://<адрес сервера>:8000, чтобы загружать файлы с авторизацией, а через http://<адрес сервера> будут доступны прямые ссылки. Нужно только указать полный путь к файлу.
db
admin
host
webdevops-php-apache-dev_app
Теперь можно загрузить .php
файлы на ftp://<адрес сервера> и запустить их, перейдя по адресу http://<адрес сервера>
Далеко не все контейнеры доступны в приложении, а некоторые из доступных — не работают без дополнительных настроек — редактируйте файл на GitHub и присылайте свои Pull Request'ы. Если не знаете как — открывайте Issue. Этим вы поможете развитию проекта.
Другие способы поддержать проект, а так же множество полезной информации — в файле README.
К сожалению, не доступен сервер mySQL