您当前的位置:首页 > 电脑百科 > 程序开发 > 容器

利用docker部署solo并升级为https

时间:2020-08-12 13:02:02  来源:  作者:

前言

这篇文章的内容在大概2周前就已经完成了,但是因为个人懒惰,所以一直没有进行总结和更新记录,大大的罪过啊,今天怎么也要开始重新梳理笔记了,接下来进入正题吧!

之前的博文记录了安装博客系统solo的过程,但是美中不足的是当时使用的是http,没能用上https,后面在学习和实践过程中,将个人博客地址 改成了https,这里记录下其中的关键点。

本篇文章会包含前作的内容,所以前作你可以不看,将这篇文章作为solo的https的参考文章,仅供参考!


最近好好学习了Docker,所以想把线上环境的所有组件替换为Docker部署,对于Solo这个个人博客系统,至少需要部署3个Docker容器。

  1. MySQL
  2. Solo
  3. Nginx

其顺序也是从上到下依次部署最为妥当,Docker部署简单,对初学者而言难其中一个难点就是网络通信,我这里就把各个过程做一个记录。

准备工作

因为部署了3个docker容器,那么他们要互相访问,就不能(更准确来讲"不应该")通过传统的localhost或者127.0.0.1了。

官方也不再建议使用 --link了,那么使用什么了?

官方推荐的是建立一个docker的网络,代码如下所示,其中hicode是我定义的网络名,大家可以改成自己喜欢的:

docker network create -d bridge hicode

后续每一个容器在建立的时候,都应该加入这个网络hicode,然后容器和容器之间就可以通过容器名进行访问了。

MySQL

讲真,这个东西是最浪费时间。在Docker化之前,我服务器上用的是MySQL8,当时就折腾了不少时间,虽然最终也部署起来了,但是后面考虑了下还是放弃了8这个版本,原因主要是如下几点:

  • MySql8的资料相对较少,记录的问题解决方案也比较少,要爬坑很久才能找到解决方案。
  • MySQL8的内存占用和CPU占用有点高,特别是内存占用持续高涨。我的云服务器是捋的腾讯羊毛,当时本来是1核2G的配置,我为了延长使用时间,把服务器配置降级成了1核1G了,所以对于MySql8的内存占用,我的小服务器有点扛不住。
  • 在可以预期的未来,我们公司包括整个行业还是会在5.X居多,所以8.0就留在后面有机会折腾了吧。

部署MySQL 5.X版本的指令如下所示

docker run --name mysql5.7 -p 3306:3306  
--network hicode --privileged=true --restart=always 
-v /lcf/docker-data/mysql5.7/data:/var/lib/mysql 
-v /lcf/docker-data/mysql5.7/conf:/etc/mysql/conf.d 
-e TZ=Asia/Shanghai 
-e MYSQL_ROOT_PASSword=yourpwd -d mysql:5.7.26 
--character-set-server=utf8mb4 --collation-server=utf8mb4_general_ci 
--lower_case_table_names=1 --default-time_zone='+8:00' 

上述命令还是有几个细节的,如下所示:

  • --network hicode是加入之前我们新建的桥接网络hicode
  • --privileged=true 是保证MySQL具有操作外部映射出的文件的权限
  • --restart=always是自动启动,类似Win的自动重启
  • -v /lcf/docker-data/mysql5.7/data:/var/lib/mysql  将mysql的数据映射到磁盘上,避免新建容器后数据丢失。
  • -v /lcf/docker-data/mysql5.7/conf:/etc/mysql/conf.d 将mysql的配置放置在外部磁盘,方便修改
  • -e TZ=Asia/Shanghai 指定mysql的时区为 东八区,也就是我们中国时间
  • -e MYSQL_ROOT_PASSWORD=yourpwd 是需要你自己设置的密码

对于mysql的配置文件,因为我们映射到了外部,所以mysql没有自动创建。如果在不映射外部的情况下,去看看mysql的内部配置文件,你会发现mysql官方帮我们定义了3个配置文件

  • docker.cnf 专门为docker做的优化
  • mysqldump.cnf dump的时候做的优化
  • mysql.cnf 需要你自己定义

