Задача по переносу mikbill в контейнеры docker

Создаем общий для всех контейнеров образ
  • docker pull centos:6.8
  • docker run -ti centos:6.8 /bin/bash
  • yum update -y
Сохраняем образ
  • docker commit 6b08bed3e0f2 centos:updated
или создаем DockerFile
mkdir -p /home/docker/dockerfiles/updated
nano /home/docker/dockerfiles/updated/Dockerfile
FROM centos:6.8
RUN yum update -y && \
yum install -y wget && \
yum install -y mc && \
yum clean all
(подумать что сделать с IPTABLES)
docker build -t vilko/updated /home/docker/dockerfiles/updated
  • docker login
  • docker push vilko/updated
Скачать готовый образ
  • docker pull vilko/updated

****************************************************************
первый контейнер
freeradiusd + dhcpd
порты 67 68 1812 1813 2007
для работы нужен perl + freeradius наш скомпиленый

docker run -p 67:67 -p 68:68 -p 1812:1812 -p 1813:1813 -p 2007:2007 --name rad_dhcp -ti centos:updated

yum -y install freeradius-mysql freeradius-perl freeradius-utils dhcp
chmod a+rw /etc/dhcp/
chmod a+rw /etc/dhcp/dhcpd.conf

cp -R ./usr/local/sbin/radiusd_run.sh /usr/local/sbin/

rm -rf /etc/raddb
rm -rf /etc/init.d/radiusd

