Debain10 系统安装 Docker 并部署 MySQL+solo+Nginx

本贴最后更新于 1947 天前,其中的信息可能已经东海扬尘

Debain10 系统安装 Docker 并部署 MySQL+solo+Nginx

Debain9 开启 bbr

网路颠簸,尤其是晚高峰的时候,我们访问国外的服务器难免会出现速度缓慢的问题,如果我们的服务器为 Linux 系统,好在 Debian 9 系统内核版本为 4.9.x,其内核自带了由 Google 开发的 BBR 拥塞算法,我们能很方便的开启 BBR 进行访问加速。

Debian 9(10)系统开启 Google BBR 拥塞控制算法方法

首先,先说一下开启方法。其实开启很简单,只需要三行命令即可:

$ echo "net.core.default_qdisc=fq" >> /etc/sysctl.conf
$ echo "net.ipv4.tcp_congestion_control=bbr" >> /etc/sysctl.conf
$ sysctl -p

如果正常执行之后没有报错的话,需要重启一下系统,让配置生效。

重启之后,执行如下命令查看配置是否成功生效:

$ lsmod | grep bbr
# tcp_bbr                20480  0

如果有如上类似输出,则证明 Google BBR 配置成功了。

打开防火墙 ufw

# 安装
$ apt install ufw
# 设置防火墙规则
$ ufw default deny incoming
$ ufw default allow outgoing
# 允许ssh端口
$ ufw allow ssh
# 开启端口
$ ufw allow 3306

# 查看ufw状态,活动中的话会列出所有开放的端口
$ ufw status
# 删除开放的端口
$ ufw delete 数字(ufw status列出的规则行号)
# 重启
$ ufw reload

安装 docker

参考

# 在安装Docker之前, 需要添加Docker的私有仓库。安装必要的依赖包:
$ sudo apt update
$ sudo apt install apt-transport-https ca-certificates curl software-properties-common gnupg2
# 导入Docker仓库的GPG key
$ curl -fsSL https://download.docker.com/linux/debian/gpg | sudo apt-key add -
# 添加Docker稳定版仓库到debian系统仓库中
$ sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/debian $(lsb_release -cs) stable"
# 更新仓库信息, 安装 Docker 社区版本
$ sudo apt update
$ sudo apt install docker-ce
# 一旦安装完成, Docker 服务将自动启动, 使用服务管理工具来查看其状态
$ sudo systemctl status docker
# 检查下安装的Docker版本
$ sudo docker -v
# 检查docker内置网络
$ docker network ls

docker 部署 MySQL

$ docker pull mysql
# 安装启动前先创建对应的挂载文件夹 ***/mysql8/data 和 ***/mysql8/conf, 然后去docker的image文件中找到my.cnf 文件拷贝到创建的conf文件夹下
# 这里指定了mysql8 加入 bridge 的网络,其它需要使用这个mysql的应用也要加入这个网络
$ find / -name my.cnf
# docker-mysql
docker stop mysql8
docker rm mysql8
docker run --name mysql8 -p 3306:3306  \
--network bridge --privileged=true --restart=always \
-v /usr/local/mysql8/data:/var/lib/mysql \
-v /usr/local/mysql8/conf:/etc/mysql/conf.d/ \
-e TZ=Asia/Shanghai \
-e MYSQL_ROOT_PASSWORD=password -d mysql \
--character-set-server=utf8mb4 --collation-server=utf8mb4_general_ci \
--lower_case_table_names=1 --default-time_zone='+8:00' 

# 这样就可以直接使用root账户远程连接了
# 想要创建新账户就进到docker里的mysql应用
$ docker exec -it mysql8 bash

# 创建数据库
create database solo default charset utf8mb4 collate utf8mb4_general_ci;
# 创建专有用户并授权
create user 'solo'@'%' identified by 'userpassword';
grant select,insert,update,references,delete,create,drop,alter,index,create view,show view on solo.* to 'solo'@'%';
# 或者赋予所有权限
grant all on solo.* to 'solo'@'%';
flush privileges;

docker 部署 solo

#!/bin/bash
#
# Solo docker 更新重启脚本
#
# 1. 请注意修改参数
# 2. 可将该脚本加入 crontab,每日凌晨运行来实现自动更新
#

docker pull b3log/solo
docker stop solo
docker rm solo
docker run --detach --name solo -p 8080:8080 \
           --network=bridge \
	   			 --env RUNTIME_DB="MYSQL" \
	   			 --env JDBC_USERNAME="solo" \
	   			 --env JDBC_PASSWORD="password" \
	  			 --env JDBC_DRIVER="com.mysql.cj.jdbc.Driver" \
	  			 --env JDBC_URL="jdbc:mysql://172.17.0.2:3306/solo?useUnicode=yes&characterEncoding=UTF-8&useSSL=false&serverTimezone=UTC&allowPublicKeyRetrieval=true" \
	   			 b3log/solo --server_scheme=http --server_host=www.zhuht.xyz 