当然为了方便我们不需要这么麻烦,我们就合二为一创建一个mysql.cnf就够了,命令如下:

cd /lcf/docker-data/mysql5.7/conf
touch mysql.cnf

然后在mysql.cnf添加如下内容(其实这部你省略也是没有问题的)

[mysql]
# 以下是docker.cnf的内容
skip-host-cache
skip-name-resolve
# 以下是mysqldump.cnf的内容
quick
quote-names
max_allowed_packet  = 16M
# 以下内容如有需要请自己添加

然后重启mysql就行了

docker restart mysql5.7

=============以下步骤Docker安装的MySQL应该是不需要的,默认都可以访问=========如果你需要指定mysql所有ip都访问

docker exec -it mysql5.7 /bin/bash
mysql -h 127.0.0.1 -u root -p 
# 此时要求你输入MySQL密码

# 此处特别注意了,需要你替换'yourpwd'为你的密码
GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY 'yourpwd' WITH GRANT OPTION;
FLUSH PRIVILEGES;

=============以上步骤不需要,默认都可以访问=========

solo

solo的安装注意2个细节即可,我们先看命令:

docker run -d  --restart=always --name solo 
    --network hicode
    --env RUNTIME_DB="MYSQL" 
    --env JDBC_USERNAME="root" 
    --env JDBC_PASSWORD="yourpwd" 
    --env JDBC_DRIVER="com.mysql.jdbc.Driver" 
    --env JDBC_URL="jdbc:mysql://mysql5.7:3306/solo?useUnicode=yes&characterEncoding=UTF-8&useSSL=false&serverTimezone=UTC" 
    b3log/solo --listen_port=8080 --server_scheme=https --server_host=www.hicode.club

细节部分请注意了:

  • --network=hicode加入hicode这个网络
  • --env JDBC_DRIVER="com.mysql.jdbc.Driver" 因为我使用的是MySQL 5.7所以是这样的
  • --env JDBC_PASSWORD="yourpwd"是安装myql时候时候指定的密码
  • --server_host=www.hicode.club 需要你自己修改host
  • --env JDBC_URL="jdbc:mysql://mysql5.7:3306/ 这个地方我写的不是localhost也不是127.0.0.1,而是使用的mysql容器的名称mysql5.7
  • --server_scheme=https 如果要通过https访问,那么此处必须是https

Nginx

证书申请

https相对比http,最核心的一个东西就是证书,证书有免费的也有收费的,我这里介绍下几个免费获取的途径

腾讯云

免费渠道:SSL证书选购 - 腾讯云

利用docker部署solo并升级为https

 

请注意选择域名免费版DV.

然后根据自己的情况进行资料填写。

利用docker部署solo并升级为https

 

接下来就是验证域名归属,只有验证成功后才会给你颁发证书。

如上所示,认证办法通常有2类

  • 修改DNS记录:推荐使用,在DNS提供商(腾讯云、阿里云等)的解析中添加一条txt的值。
  • 文件验证:省略

确定申请后,会出现如下图

利用docker部署solo并升级为https

 

那么在添加txt记录的时候,主机记录和记录值分别做上述添加即可。

具体的流程可以参考:

阿里云

免费渠道:阿里云通用售卖

利用docker部署solo并升级为https

 

FreeSSL

免费渠道:FreeSSL首页 - FreeSSL.cn一个提供免费HTTPS证书申请的网站

视频教程:如何使用 FreeSSL 申请免费证书?

关于证书的100问:FreeSSL 申请证书常见问题 100 问 FAQ?

同时这个网站有大量通俗易懂的文章,推荐新手看看。

其他

Certbot

说明 · acmesh-official/acme.sh Wiki · GitHub

证书下载

当验证了域名归属后,对应的机构就会给你颁发证书了,不同的HTTP服务器,需要不同的证书类型,下面是我在腾讯云申请的证书,默认提供了4类。

