-
Notifications
You must be signed in to change notification settings - Fork 3
/
Dockerfile
148 lines (120 loc) · 7.62 KB
/
Dockerfile
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
FROM centos:latest
MAINTAINER liufee job@feehi.com
#php版本,因为php版本间配置文件模板不相同,此处的版本号只能为大于7.0以上版本
ARG PHP_VER=7.1.12
#nginx版本
ARG NGINX_VER=1.12.2
#修改dns地址
RUN echo nameserver 223.5.5.5 > /etc/resolv.conf
#更换yum源
RUN mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.backup && curl -o /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
#安装基础工具
RUN yum install vim wget git net-tools -y
#安装supervisor
RUN yum install python-setuptools -y && easy_install supervisor
#安装php
RUN yum install epel-release -y && yum update -y\
&& yum -y install pcre pcre-devel zlib zlib-devel openssl openssl-devel libxml2 libxml2-devel libjpeg libjpeg-devel libpng libpng-devel curl curl-devel libicu libicu-devel libmcrypt libmcrypt-devel freetype freetype-devel libmcrypt libmcrypt-devel autoconf gcc-c++
WORKDIR /usr/src
RUN curl -o php.tar.gz http://php.net/get/php-${PHP_VER}.tar.gz/from/this/mirror -L && mkdir php && tar -xzvf php.tar.gz -C ./php --strip-components 1
WORKDIR php
RUN ./configure --prefix=/usr/local/php --with-config-file-path=/etc/php --enable-soap --enable-mbstring=all --enable-sockets --enable-fpm --with-gd --with-freetype-dir=/usr/include/freetype2/freetype --with-jpeg-dir=/usr/lib64 --with-zlib --with-iconv --enable-libxml --enable-xml --enable-intl --enable-zip --enable-pcntl --enable-bcmath --enable-maintainer-zts --with-curl --with-mcrypt --with-openssl --with-mysqli=mysqlnd --with-pdo-mysql=mysqlnd \
&& make && make install \
&& mkdir /etc/php \
&& cp /usr/src/php/php.ini-development /etc/php/php.ini \
&& cp /usr/src/php/sapi/fpm/init.d.php-fpm /etc/init.d/php-fpm && chmod +x /etc/init.d/php-fpm
WORKDIR /usr/local/php/etc
RUN cp php-fpm.conf.default php-fpm.conf \
&& sed -i "s/;daemonize = yes/daemonize = no/" php-fpm.conf \
&& cp ./php-fpm.d/www.conf.default ./php-fpm.d/www.conf \
&& sed -i "s/export PATH/PATH=\/usr\/local\/php\/bin:\$PATH\nexport PATH/" /etc/profile \
&& sed -i "s/export PATH/PATH=\/etc\/init.d:\$PATH\nexport PATH/" /etc/profile
#安装nginx
WORKDIR /usr/src
RUN curl -o nginx.tar.gz http://nginx.org/download/nginx-${NGINX_VER}.tar.gz && mkdir nginx && tar -zxvf nginx.tar.gz -C ./nginx --strip-components 1
WORKDIR nginx
RUN ./configure --prefix=/usr/local/nginx --conf-path=/etc/nginx/nginx.conf --error-log-path=/var/log/nginx/error.log --http-log-path=/var/log/nginx/access.log --pid-path=/var/run/nginx.pid --lock-path=/var/lock/nginx.lock --user=nginx --group=nginx --with-http_ssl_module --with-http_flv_module --with-http_stub_status_module --with-http_gzip_static_module --http-client-body-temp-path=/tmp/nginx/client/ --http-proxy-temp-path=/tmp/nginx/proxy/ --http-fastcgi-temp-path=/tmp/nginx/fcgi/ --with-pcre --with-http_dav_module \
&& make && make install \
&& useradd nginx \
&& mkdir -p -m 777 /tmp/nginx \
&& echo "#!/bin/sh" > /etc/init.d/nginx \
&& echo "#description: Nginx web server." >> /etc/init.d/nginx \
&& echo -e "case \$1 in \n\
restart): \n\
/usr/local/nginx/sbin/nginx -s reload \n\
;; \n\
stop): \n\
/usr/local/nginx/sbin/nginx -s stop \n\
;; \n\
*): \n\
/usr/local/nginx/sbin/nginx \n\
;; \n\
esac \n" >> /etc/init.d/nginx \
&& chmod +x /etc/init.d/nginx \
&& sed -i "64a }" /etc/nginx/nginx.conf \
&& sed -i "64a include fastcgi_params;" /etc/nginx/nginx.conf \
&& sed -i "64a fastcgi_param SCRIPT_FILENAME \$document_root\$fastcgi_script_name;" /etc/nginx/nginx.conf \
&& sed -i "64a fastcgi_index index.php;" /etc/nginx/nginx.conf \
&& sed -i "64a fastcgi_pass 127.0.0.1:9000;" /etc/nginx/nginx.conf \
&& sed -i "64a root html/frontend/web;" /etc/nginx/nginx.conf \
&& sed -i "64a location ~ \.php$ {" /etc/nginx/nginx.conf \
&& sed -i "3a daemon off;" /etc/nginx/nginx.conf \
&& echo "<?php phpinfo()?>" > /usr/local/nginx/html/index.php \
&& sed -i '45s/html;/html\/frontend\/web;/g' /etc/nginx/nginx.conf \
&& sed -i '46s/index index.html index.htm;/index index.php index.html index.htm;/g' /etc/nginx/nginx.conf \
&& sed -i "46a try_files \$uri \$uri/ /index.php?\$args;" /etc/nginx/nginx.conf
#安装mysql
RUN curl -o mysql-server.rpm https://repo.mysql.com//mysql57-community-release-el7-11.noarch.rpm
RUN rpm -ivh mysql-server.rpm
RUN /usr/bin/yum install mysql-community-server -y
VOLUME ['/mysql']
RUN sed -i "/datadir=/s/\/var\/lib\/mysql/\/mysql/g" /etc/my.cnf && sed -i "/log-error=/s/\/var\/log\/mysqld.log/\/var\/log\/mysql\/mysqld.log/g" /etc/my.cnf && echo "user=root" >> /etc/my.cnf
RUN echo -e "#!/bin/sh \n\
files=\`ls /mysql\` \n\
if [ -z \"\$files\" ];then \n\
if [ ! \${MYSQL_PASSWORD} ]; then \n\
MYSQL_PASSWORD='123456' \n\
fi \n\
/usr/sbin/mysqld --initialize \n\
MYSQLOLDPASSWORD=\`awk -F \"localhost: \" '/A temporary/{print \$2}' /var/log/mysql/mysqld.log\` \n\
/usr/sbin/mysqld & \n\
echo -e \"[client] \\\n password=\"\${MYSQLOLDPASSWORD}\" \\\n user=root\" > ~/.my.cnf \n\
sleep 5s \n\
/usr/bin/mysql --connect-expired-password -e \"set password=password('\$MYSQL_PASSWORD');update mysql.user set host='%' where user='root' && host='localhost';flush privileges;create database cms DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;\" \n\
echo -e \"[client] \\\n password=\"\${MYSQL_PASSWORD}\" \\\n user=root\" > ~/.my.cnf \n\
/usr/local/php/bin/php /usr/local/nginx/html/yii migrate/up --interactive=0 \n\
else \n\
rm -rf /var/lib/mysql/mysql.sock.locl \n\
/usr/sbin/mysqld \n\
fi" > /mysql.sh
RUN chmod +x /mysql.sh && ln -s /var/lib/mysql/mysql.sock /tmp/mysql.sock && mkdir /var/log/mysql
#安装必要的服务
RUN yum install vixie-cron crontabs -y \
&& cd /usr/src && /usr/local/php/bin/php -r "copy('https://getcomposer.org/installer', 'composer-setup.php');" && /usr/local/php/bin/php composer-setup.php --install-dir=/usr/local/bin --filename=composer && rm -rf composer-setup.php && /usr/local/php/bin/php /usr/local/bin/composer config -g repo.packagist composer https://packagist.phpcomposer.com
#部署feehicms
VOLUME ['/usr/local/nginx/html']
WORKDIR '/usr/local/nginx'
RUN rm -rf html && git clone https://git@github.com/liufee/cms.git html \
&& cd html \
&& /usr/local/php/bin/php /usr/local/bin/composer install -vvv
RUN cd /usr/local/nginx/html && /usr/local/php/bin/php ./init --env=Development \
&& sed -i "6s/'dsn' => 'mysql:host=localhost;dbname=yii2advanced'/'dsn' => 'mysql:host=127.0.0.1;dbname=cms'/g" common/config/main-local.php \
&& sed -i "8s/ 'password' => ''/ 'password' => '123456'/g" common/config/main-local.php
#配置supervisor
RUN echo [supervisord] > /etc/supervisord.conf \
&& echo nodaemon=true >> /etc/supervisord.conf \
\
&& echo [program:nginx] >> /etc/supervisord.conf \
&& echo command=/etc/init.d/nginx start >> /etc/supervisord.conf \
\
&& echo [program:php-fpm] >> /etc/supervisord.conf \
&& echo command=/etc/init.d/php-fpm start >> /etc/supervisord.conf \
\
&& echo [program:mysqld] >> /etc/supervisord.conf \
&& echo command=/bin/sh /mysql.sh >> /etc/supervisord.conf \
#服务器基础设置
RUN /bin/cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime \
&& echo 'Asia/Shanghai' > /etc/timezonesource \
&& source /etc/profile
EXPOSE 80 3306
CMD ["/usr/bin/supervisord"]