cp -R ./raddb  /etc/
cp -R ./init.d/*  /etc/init.d/
cp /etc/raddb/serialize.pm /usr/lib64/perl5

sed -i "s/MIKBILLPASS/$mysql_mikbill_passwd/g" /etc/raddb/sql.conf

rm -rf /usr/share/freeradius/dictionary
rm -rf /usr/share/freeradius/dictionary.mpd
rm -rf /usr/share/freeradius/dictionary.mikrotik

cp -R ./usr/share/freeradius/dictionary /usr/share/freeradius/
cp -R ./usr/share/freeradius/dictionary.mpd /usr/share/freeradius/
cp -R ./usr/share/freeradius/dictionary.mikrotik /usr/share/freeradius/
cp -R ./usr/share/freeradius/dictionary.dlink /usr/share/freeradius/
cp -R ./usr/share/freeradius/dictionary.dhcp /usr/share/freeradius/

*************************************************************************
Реализация freeradiusd + dhcpd из rpm пакетов

wget http://194.125.224.7/6/x86_64/freeradius-2.2.6-1.el6.x86_64.rpm
wget http://194.125.224.7/6/x86_64/freeradius-mysql-2.2.6-1.el6.x86_64.rpm
wget http://194.125.224.7/6/x86_64/freeradius-perl-2.2.6-1.el6.x86_64.rpm
wget http://194.125.224.7/6/x86_64/freeradius-utils-2.2.6-1.el6.x86_64.rpm

DockerFile
  • mkdir -p /home/docker/dockerfiles/rad_dhcp
  • nano /home/docker/dockerfiles/rad_dhcp/Dockerfile
FROM vilko/updated
RUN yum install wget -y && \
yum install dhcp -y && \
yum install mysql-libs -y && \
yum install postgresql-libs -y && \
yum install unixODBC -y && \
yum install libpcap -y && \
yum install perl-DBI  -y && \
chmod a+rw /etc/dhcp/ && \
chmod a+rw /etc/dhcp/dhcpd.conf && \
wget http://194.125.224.7/6/x86_64/freeradius-2.2.6-1.el6.x86_64.rpm && \
wget http://194.125.224.7/6/x86_64/freeradius-mysql-2.2.6-1.el6.x86_64.rpm && \
wget http://194.125.224.7/6/x86_64/freeradius-perl-2.2.6-1.el6.x86_64.rpm && \
wget http://194.125.224.7/6/x86_64/freeradius-utils-2.2.6-1.el6.x86_64.rpm && \

rpm -i freeradius-2.2.6-1.el6.x86_64.rpm && \
rpm -i freeradius-perl-2.2.6-1.el6.x86_64.rpm && \
rpm -i freeradius-mysql-2.2.6-1.el6.x86_64.rpm && \
rpm -i freeradius-utils-2.2.6-1.el6.x86_64.rpm

EXPOSE 1812 1813 67 68 2007
  • docker build -t vilko/rad_dhcp /home/docker/dockerfiles/rad_dhcp
  • docker push vilko/rad_dhcp
Зависимости
(yum provides libmysqlclient_r.so.16)
yum install mysql-libs
yum install postgresql-libs
yum install unixODBC
yum install libpcap
yum install perl-DBI

второй контейнер
php-fpm + ядро mikbill
порт 2007 mikbill +  9000 php-fpm

yum -y install php php-bcmath php-cli php-common php-devel php-embedded php-gd php-imap php-mbstring php-mysql php-pdo php-process php-pspell php-recode php-snmp php-soap php-xml php-xmlrpc nginx php-fpm libdbi-dbd-mysql php-pear crontabs

pear upgrade
pear -q install phing/phing

if [ ! -d /var/www/mikbill/admin/app/etc ];
then
    if [ ! -d /var/www/mikbill ];
    then
        mkdir /var/www/mikbill
    fi
    if [ ! -d /var/www/mikbill/admin ];
    then
mkdir /var/www/mikbill/admin
    fi
    if [ ! -d /var/www/mikbill/admin/app ];
    then
mkdir /var/www/mikbill/admin/app
    fi
    if [ ! -d /var/www/mikbill/admin/app/etc ];
    then
mkdir /var/www/mikbill/admin/app/etc
    fi
fi

OUTPUTDIR="/var/www/mikbill"
tar xzf ../system/admin.tar.gz -C $OUTPUTDIR
tar xzf ../system/stat.tar.gz -C $OUTPUTDIR
tar xzf ../system/map.tar.gz -C $OUTPUTDIR

chown -R apache:apache $OUTPUTDIR

cp -R ./etc/crontab /etc/
cp -R ./etc/sudoers /etc/
cp -R ./usr/local/sbin/mikbill_run.sh /usr/local/sbin/

sed -i "s/MIKBILLPASS/$mysql_mikbill_passwd/g" /var/www/mikbill/admin/app/etc/config.xml
sed -i "s/MIKBILLPASS/$mysql_mikbill_passwd/g" /var/www/mikbill/stat/app/etc/config.xml
sed -i "s/MIKBILLPASS/$mysql_mikbill_passwd/g" /var/www/mikbill/map/app/etc/config.xml

Zend 
mkdir /usr/local/zend

ARCH=`uname -m`

if [ "$ARCH" == "x86_64" ];
then
    cp -R ./zendGL_x64/ZendGuardLoader.so /usr/local/zend/
else
    cp -R ./zendGL_x86/ZendGuardLoader.so /usr/local/zend/
fi

Ошибки и зависимости
rpm -ihv http://194.125.224.7/6/x86_64/freeradius-2.2.6-1.el6.x86_64.rpm
Retrieving http://194.125.224.7/6/x86_64/freeradius-2.2.6-1.el6.x86_64.rpm
error: Failed dependencies:
libmysqlclient_r.so.16()(64bit) is needed by freeradius-2.2.6-1.el6.x86_64
libmysqlclient_r.so.16(libmysqlclient_16)(64bit) is needed by freeradius-2.2.6-1.el6.x86_64
libodbc.so.2()(64bit) is needed by freeradius-2.2.6-1.el6.x86_64
libpq.so.5()(64bit) is needed by freeradius-2.2.6-1.el6.x86_64

libmysqlclient_r.so.16
wget https://github.com/mikbill/distr/blob/master/mikbill_php-fpm/libs/libmysqlclient_r.so.16?raw=true -O /usr/lib64/mysql/libmysqlclient_r.so.16
yum install mysql-libs


yum install http://194.125.224.7/6/x86_64/mikbill-freeradius-2.2.6-1.el6.x86_64.rpm
yum install http://194.125.224.7/6/x86_64/mikbill-freeradius-perl-2.2.6-1.el6.x86_64.rpm

yum install -y http://194.125.224.7/6/x86_64/mikbill-zend-1.0-1.x86_64.rpm \
http://194.125.224.7/6/x86_64/mikbilladmin53-1.0-1.x86_64.rpm \
http://194.125.224.7/6/x86_64/mikbillstat53-1.0-1.x86_64.rpm \
http://194.125.224.7/6/x86_64/perl-PHP-Serialization-0.34-6.el6.art.noarch.rpm

третий контейнер 
nginx
порты 80 443

nano /etc/yum.repos.d/nginx.repo
[nginx]
name=nginx repo
baseurl=http://nginx.org/packages/centos/$releasever/$basearch/
gpgcheck=0
enabled=1
rm -rf /etc/nginx/conf.d

if [ ! -d /etc/nginx/conf.d ];
then
    log "mkdir /etc/nginx/conf.d"
    mkdir /etc/nginx/conf.d
    log "mkdir /etc/nginx/conf.d/ssl" 
    mkdir /etc/nginx/conf.d/ssl
fi

openssl req -new -newkey rsa:1024 -nodes -keyout /etc/nginx/conf.d/ssl/ca.key -x509 -days 500 -subj /C=UA/ST=Kiev/L=Kiev/O=Companyname/OU=User/CN=etc/emailAddress=admin@my_site.com -out /etc/nginx/conf.d/ssl/ca.crt >>$logfile

cp -R ./etc/nginx/* /etc/nginx/
cp -R ./nginx/* /etc/nginx/conf.d/

sed -i "s/ispnet\.demo/$domain_billing/g" /etc/nginx/conf.d/00_stat_zaglushka_vhost.conf
sed -i "s/ispnet\.demo/$domain_billing/g" /etc/nginx/conf.d/admin_vhost.conf
sed -i "s/ispnet\.demo/$domain_billing/g" /etc/nginx/conf.d/stat_vhost.conf
sed -i "s/ispnet\.demo/$domain_billing/g" /etc/nginx/conf.d/map_vhost.conf
sed -i "s/ip_billing/$ip_billing/g" /etc/nginx/conf.d/admin_vhost.conf

DockerFile
  • mkdir -p /home/docker/dockerfiles/nginx
  • nano /home/docker/dockerfiles/nginx/Dockerfile
FROM vilko/updated
RUN yum install -y epel-release && \
yum install -y nginx && \
yum clean all && \
rm -rf /etc/nginx/conf.d && \
mkdir -p /etc/nginx/conf.d/ssl && \
wget -P /etc/nginx/conf.d https://raw.githubusercontent.com/olegvilko/mikbill/master/nginx/00_stat_zaglushka_vhost.conf && \
wget -P /etc/nginx/conf.d   https://raw.githubusercontent.com/olegvilko/mikbill/master/nginx/admin_vhost.conf && \
wget -P /etc/nginx/conf.d   https://raw.githubusercontent.com/olegvilko/mikbill/master/nginx/map_vhost.conf && \
wget -P /etc/nginx/conf.d   https://raw.githubusercontent.com/olegvilko/mikbill/master/nginx/stat_vhost.conf && \
openssl req -new -newkey rsa:1024 -nodes -keyout /etc/nginx/conf.d/ssl/ca.key -x509 -days 500 -subj /C=UA/ST=Kiev/L=Kiev/O=Companyname/OU=User/CN=etc/emailAddress=admin@my_site.com -out /etc/nginx/conf.d/ssl/ca.crt
EXPOSE 80 443
  • docker build -t vilko/nginx /home/docker/dockerfiles/nginx
  • docker push vilko/nginx


На основе официального репозитория nginx
https://hub.docker.com/_/nginx/
  • nano /home/docker/dockerfiles/nginx/Dockerfile
FROM nginx
EXPOSE 80 443
  • docker build -t nginx /home/docker/dockerfiles/nginx

(в нашем конфиге user apache заменить на nginx)
  • docker run -p 80:80 -p 443:443 --name nginx -v /etc/mikbill/nginx.conf:/etc/nginx/nginx.conf -v /etc/mikbill/conf.d:/etc/nginx/conf.d -d nginx
подключение
  • docker exec -it nginx bash


Четвертый контейнер
mysql

yum -y mysql mysql-connector-odbc mysql-devel mysql-server apr-util-mysql
cp -R ./etc/my.cnf /etc/

$MYSQLADMIN -u root password "$mysql_root_passwd" &>>$logfile
$MYSQLUPD -uroot -p$mysql_root_passwd &>>$logfile

sed -e "s/MIKBILLPASS/$mysql_mikbill_passwd/g" ../sql/install/mikbill_5.5.sql > ../sql/install/mikbill_5.5.sql2
$MYSQL -uroot -p$mysql_root_passwd < ../sql/install/mikbill_5.5.sql2 &>>$logfile
rm -rf ../sql/install/mikbill_5.5.sql2
$MYSQL -uroot -p$mysql_root_passwd mikbill < ../sql/2.0.6/mikbill_2_0_6_utf8.sql &>>$logfile

На основе официального репозитория MySQL
https://hub.docker.com/_/mysql/
  • mkdir -p /home/docker/dockerfiles/mysql
  • nano /home/docker/dockerfiles/mysql/Dockerfile

FROM mysql:5.5 
EXPOSE 3306
  • docker build -t mysql /home/docker/dockerfiles/mysql
docker run -p 3306:3306 --name mysql -e MYSQL_ROOT_PASSWORD=PASSWORD -d mysql:5.5

docker run -p 3306:3306 -v /etc/mikbill/my.cnf:/etc/mysql/conf.d/my.cnf -v /var/lib/mysql:/var/lib/mysql  --name mysql -e MYSQL_ROOT_PASSWORD=PASSWORD -d mysql:5.5
(-v именно тут, а не как на офе между name и password, иначе пароль не создается)

подключение
  • docker exec -it mysql bash
добавить пользователя mysql
CREATE USER 'mikbill'@'localhost' IDENTIFIED BY 'PASSWORD';
GRANT ALL PRIVILEGES ON * . * TO 'mikbill'@'localhost';

установка баз mikbill
 mysql -uroot -pPASSWORD < /var/lib/mysql/mikbill_5.5.sql

штатный конфиг my.cnf
cat /etc/mysql/my.cnf
[mysqld]
skip-host-cache
skip-name-resolve
datadir = /var/lib/mysql
!includedir /etc/mysql/conf.d/


****************************************************************

Mrtg
if [ ! -d /etc/mrtg ];
then
    mkdir /etc/mrtg
fi

echo > /etc/mrtg/mrtg_mikbill_users.conf
echo > /etc/mrtg/mrtg_mikbill_tarif.conf
chmod -R a+rw /etc/mrtg

Логи
yum -y install logrotate
cp -R ./etc/logrotate.d/* /etc/logrotate.d/

**********************************************************
Создание контейнера mikbill (все в одной куче)

  • docker run -d -p 80:80 -p 443:443 -p 1812:1812 -p 1813:1813 -p 67:67 -p 68:68 --name mikbill -t -i centos:6.8
  • docker attach mikbill
  • yum install epel-release
  • yum update
  • yum install wget -y
  • cd /home
  • wget http://www.mikbill.ru/mikbill.tar.gz
  • tar xzvf mikbill.tar.gz
  • cd DISTR/Centos6x
  • ./install_centos6x
После настроек создаем образ контейнера
  • docker commit <id_контейнера> <имя_образа>
Сохраняем образ в файл
  • docker save имя_образа > ~/my_container_for_nransfer.tar 
******************************************************************
Cписок всех логов и конфигов (по контейнерам)
1.rad_dhcp
конфиги

/etc/dhcp/dhcpd.conf
/usr/lib64/perl5/serialize.pm
/etc/raddb/ (тут надо определиться что в конфиги определить. Что знаю точно ниже написал)
/etc/raddb/radiusd.conf
/etc/raddb/sql.conf
/usr/share/freeradius/ (по идее весь каталог)
логи
/var/log/messages
/var/log/radius/
2.php-fpm + ядро mikbill
конфиги
/etc/crontab
/etc/sudoers
/var/www/mikbill/admin/app/etc/config.xml
/var/www/mikbill/stat/app/etc/config.xml
/var/www/mikbill/map/app/etc/config.xml
/etc/php-fpm.d/www.conf
/var/www/mikbill/admin/sys/scripts/ (под вопросом)
/var/www/mikbill/admin/sys/files/
/var/www/mikbill/admin/app/etc/client.key
/var/www/mikbill/admin/app/etc/serv.crt
/var/www/mikbill/admin/app/etc/template_config.xml (надо?)
/var/www/mikbill/admin/app/etc/roskomnadzor/ (тут похоже все)
/var/www/mikbill/admin/res/ (похоже все...)
/var/www/mikbill/stat/res/logo/
/var/www/mikbill/stat/sys/files/
/var/www/mikbill/stat/sys/scripts/ (надо?)
/var/www/mikbill/stat/news.html
логи
/var/www/mikbill/admin/app/log/
/var/www/mikbill/stat/app/log/
/var/www/mikbill/map/app/log/
/var/www/mikbill/admin/sys/update/ (тут похоже весь каталог)
/var/www/mikbill/admin/sys/mrtg/
/var/www/mikbill/admin/sys/mrtg_users/
/var/www/mikbill/stat/sys/mrtg_users/
/var/log/mikbill.log
/var/log/cron
/var/log/php-fpm/
3.nginx
конфиги

/etc/nginx/
логи
/var/log/nginx/
4.mysql
конфиги

/etc/my.cnf
логи
/var/log/mysqld.log

Комментарии

Популярные сообщения из этого блога

Accel-ppp команды

mikbill расшифровка завершений сессий

Zabbix agent установка и настройка