利用docker部署solo并升级为https

 

因为我用的是Nginx,所以记录如下:

  • xxx.key 就是你的私钥文件,不要泄漏给别人哦。
  • xxx.crt 是你的证书文件

配置Nginx

在证书下载下来后,接下来就是配置证书和反向代理了。

首先创建nginx的配置文件nginx.conf

cd /lcf/docker-data/nginx/conf
touch nginx.conf

接下来请把2个证书相关的文件移动到nginx.conf的同级目录,然后进行如下配置。

worker_processes 1;
events {
    worker_connections 1024;
}
http {
    include mime.types;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    default_type Application/octet-stream;
    log_format main  '$remote_addr - $remote_user [$time_local] "$request" '
                  '$status $body_bytes_sent "$http_referer" '
                  '"$http_user_agent" "$http_x_forwarded_for" "$request_body"';
    access_log /var/log/nginx/logs/access.log  main;
    sendfile on;
    #开启gzip压缩
    gzip on;
    gzip_disable "MSIE [1-6].";
    gzip_vary on;
    gzip_proxied any;
    gzip_comp_level 6;
    gzip_buffers 16 8k;
    gzip_min_length 256k;
    gzip_types text/plain application/JAVAscript text/css application/json application/x-JavaScript text/xml application/xml text/javascript;
    
    #后端的服务器
    upstream backend {
        server solo:8080 max_fails=3 fail_timeout=30s;
    }
    
    #个人博客
    server {
        # 最新写法,ssl on 的写法已经不推荐了!
        listen 443 ssl;
        server_name hicode.club www.hicode.club;
      	# 证书相关,https新增
        ssl_certificate hicode.club_bundle.crt;
        ssl_certificate_key hicode.club.key;
        ssl_session_timeout 5m;

        access_log /var/log/nginx/logs/hicode/access.log  main;
        location / {
            proxy_pass http://backend$request_uri;
            proxy_set_header Host $host:$server_port;
            proxy_set_header X-Real-IP  $remote_addr;
            proxy_set_header http_x_forwarded_for $remote_addr;
            client_max_body_size 10m;
        }
    }
    server {
        # http跳转到https,这样就只存在http的博客了
        listen 80;
        server_name hicode.club www.hicode.club;
        rewrite ^(.*)$	https://$host$1	permanent;
    }
}

上述内容中有2个server

  • 第一个是 https的配置,关键是其中证书的配置。
  • 第二是http跳转到https的配置。

安装Nginx

然后执行如下命令启动nginx的容器

docker run -p 80:80 -p 443:443 -m 200m --restart always 
 --name nginx --network hicode 
 -v /lcf/docker-data/nginx/www:/www 
 -v /lcf/docker-data/nginx/conf/:/etc/nginx/ 
 -v /lcf/docker-data/nginx/logs:/var/log/nginx/logs 
 -v /lcf/docker-data/nginx/wwwlogs:/wwwlogs 
 nginx
  • 相比于单纯的http,多一个443的端口映射。

其他

基本上,按照上面操作,就可以搞定了,docker用好了,很方便,因为一行指令搞定的时候,不需要再折腾环境了。

有朋友担心资源占用的问题,这里我截图,给大家看看情况:

利用docker部署solo并升级为https

 

好了,差不多写到这里,有问题,欢迎留言。

最后归纳下同http部署方式的不同:

  • 申请证书
  • solo指定为https
  • nginx多映射一个443端口

如果本文对你有帮助,欢迎评论、点赞、转发、收藏、关注!本文原创于程序猿猩球,转载请注明出处~



