LNMP动态网站部署架构是一套由Linux + Nginx + MySQL + PHP组成的动态网站系统解决方案(其各自的Logo见图20-1)。LNMP中的字母L是Linux系统的意思,不仅可以是RHEL、CentOS、Fedora,还可以是Debian、Ubuntu等系统。
架构:创建两个容器,一个容器跑nginx+PHP,一个容器跑mysql,网站数据和数据库数据都存放在宿主机上。在nginx上跑一个wordpress,用于博客网站的架设。
安装方式
mysql就使用我们上一节中创建好的镜像来实现;
nginx使用yum安装;
PHP通过使用源码包生成rpm安装包,再进行安装;
wordpress只需要将安装包拷贝到nginx目录下即可。
1)Centos 8 dnf源
wgethttps://mirrors.aliyun.com/repo/Centos-vault-8.5.2111.repo
wget https://www.php.net/distributions/php-7.4.28.tar.gz
3)wordpress 安装包
wget https://cn.wordpress.org/latest-zh_CN.tar.gz
server {
listen 80 default_server;
listen [::]:80 default_server;
server_name _;
root /usr/share/nginx/html;
# Load configuration files for the default server block.
include /etc/nginx/default.d/*.conf;
#以下部分是定义根目录,和index文件
location / {
root html;
index index.php index.html index.htm;
}
#以下部分红色字体是用于nginx和php模块的连接
location ~ \.php$ {
root html;
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME /usr/share/nginx/html$fastcgi_script_name;
include fastcgi_params;
}
location = /favicon.ico {
log_not_found off;
access_log off;
}
error_page 404 /404.html;
location = /40x.html {
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
}
}
vim dockerfile-lnmp
FROM centos:latest#定义镜像来源基础包
LABEL auto build lnmp #定义一个镜像标签
EXPOSE 80#定义开放的端口号
COPY ./Centos-vault-8.5.2111.repo /tmp/Centos-vault-8.5.2111.repo#将国内yum源文件拷入镜像
COPY ./lnmp_entrypoint.sh /root/lnmp_entrypoint.sh#将容器启动脚本拷入镜像
COPY ./nginx.conf /tmp/nginx.conf #将nginx配置文件拷入镜像
COPY ./php7.4/php-7.4.28.tar.gz /tmp/php-7.4.28.tar.gz#将PHP源码包拷入镜像
COPY ./wordpress/latest-zh_CN.tar.gz /tmp/latest-zh_CN.tar.gz#将wordpress源码包拷入镜像
RUN chmod 755 /root/lnmp_entrypoint.sh \#将启动脚本设为可执行
&& ln -s /root/lnmp_entrypoint.sh /usr/bin/lnmp_entrypoint.sh \#将启动脚本软链接到系统目录
&& rm -rf /etc/yum.repos.d/* \#删除原有yum源
&& mv /tmp/Centos-vault-8.5.2111.repo /etc/yum.repos.d/ \#将国内yum源文件拷到yum配置目录
&& dnf makecache \ #重建yum缓存
&& dnf install 'dnf-command(config-manager)' -y\ #安装dnf插件
&& dnf config-manager --set-enabled PowerTools -y\#开启PowerTools
&& dnf makecache #重建yum缓存
RUN dnf install gcc libxml2-devel sqlite-devel libcurl-devel oniguruma-devel make -y \#安装依赖包
&& dnf install nginx -y \#安装nginx
&& rm -rf /var/cache/yum/* #清除yum缓存
RUN cd /tmp \
&& tar -xzf php-7.4.28.tar.gz \#解压缩php源码包
&& cd /tmp/php-7.4.28 \
&& ./configure --prefix=/usr/local/php --enable-fpm --with-mysqli --with-curl --with-pdo_mysql --with-pdo_sqlite --enable-mysqlnd --enable-mbstring \ #配置PHP编译环境
&& make install \#编译及安装PHP
&& ln -s /usr/local/php/sbin/php-fpm /usr/sbin/php-fpm \#软链接php启动程序到系统目录
&& cp /tmp/php-7.4.28/php.ini-development /usr/local/php/lib/php.ini \#生成php配置文件1:php.ini
&& mv /usr/local/php/etc/php-fpm.conf.default /usr/local/php/etc/php-fpm.conf \ #生成php配置文件2:php-fpm.conf
&& mv /usr/local/php/etc/php-fpm.d/www.conf.default /usr/local/php/etc/php-fpm.d/www.conf#生成php配置文件3:www.conf
RUN rm -f /etc/nginx/nginx.conf \#删除原有nginx配置文件
&& mv /tmp/nginx.conf /etc/nginx/ \#将配置好的nginx文件拷贝到nginx配置目录
&& rm -rf /usr/share/nginx/html/* \ #删除原有nginx html文件
&& cd /tmp \
&& tar -xzf latest-zh_CN.tar.gz \#解压缩wordpress源码包
&& rm -r latest-zh_CN.tar.gz #删除wordpress源码包
CMD lnmp_entrypoint.sh;sleep infinity#执行启动脚本,并让启动脚本常驻内存。
vim lnmp_entrypoint
#!/bin/bash
mv /tmp/wordpress/* /usr/share/nginx/html/#将wordpress文件移入nginx html目录
cp /usr/share/nginx/html/wp-config-sample.php /usr/share/nginx/html/wp-config.php
#生成wordpress配置文件:wp-config.php
chown -R nginx:nginx /usr/share/nginx #设置nginx目录的拥有者为nginx用户
sed -i "s/database_name_here/$DATABASE_NAME/g" /usr/share/nginx/html/wp-config.php
#配置wp-config.php中的数据库名称为变量$DATABASE_NAME的值,此变量的值在创建容器时由用户自定义。
sed -i "s/username_here/$DATABASE_USER/g" /usr/share/nginx/html/wp-config.php
#配置wp-config.php中的数据库用户名为变量$DATABASE_USER的值,此变量的值在创建容器时由用户自定义。
sed -i "s/password_here/$DATABASE_PASSWORD/g" /usr/share/nginx/html/wp-config.php
#配置wp-config.php中的数据库密码为变量$DATABASE_PASSWORD的值,此变量的值在创建容器时由用户自定义。
sed -i "s/localhost/$DATABASE_ADDRESS/g" /usr/share/nginx/html/wp-config.php
#配置wp-config.php中的数据库地址为变量$DATABASE_ADDRESS的值,此变量的值在创建容器时由用户自定义。
php-fpm#启动php服务
nginx #启动nginx服务
在dockerfile文件的目录中执行以下命令:
docker build -t lnmp -f dockerfile-lnmp .#使用dockerfile-lnmp这个dockerfile来创建一个名为lnmp的镜像
在4.3小节里创建好的mysql容器中,创建一个名为wordpress的数据库。
mysql -h 172.17.0.5 -u root –p #进入mysql系统,命令的中IP地址,是mysql容器的地址。
创建一个数据库
create database wordpress;
使用“show databases;”命令查看数据库是否已创建成功;
docker run -d \
> --name lnmp \ #定义容器名称
> --hostname lnmp \#定义容器系统主机名
> -p 80:80 \#将宿主机的80端口映射到容器的80端口
> -e DATABASE_NAME='wordpress' \#定义DATABASE_NAME变量,此变量将被带入容器,并通过lnmp_entrypoint.sh启动脚本写入wordpress的配置文件中,作为wordpress使用的数据库名称。
> -e DATABASE_USER='root' \#定义DATABASE_USER变量,此变量将被带入容器,并通过lnmp_entrypoint.sh启动脚本写入wordpress的配置文件中,作为wordpress使用的数据库用户名。
> -e DATABASE_PASSWORD='123qweASD!@#' \#定义DATABASE_PASSWORD变量,此变量将被带入容器,并通过lnmp_entrypoint.sh启动脚本写入wordpress的配置文件中,作为wordpress使用的数据库密码。
> -e DATABASE_ADDRESS='172.17.0.5' \#定义DATABASE_ADDRESS变量,此变量将被带入容器,并通过lnmp_entrypoint.sh启动脚本写入wordpress的配置文件中,作为wordpress使用的数据库地址。
> -v /root/dockerlab/lnmp/html:/usr/share/nginx/html \#将主机中的一个目录映射到容器中的nginx html目录,作为wordpress的数据目录
> lnmp:latest#使用的镜像名称(就是4.4.5中创建的镜像)
容器创建成功,并已正常运行。
通过web浏览器连接打开wordpress的配置页面,进行配置
http://192.168.0.197/wp-admin/setup-config.php #这边的ip地址是宿主机的ip
输入一些基本信息后,点击安装”wordpress”
安装成功,登录系统。
这样我们就成功地在容器中安装好了wordpress。
wordpress的具体配置和应用,不在我们的教程范围之内,大家有兴趣的话,可以去参考相关的资料。