欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

docker-compose部署nginx代理tomcat集群实现负载均衡与部署lnmp+discuz

程序员文章站 2022-06-07 08:47:49
...

nginx代理tomcat集群实现负载均衡

目录结构

[aaa@qq.com my-composetest]# tree
.
├── docker-compose.yml
├── etc
│   └── localtime						##时区文件
├── nginx
│   └── default.conf					##nginx配置文件
├── tomcat
│   ├── apache-tomcat-8.5.56.tar.gz		##tomca压缩包
│   ├── Dockerfile						##构建镜像文件
│   └── jdk-8u251-linux-x64.tar.gz		##jdk压缩包
└── webserver
    ├── tomcat1
    │   └── index.jsp					##网页文件
    └── tomcat2
        └── index.jsp					##网页文件

构建tomcat镜像

jdk下载网址:https://www.oracle.com/java/technologies/javase-jdk14-downloads.html
官方网址需要注册

tomcat下载地址(wget):https://mirrors.aliyun.com/apache/tomcat/tomcat-8/v8.5.56/bin/apache-tomcat-8.5.56.tar.gz

cat tomcat/Dockerfile 

FROM centos7
ADD jdk-8u251-linux-x64.tar.gz /usr/local/			##复制并解压压缩包到容器
ENV JAVA_HOME /usr/local/jdk1.8.0_251/				##设置java环境变量
ADD apache-tomcat-8.5.56.tar.gz /usr/local/
EXPOSE 8080											##开放端口
ENTRYPOINT ["/usr/local/apache-tomcat-8.5.56/bin/catalina.sh","run"]
##前台运行tomcat脚本

nginx配置文件

cat nginx/default.conf

upstream webserver {
server tomcat1:8080;
server tomcat2:8080;
}
server {
    listen       80;
    server_name  localhost;

    #charset koi8-r;
    #access_log  /var/log/nginx/host.access.log  main;

    location / {
        proxy_pass http://webserver;
    }
}

时区文件

[aaa@qq.com my-composetest]# cp /usr/share/zoneinfo/Asia/Shanghai etc/localtime

网页文件

[aaa@qq.com my-composetest]# cat webserver/tomcat1/index.jsp 
<%
out.println("this is tomcat1");
%>

[aaa@qq.com my-composetest]# cat webserver/tomcat2/index.jsp 
<%
out.println("this is tomcat2");
%>

docker-compose.yml

version: "3"
services:
  nginx:
    image: nginx
    restart: always
    ports:
      - 80:80
    links:					##links方式连接tomcat
      - tomcat1:tomcat1
      - tomcat2:tomcat2
    volumes:
      - ./etc/localtime:/etc/localtime		##挂载时区文件
      - ./nginx/default.conf:/etc/nginx/conf.d/default.conf		##挂载nginx配置文件
    depends_on:				##设置依赖,启动顺序
      - tomcat1
      - tomcat2
  tomcat1:
    hostname: tomcat1
    build: ./tomcat				##Dockerfile路径
    volumes:					##挂载时区跟网页路径
      - ./webserver/tomcat1:/usr/local/apache-tomcat-8.5.56/webapps/ROOT
      - ./etc/localtime:/etc/localtime
  tomcat2:
    hostname: tomcat2
    build: ./tomcat
    volumes:
      - ./webserver/tomcat2:/usr/local/apache-tomcat-8.5.56/webapps/ROOT
      - ./etc/localtime:/etc/localtime

启动并访问验证

docker-compose up -d
Building tomcat1
Step 1/6 : FROM centos7
 ---> f9c9fbed3702
Step 2/6 : ADD jdk-8u251-linux-x64.tar.gz /usr/local/
 ---> 591d5b98b6ed
Step 3/6 : ENV JAVA_HOME /usr/local/jdk1.8.0_251/
 ---> Running in 2cac20cececf
Removing intermediate container 2cac20cececf
 ---> de15c462828d
Step 4/6 : ADD apache-tomcat-8.5.56.tar.gz /usr/local/
 ---> 2c8e1de42336
Step 5/6 : EXPOSE 8080
 ---> Running in 54bc2ad953af
Removing intermediate container 54bc2ad953af
 ---> d4c2974a3704
Step 6/6 : ENTRYPOINT ["/usr/local/apache-tomcat-8.5.56/bin/catalina.sh","run"]
 ---> Running in 01bf136b66f5
Removing intermediate container 01bf136b66f5
 ---> 73373fdb1edb
Successfully built 73373fdb1edb
Successfully tagged my-composetest_tomcat1:latest
................

Creating my-composetest_tomcat1_1 ... done
Creating my-composetest_tomcat2_1 ... done
Creating my-composetest_nginx_1   ... done


