美文网首页
Docker_5_2_搭建react+mariadb

Docker_5_2_搭建react+mariadb

作者: zestloveheart | 来源:发表于2019-05-02 19:57 被阅读0次

    Introduction

    在上一部分已经搭建了flask环境,这一部分继续搭建react和mariadb部分。在下一篇使用docker-compose将多个部分完全整合。

    搭建react

    部署react的思路是先搭建一个nginx服务器,然后将react的页面部署到nginx存放页面的文件夹里面,以此通过nginx访问react。

    先搭建nginx

    参考:https://www.cnblogs.com/wwzyy/p/8337965.html

    运行nginx

    • 拉取镜像:docker pull nginx
    • 运行:docker run -d -p 8084:80 nginx
    • 浏览器访问:localhost:8084

    映射页面文件

    • 先将html页面写好,放在路径dir下
    • 运行:docker run -d -p 8084:80 -v dir:/usr/share/nginx/html
    • 相当于把dir中的页面文件映射到了nginx容器内的html中,用类似的方法就可以把react页面映射到nginx容器中。

    react发布到nginx

    参考:
    https://zhuanlan.zhihu.com/p/37360191
    https://segmentfault.com/a/1190000010415158

    我们是用Facebook官方的零配置命令行工具 create-react-app 创建的项目,create-react-app 内置了打包的npm 命令

    在命令行里切换到项目目录,执行 npm run build 命令,代码会被编译到build目录。将整个应用打包发布,自动使用webpack进行压缩与优化。
    把打包好的build文件夹映射到容器内的html文件夹

    默认的nginx配置有个问题,在非首页的路由页面刷新就会报404错误。
    参考:
    http://www.nphard.me/2016/03/07/nginx-for-react/
    https://blog.csdn.net/y2010081134/article/details/87691263
    react-router介绍

    我们使用react-router作为路由管理,在开发端的express服务器下运行和测试表现均正常,部署到线上的nginx服务器后,还需要对该应用在nginx的配置里作相应调整,否则浏览器将不能正常刷新,表现为页面不显示或页面跳转错误等异常。原因在于这些react应用在运行时会更改浏览器uri而又不真的希望服务器对这些uri去作响应,如果此时刷新浏览器,服务器收到浏览器发来的uri就去寻找资源,这个uri在服务器上是没有对应资源,结果服务器因找不到资源就发送403错误标志给浏览器。所以,我们要做的调整是:浏览器在使用这个react应用期间,无论uri更改与否,服务器都发回index.html这个页面就行。

    创建nginx.conf文件

    # gzip设置
    gzip on;
    gzip_vary on;
    
    gzip_comp_level 6;
    gzip_buffers 16 8k;
    
    gzip_min_length 1000;
    gzip_proxied any;
    gzip_disable "msie6";
    #gzip_http_version 1.0;
    gzip_types text/plain text/css application/json application/x-javascript text/xml application/xml application/xml+rss text/javascript application/javascript;
    
    server {
        listen       80;
        server_name  localhost;
    
        #access_log  /var/log/nginx/host.access.log  main;
    
        location / {
            root   /usr/share/nginx/html;
            index  index.html index.htm;
            # 其作用是按顺序检查文件是否存在,返回第一个找到的文件或文件夹(结尾加斜线表示为文件夹),如果所有的文件或文件夹都找不到,会进行一个内部重定向到最后一个参数。
            try_files $uri /index.html;
        }
    
        location ~* html {
            rewrite .* /index.html break;
            root /home/hard/Project/game/web-client/build/html/;
        }
        #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;
        }
    }
    

    mariadb

    总共4行命令搭建并验证,详情请见Docker_3_搭建WordPress+mariadb

    # 启动mariadb
    docker run -dit --name mariadb_wordpress -e MYSQL_ROOT_PASSWORD=123456 -p 33060:3306 mariadb
    # 进容器测试
    docker exec -it mariadb_wordpress bash
    mysql -u root -p
    # 输入密码:
    123456
    # 成功登陆
    

    备份和恢复

    #备份Docker MySQL
    docker exec CONTAINER /usr/bin/mysqldump -u username --password=xxx DATABASE > backup.sql
    #从sql文件恢复到Docker MySQL
    cat backup.sql | docker exec -i CONTAINER /usr/bin/mysql -u username --password=xxx DATABASE
    

    编写yml文件

    version : '3'
    services:
      nginx:
        # 镜像:版本
        image: nginx:latest 
        # 映射容器80端口到本地80端口
        ports:
         - "80:80"
        # 数据卷 映射本地文件到容器
        volumes:
        # 映射nginx.conf文件到容器的/etc/nginx/conf.d目录并覆盖default.conf文件
        # - ./nginx.conf:/etc/nginx/conf.d/default.conf
        # 映射build文件夹到容器的/usr/share/nginx/html文件夹
         - ./build:/usr/share/nginx/html
        # 覆盖容器启动后默认执行的命令。
        command: /bin/bash -c "nginx -g 'daemon off;'"
        links:
          - db:mariadb
      db:
        image: mariadb:latest
        ports:
          - "33066:3306"
        environment:
          - MYSQL_ROOT_PASSWORD=123456
          - MYSQL_DATABASE=project_echo
    

    其他教程

    相关文章

      网友评论

          本文标题:Docker_5_2_搭建react+mariadb

          本文链接:https://www.haomeiwen.com/subject/fwmnnqtx.html