# JDBC_DRIVER 驱动需要根据mysql版本自行确定  
# JDBC_URL 中使用了容器内分配的ip地址(使用inspect查看),也有说可以使用容器名(mysql8)来做地址,但是我试的时候总是不行
# --server_host 有域名的话就设置成域名,不然域名访问solo时,会出现主页地址是域名,子页面地址是ip开头的问题
$ docker inspect mysql8

# solo部署后有时候启动不了,查看日志发现报了 Public Key Retrieval is not allowed错误,晚上搜了一下,在JDBC_URL后加了 &&allowPublicKeyRetrieval=true 解决
$ docker logs solo 

docker 部署 Nginx

$ docker pull nginx
# 先创建一个nginx.conf,我这个是直接从nginx的镜像文件里拷出来的,然后在http增加了solo的配置
# 可以直接搜一下这个文件
$ find / -name nginx.conf

# 查到后
user  nginx;
worker_processes  1;

error_log  /var/log/nginx/error.log warn;
pid        /var/run/nginx.pid;
events {
    worker_connections  1024;
}

http {
    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"';

    access_log  /var/log/nginx/access.log  main;
    sendfile        on;
    #tcp_nopush     on;
    keepalive_timeout  65;
    #gzip  on;
    include /etc/nginx/conf.d/*.conf;
    
    # solo
    upstream backend {
        server 172.17.0.3:8080; # Solo 监听端口
    }

    server {
        listen       80;
        server_name  www.zhuht.xyz; # 博客域名
        access_log /var/log/nginx/logs/solo/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;
            client_max_body_size  10m;
        }
    }
}


# docker 启动nginx
docker run -p 80:80 -m 200m --restart always \
 --name nginx --network bridge \
 -v /usr/local/nginx/conf/:/etc/nginx/ \
 -v /usr/local/nginx/logs:/var/log/nginx/logs \
 nginx


docker 部署 v2ray

# 需要先写一个配置文件,通过docker启动时 -config参数使用(懒得写或者不会写的话可以直接本地安装,在 /etc/v2ray下回自动创建config.json,这个是可以直接拿来用的)
docker pull v2ray/official
docker stop v2ray
docker rm v2ray
docker run -d --name v2ray \
	-v /etc/v2ray:/etc/v2ray -p 25059:25059 v2ray/official  v2ray \
	-config=/etc/v2ray/config.json
	
# docker端口与配置文件中的保持一致

不使用 docker 直接安装应用

​ 由于这次用了 Debian10 系统,与原来用的 CentOS7 不一样,所以安装是也不一样

安装 v2ray

#修改服务器时区(可不修改,v2ray会自动计算时区,只要保证时间差就行)
$ rm -rf /etc/localtime
$ ln -s /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
# 下载脚本并执行
$ wget https://install.direct/go.sh
$ bash go.sh
# 启动服务
$ systemctl start v2ray
# 开启对应端口

安装 MySQL

参考

$ apt update
$ apt install gnupg
# 找个文件夹存放要下载的文件,然后去MySQL官网找到deb文件的下载地址
$ wget https://dev.mysql.com/get/mysql-apt-config_0.8.13-1_all.deb
# 开始安装
$ dpkg -i mysql-apt-config*
$ apt update
$ apt install mysql-server

参考:

[利用 docker 部署 solo 全套:MySQL+Nginx+Solo](https://hacpai.com/article/1556265895068)

  • Debian
    14 引用 • 4 回帖 • 1 关注
  • Docker

    Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的操作系统上。容器完全使用沙箱机制,几乎没有性能开销,可以很容易地在机器和数据中心中运行。

    492 引用 • 927 回帖
  • Solo

    Solo 是一款小而美的开源博客系统,专为程序员设计。Solo 有着非常活跃的社区,可将文章作为帖子推送到社区,来自社区的回帖将作为博客评论进行联动(具体细节请浏览 B3log 构思 - 分布式社区网络)。

    这是一种全新的网络社区体验,让热爱记录和分享的你不再感到孤单!

    1436 引用 • 10056 回帖 • 489 关注
  • MySQL

    MySQL 是一个关系型数据库管理系统,由瑞典 MySQL AB 公司开发,目前属于 Oracle 公司。MySQL 是最流行的关系型数据库管理系统之一。

    692 引用 • 535 回帖

相关帖子

欢迎来到这里!

我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。

注册 关于
请输入回帖内容 ...