Tags:docker solo   点击:()  评论:()
声明:本站部分内容及图片来自互联网,转载是出于传递更多信息之目的,内容观点仅代表作者本人,如有任何标注错误或版权侵犯请与我们联系(Email:2595517585@qq.com),我们将及时更正、删除,谢谢。
▌相关推荐
前言这篇文章的内容在大概2周前就已经完成了,但是因为个人懒惰,所以一直没有进行总结和更新记录,大大的罪过啊,今天怎么也要开始重新梳理笔记了,接下来进入正题吧!之前的博文记录...【详细内容】
2020-08-12  Tags: docker solo  点击:(88)  评论:(0)  加入收藏
▌简易百科推荐
一、为什么要搭建主从架构呢1.数据安全,可以进行数据的备份。2.读写分离,大部分的业务系统来说都是读数据多,写数据少,当访问压力过大时,可以把读请求给到从服务器。从而缓解数据...【详细内容】
2021-12-15  实战Java    Tags:Docker   点击:(10)  评论:(0)  加入收藏
在网页中渲染公式一直是泛学术工具绕不开的一个功能,最近更新产品功能,正巧遇到了这个需求,于是使用容器方式简单实现了一个相对靠谱的公式渲染服务。分享出来,希望能够帮到有类...【详细内容】
2021-12-01  编程菌zfn    Tags:Docker   点击:(10)  评论:(0)  加入收藏
1.1 docker命令直接部署1.1.1 拉取镜像docker pull wurstmeister/zookeeperdocker pull wurstmeister/kafka1.1.2 启动zookeeper容器docker run -d --name myzookeeper -p 2...【详细内容】
2021-11-15  无    Tags:docker   点击:(47)  评论:(0)  加入收藏
01 前言 顺着docker的发展,很多测试的同学也已经在测试工作上使用docker作为环境基础去进行一些自动化测试,这篇文章主要讲述我们在docker中使用浏览器进行自动化测试如果可以...【详细内容】
2021-10-29  小码哥聊软件测试    Tags:Docker   点击:(42)  评论:(0)  加入收藏
因为你懂得的原因,下载docker镜像速度非常喜感,故收集几个国内常用的docker镜像。Docker中国区官方镜像地址:https://registry.docker-cn.com网易163的镜像http://hub-mirror.c...【详细内容】
2021-10-28  抓蛙程序猿    Tags:docker   点击:(48)  评论:(0)  加入收藏
环境:Spring5.3.10通常,应用程序开发人员不需要对ApplicationContext实现类进行子类化。相反,SpringIOC容器可以通过插入特殊集成接口的实现来扩展。使用BeanPostProcessor自定...【详细内容】
2021-10-26  Java网络研发架构师    Tags:Spring   点击:(33)  评论:(0)  加入收藏
我们在很多场景下都需要做笔记,来对抗遗忘,一份好的笔记不仅能在需要的时候供我们查阅,也能帮助我们归纳整理知识提高做事效率。 目前市面上有很多云笔记软件,体验上各有不同,但...【详细内容】
2021-10-11  运维贼船    Tags:docker   点击:(61)  评论:(0)  加入收藏
1. Nacos官网Nacos Docker 快速开始2. Clone 项目git clone https://github.com/nacos-group/nacos-docker.git3. cd 到nacos-docker 路径下 直接启动即可cd nacos-dockerdo...【详细内容】
2021-09-16  程序狗爱化妆    Tags:Nacos   点击:(109)  评论:(0)  加入收藏
今天不做保姆级教程,分享奶爸常用、好用的Docker应用。有了这些Docker,Nas的可玩性会大幅提高,有时候奶爸也在想,刨去官方套件不考虑的话,Nas真的是差不多。如果小伙伴们有需要,后...【详细内容】
2021-09-03  晋升奶爸的垃圾佬    Tags:Docker   点击:(167)  评论:(0)  加入收藏
环境要求 ubuntu系统:20.04 docker版本:20.10.7 redis版本:6.0.6步骤由于我这里已经有相应的redis镜像,这里就不记录了,关于docker一些基础知识可以看我以前的笔记开启3台re...【详细内容】
2021-07-26  石老师小跟班    Tags:Redis主从复制   点击:(117)  评论:(0)  加入收藏
最新更新
栏目热门
栏目头条