curl 192.168.1.10
this is tomcat1

curl 192.168.1.10
this is tomcat2

lnmp+Discuz

准备工作

创建文件夹

mkdir lnmp-compose
mkdir lnmp-compose/webserver
mkdir lnmp-compose/nginx
mkdir -p lnmp-compose/mysql/data
cd lnmp-compose

nginx配置文件

vim nginx/default.conf


server {
listen       80;
server_name  localhost;

#charset koi8-r;
#access_log  /var/log/nginx/host.access.log  main;

location / {
    root   /webserver;						##网页目录 等下安装discuz时创建
    index  index.php index.html index.htm;
}

#error_page  404              /404.html;

# redirect server error pages to the static page /50x.html
#
error_page   500 502 503 504  /50x.html;
location = /50x.html {
    root   /usr/share/nginx/html;
}

# proxy the PHP scripts to Apache listening on 127.0.0.1:80
#
#location ~ \.php$ {
#    proxy_pass   http://127.0.0.1;
#}

# pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
#
location ~ \.php$ {									##开启php
    fastcgi_pass   php:9000;						##指定主机名和端口
    fastcgi_index  index.php;
    fastcgi_param  SCRIPT_FILENAME  /webserver$fastcgi_script_name;		##此处改成网页目录
    include        fastcgi_params;
}

# deny access to .htaccess files, if Apache's document root
# concurs with nginx's one
#
#location ~ /\.ht {
#    deny  all;
#}
}

php镜像

由于php官方镜像编译的问题,导致php不支持以mysqli的方式与mysql的连接,需要对镜像进行扩展

 FROM  php:5.6-fpm
 RUN apt-get update && apt-get install -y \
 libfreetype6-dev \
 libjpeg62-turbo-dev \
 libpng12*-dev \
 vim \
 && docker-php-ext-install pdo_mysql mysqli \
 && docker-php-ext-configure gd --with-freetype-dir=/usr/include/ --with-jpeg-dir=/usr/include/ \
 && docker-php-ext-install gd

docker build -t="php-fpm5.6/v2" ./    ##构建新的镜像

discuz

##下载
wget http://download.comsenz.com/DiscuzX/3.3/Discuz_X3.3_SC_GBK.zip

##解压
unzip Discuz_X3.3_SC_GBK.zip

##复制upload到webserver
cp -rf /root/upload/* webserver/

##权限
chmod 777 -R webserver

docker-compose.yml

cat docker-compose.yml

version: "3"
services:
  nginx:
    image: nginx
    ports:
      - 80:80
    volumes:
      - ./webserver:/webserver				##挂载网页目录
      - ./nginx/default.conf:/etc/nginx/conf.d/default.conf 		##挂载配置文件
    depends_on:
      - php
    links:				##连接容器
      - php
    environment:		##时区
      - TZ=Asia/Shanghai
  php:
    image: php-fpm5.6/v2
    ports:
      - 9000:9000
    volumes:
      - ./webserver:/webserver		##挂载网页目录
    links:							##链接容器
      - mysql
    depends_on:
      - mysql
    environment:
      - TZ=Asia/Shanghai
  mysql:
    image: mysql:5.7
    ports:
      - 3306:3306
    environment:
      - TZ=Asia/Shanghai
    volumes:						##此处挂载会自动把容器内的文件复制出来
      - ./mysql/data:/var/lib/mysql
    environment:					##传入mysql登录密码
      - MYSQL_ROOT_PASSWORD=123456

启动并验证

docker-compose up -d
docker-compose up -d
Creating lnmp-compose_mysql_1 ... done
Creating lnmp-compose_php_1   ... done
Creating lnmp-compose_nginx_1 ... done

docker-compose ps
    Name                      Command              State                 Ports              
------------------------------------------------------------------------------------------------
lnmp-compose_mysql_1   docker-entrypoint.sh mysqld     Up      0.0.0.0:3306->3306/tcp, 33060/tcp
lnmp-compose_nginx_1   nginx -g daemon off;            Up      0.0.0.0:80->80/tcp               
lnmp-compose_php_1     docker-php-entrypoint php-fpm   Up      0.0.0.0:9000->9000/tcp           


##访问ip/install 一直下一步到第三步

输入数据库密码 设置管理员密码
docker-compose部署nginx代理tomcat集群实现负载均衡与部署lnmp+discuz
安装成功
docker-compose部署nginx代理tomcat集群实现负载均衡与部署lnmp+discuz

docker-compose部署nginx代理tomcat集群实现负载均衡与部署lnmp+discuz

相关标签: docker