LinuxEnvDep
LinuxEnvDep
以前碰过 Redis 没设密码被挖矿,现在设成简单密码依旧。。。
1.基础环境
1.1.Docker
实测用idea操作Docker比用 xshell 舒服太多了!!!
理解成 Linux 和 Docker容器(可以理解为一个完整的Linux【容器的 bin/bash 里没有 wget,外面 linux有】)是隔离的,所以需要端口映射、目录挂载!!!
一个镜像可以创建多个容器
容器可 --restart=always
当你在Docker容器中进行文件挂载时,宿主机必须存在这个文件 实测目录不用会自己新建
curl -fsSL https://get.docker.com | bash -s docker --mirror Aliyun
systemctl start docker
docker search jdk
为了永久性保留更改,您可以修改 /etc/docker/daemon.json
文件并添加上 registry-mirrors 键值。
{
"registry-mirrors": ["https://registry.docker-cn.com","https://pee6w651.mirror.aliyuncs.com"]
}
修改保存后重启 Docker 以使配置生效。
systemctl restart docker
1.2.JAVA
拉取指定的版本
docker pull java:8
运行上面拉去的镜像成容器
docker run -d -it --name java java:8
【必须加 -it 否则STATUS为Exited】
-d
:(daemon) 守护进程【后台运行】- 如果不加
-d
选项,表示在前台(foreground)模式下运行容器。这意味着容器的输出将直接显示在当前终端上,并且您将无法继续在该终端中执行其他命令,直到容器停止。【前台运行】
- 如果不加
-it
:表示分配一个伪终端(pseudo-TTY),并将其与容器的标准输入(stdin)关联起来,以便可以与容器进行交互。-it
参数:容器的 Shell 映射到当前的 Shell,然后你在本机窗口输入的命令,就会传入容器。- 这意味着你可以在启动的Java 8容器中进行交互式操作
- xd 实测如果我不加这个容器run完状态是 exit
- interactive + tty(Linux 终端(TTY). TTY 是Teletype 或Teletypewriter 的缩写) 我这里理解为Terminal更好记
- shell 交互命令的接口 所以最后还可以给 bash | /bin/bash
--name java
:表示为容器指定一个名称,这里命名为"java"。java:8
:表示使用名为"java"的Docker镜像的版本8。
- docker exec -it java bash
1.3.MySQL
docker pull mysql:5.7
docker run -p 3306:3306 --name mysql \ -v /root/mysql/log:/var/log/mysql \ -v /root/mysql/data:/var/lib/mysql \ -v /root/mysql/conf:/etc/mysql \ -e MYSQL_ROOT_PASSWORD=123456 \ -d mysql:5.7
docker exec -it mysql bash
修改密码
修改默认密码 ALTER USER 'root'@'localhost' IDENTIFIED BY 'new password';
其中‘new password’替换成你要设置的密码,注意:密码设置必须要大小写字母数字和特殊符号(,/';:等),不然不能配置成功
MySQL版本5.7.6版本以前用户可以使用如下命令:实测有用:场景提示密码过期需修改
mysql> SET PASSWORD = PASSWORD('123456');
开启mysql的远程访问-Navicat
- 执行以下命令开启远程访问限制(注意:下面命令开启的IP是 所有的,如要开启192.168.0.1,用IP代替%):
grant all privileges on *.* to 'root'@'%' identified by 'password' with grant option;
- 刷新权限表
flush privileges;
- 按Ctrl+D退出数据库后输入
service mysqld restart
重启mysql服务
1.4.Redis
如果要通过配置文件启动 Redis 就需要先创好文件!
docker pull redis
docker run -p 6379:6379 --name redis \ -v /root/redis/data:/data \ -v /root/redis/conf:/etc/redis \ --requirepass 'Redis密码' \ -d redis
docker exec -it redis bash
Redis 从cli中设置密码
config set requirepass xxx
1.5.Nginx
注意
nginx.conf
是个文件不是文件夹touch ~/nginx/conf/nginx.conf
再把这个文件填上网上的内容了就可以了,但是挂载的这些其他目录还是空的改没东西还是没东西
/roc/docker/nginx -- 自己的根目录 ├── nginx.conf -- 主配置文件 ├── html └── index.html -- 存放 nginx 默认 index.html ├── conf.d └── default.conf -- 默认的子配置文件 └── log -- nginx 日志存放目录 └── xxx.log
docker pull nginx
自己宿主机新建一个对应的文件并从网上给上默认内容
touch ~/nginx/conf/nginx.conf
docker run -d -p 443:443 -p 80:80 \ --name nginx \ -v ~/nginx/conf/nginx.conf:/etc/nginx/nginx.conf \ -v ~/nginx/conf/conf.d:/etc/nginx/conf.d \ -v ~/nginx/log:/var/log/nginx \ -v ~/nginx/html:/usr/share/nginx/html \ -v ~/nginx/conf/ssl:/etc/nginx/ssl \ -d nginx
html 也可以自己随便给个index.html文件 【非必须】
1.6.MinIO
9090是web网页后台,9000是url请求地址
Buckets-Access Policy 记得改 public
docker pull minio/minio
mkdir -p ~/minio/config mkdir -p ~/minio/data
docker run -p 9000:9000 -p 9090:9090 \ --net=host \ --name minio \ -d --restart=always \ -e "MINIO_ACCESS_KEY=minioadmin" \ -e "MINIO_SECRET_KEY=minioadmin" \ -v ~/minio/data:/data \ -v ~/minio/config:/root/.minio \ minio/minio server \ /data --console-address ":9090" -address ":9000"
--net=host
: 使用主机网络模式,将容器与主机共享网络命名空间,使得容器可以通过主机的IP地址访问网络。minio/minio server
: 使用minio/minio镜像来运行MinIO服务器。/data --console-address ":9090" -address ":9000"
: 指定MinIO服务器的数据存储路径为/data
,Web控制台的访问地址为":9090",MinIO服务器的访问地址为":9000"。
http://101.34.55.204:9090/
2.upupor
Navicat连接,新建空数据库
推荐直接 idea 连接服务器的 Docker 省时省力!!! 直接idea运行Dockerfile
使用 Dockerfile 定制镜像
vim Dockerfile
FROM java:8 ADD upupor-web-1.0.0.jar /blog/upupor-web-1.0.0.jar EXPOSE 2020 ENTRYPOINT ["java","-jar","/blog/upupor-web-1.0.0.jar"]
docker build -t blog .
即可看到
docker imagse
需要用到Env variment相当于普通 java -jar之前的export步骤**(注意docker run jar的话,像mysql、redis的ip地址不能为localhost必须为服务器ip!!!)**
vim .docker_blog_env
docker run -d --name=upupor -p 2020:2020 blog
- 如果配置文件没用敏感信息就 --env-file ~/blog/.docker_blog_env blog
- 我这里直接用了 application.properties 里面写好了敏感信息所以上述这部省略
Git-备份
1.前置配置
云服务器的 Git 我捣鼓了好久~ 由于云服务器网络、地区CN http协议去连 Github 有点抽风,固我第一次尝试了 ssh 协议!!! 好使
- 生成ssh key
ssh-keygen -t rsa -C "xxx@xxx.com"
- 获取ssh key公钥内容(id_rsa.pub)
cat ~/.ssh/id_rsa.pub
- 把 cat 到的公钥内容放入 Github SSH配置里
- 验证是否设置成功
ssh -T git@github.com
通俗解释!!
重点来了:一定要知道ssh key的配置是针对每台主机的!,比如我在某台主机上操作git和我的远程仓库,想要push时不输入账号密码,走ssh协议,就需要配置ssh key,放上去的key是当前主机的ssh公钥。那么如果我换了一台其他主机,想要实现无密登录,也就需要重新配置。
下面解释开头提出的问题: (1)为什么要配? 配了才能实现push代码的时候不需要反复输入自己的github账号密码,更方便 (2)每使用一台主机都要配? 是的,每使用一台新主机进行git远程操作,想要实现无密,都需要配置。并不是说每个账号配一次就够了,而是每一台主机都需要配。 (3)配了为啥就不用密码了? 因为配置的时候是把当前主机的公钥放到了你的github账号下,相当于当前主机和你的账号做了一个关联,你在这台主机上已经登录了你的账号,此时此刻github认为是该账号主人在操作这台主机,在配置ssh后就信任该主机了。所以下次在使用git的时候即使没有登录github,也能直接从本地push代码到远程了。当然这里不要混淆了,你不能随意push你的代码到任何仓库,你只能push到你自己的仓库或者其他你有权限的仓库!
2.备份 MinIO
场景:备份 MinIO 的文件到 Git
- 使用
crontab -e
- 一分钟执行一次
* * * * * /home/minio/data/blog/test.sh >> /home/minio/data/test.log 2>&1
问题:我需要保证我的shell脚本的git命令 auth 这一步
手动一行行命令的时候用
http
可以:git remote set-url origin http://github.com/zzq8/MinIO-upupor.git
但是shell中批量总是报错!!!auth问题,网上冲浪发现用ssh好使 1)需要云服务器加私钥 2)把公钥加到Git
git remote set-url origin git@github.com:zzq8/MinIO-upupor.git
test.sh:
cd /home/minio/data/blog
git pull origin master
git add .
git commit -m 'backup upupor static resource'
git push
3.备份 sql
d=`date +%Y%m%d%H%M`
## 因为upupor的mysql数据库服务部署在docker容器中,所以`mysqldump`在容器中执行,然后将备份好的文件写到宿主主机地址 > 后的目录需要提前建好
docker exec mysql mysqldump -uroot -pxxx --single-transaction --databases upupor > /home/minio/data/blog/SQLBackup/upupor${d}.sql
gzip -c /home/minio/data/blog/SQLBackup/upupor${d}.sql > /home/minio/data/blog/SQLBackup/upupor${d}.sql.gz
rm -rf /home/minio/data/blog/SQLBackup/upupor${d}.sql
00 03 * * * /home/minio/data/blog/SQLBackup/sqlbackup.sh >> /home/minio/data/sqlbackup.log 2>&1
---下面是手工---
Linux环境部署(JRE、MySQL、Nginx)
起因: 使用了一下云服务器的Redis开了6379端口写了点SpringBoot整合Redis的测试代码,结果用着用着突然连接断了,且腾讯云发来警告CPU和带宽被跑满。Redis没设密码结合百度发现中招了(可能被肉鸡了),花了挺多时间不想再搞了就直接重装系统了,正好花点时间写一篇环境的部署的总结。
后话:今天学了用Docker,不过自己写的这篇很多东西还可以借鉴
一、JRE
Oracle 下个JDK还需要登录,下载超慢... 所以用国内的镜像源。
- 解压
tar -zxvf xxx
- 环境变量配置:
vi /etc/profile
export JRE_HOME=/home/environment/jdk8u312-b07-jre
export CLASSPATH=$JRE_HOME/lib/rt.jar:$JRE_HOME/lib/ext
export PATH=$PATH:$JRE_HOME/bin
- 添加完后执行 :source /etc/profile (重置环境变量,使得修改生效)
- 查看是否成功
附录:
二、MySQL
1. 安装
下载并安装MySQL官方的 Yum Repository
wget -i -c http://dev.mysql.com/get/mysql57-community-release-el7-10.noarch.rpm
使用上面的命令就直接下载了安装用的Yum Repository,大概25KB的样子,然后就可以直接yum安装
yum -y install mysql57-community-release-el7-10.noarch.rpm
之后就开始安装MySQL服务器
yum -y install mysql-community-server
2. 设置
- 首先启动MySQL
systemctl start mysqld.service
,查看MySQL运行状态systemctl status mysqld.service
- 此时MySQL已经开始正常运行,不过要想进入MySQL还得先找出此时root用户的密码,通过如下命令可以在日志文件中找出密码:
grep "password" /var/log/mysqld.log
通过默认密码进入数据库,此时不能做任何事情,因为MySQL默认必须修改密码之后才能操作数据库
修改默认密码
ALTER USER 'root'@'localhost' IDENTIFIED BY 'new password';
其中‘new password’替换成你要设置的密码,注意:密码设置必须要大小写字母数字和特殊符号(,/';:等),不然不能配置成功MySQL版本5.7.6版本以前用户可以使用如下命令:实测有用:场景提示密码过期需修改
mysql> SET PASSWORD = PASSWORD('123456');
ps: 当然想设简单一点的密码也可以
解决办法:
查看 mysql 初始的密码策略,
SHOW VARIABLES LIKE 'validate_password%';
关于 mysql 密码策略相关参数; 1)、validate_password_length 固定密码的总长度; 2)、validate_password_dictionary_file 指定密码验证的文件路径; 3)、validate_password_mixed_case_count 整个密码中至少要包含大/小写字母的总个数; 4)、validate_password_number_count 整个密码中至少要包含阿拉伯数字的个数; 5)、validate_password_policy 指定密码的强度验证等级,默认为 MEDIUM; 关于 validate_password_policy 的取值: 0/LOW:只验证长度; 1/MEDIUM:验证长度、数字、大小写、特殊字符; 2/STRONG:验证长度、数字、大小写、特殊字符、字典文件; 6)、validate_password_special_char_count 整个密码中至少要包含特殊字符的个数;
例如:
set global validate_password_policy=LOW;
只验证长度
set global validate_password_length=6;
固定密码长度只要6位
ALTER USER 'root'@'localhost' IDENTIFIED BY '123456';
修改密码
3. 开启mysql的远程访问
- 执行以下命令开启远程访问限制(注意:下面命令开启的IP是 所有的,如要开启192.168.0.1,用IP代替%):
grant all privileges on *.* to 'root'@'%' identified by 'password' with grant option;
- 刷新权限表
flush privileges;
- 按Ctrl+D退出数据库后输入
service mysqld restart
重启mysql服务
4. 为firewalld添加开放端口
- 预备知识
systemctl status firewalld #查看firewalld状态
systemctl start firewalld #开启防火墙
systemctl stop firewalld #关闭防火墙
- 添加mysql端口3306和Tomcat端口8080
firewall-cmd --zone=public --add-port=3306/tcp --permanent
firewall-cmd --zone=public --add-port=8080/tcp --permanent
firewall-cmd --reload #重新载入
5. 更改mysql的语言
- 首先重新登录mysql,然后输入status,可以看到,红色框框处不是utf-8
- 因此我们先退出mysql,然后再到etc目录下的my.cnf文件下修改一下文件内容
vim /etc/my.cnf
#开头处
[client]
default-character-set=utf8mb4
#结尾处
character-set-server=utf8mb4
collation-server=utf8mb4_general_ci
- 保存更改后的my.cnf文件后,重启下mysql
service mysqld restart
,然后进入mysql输入status再次查看,你就会发现变化啦
ps: 可以到Windows下用cmd命令启动mysql啦,个人喜欢用Navicat
6. Linux-Mysql导入sql文件
- 创建空数据库
create database xx
use xx
- 导入sql文件
source /home/xx.sql;
注意:在 Windows 下路径也要变成左斜杠
70分钟 vs 2分钟
附录
rpm是一个包管理器,用于生成、安装、查询、核实、更新以及卸载单个软件包。
MySQL 5.7 解压版 安装教程(图文详细)【Windows】
三、Nginx
1. 前言
目的:使用NGINX反向代理,将80端口转发到8080端口,反向代理(Reverse Proxy)方式是指以代理服务器来接受internet上的连接请求,然后将请求转发给内部网络上的服务器,并将从服务器上得到的结果返回给internet上请求连接的客户端,此时代理服务器对外就表现为一个服务器。具体看图。
正向代理(代理客户端):
场景:科学上网,客户端请求到香港的一台服务器,由这台服务器再请求到美国等其它被墙地区的服务器。
反向代理(代理服务器端):
场景:例如百度的服务器肯定不止一台,你会先访问到代理服务器再给你决定具体让你到哪一台服务器拿数据。
2. 具体操作
- 下载安装Nginx
yum install nginx
- 加入开机启动
systemctl enable nginx
- 使用命令
find / -name "nginx.conf"
进行查找nginx配置文件,进行配置vim /etc/nginx/nginx.conf
- 批量注释服务配置如图(vim命令看附录),因为一个服务器一般会有很多个服务要跑,如果直接在服务配置修改的话就不方便拓展,这里将server注释,也就是不用这个server,而是在include另外添加配置文件。咱们可以理解为nginx.conf是一个总配置文件,include所包含的是子配置文件,如果要添加一个服务,就可以再/etc/nginx/conf.d/目录下去添加一个子配置文件,这里也是用的这种方式。
- 在/etc/nginx/conf.d/目录下创建*.conf文件,我这里命名为myblog.conf
vim /etc/nginx/conf.d/myblog.conf
填入以下数据:
server {
listen 80; #监听80端口
server_name 1024zzq.com; #转发到哪个地址
location / {
proxy_pass http://101.34.55.204:8080; #代理到哪个地址
index index.html index.htm;
proxy_set_header Host $host;
proxy_set_header X-Real-Ip $remote_addr;
proxy_set_header X-Forwarded-For $remote_addr;
}
## access_log /logs/1024.zzq.com.access.log; #表示记录日志信息
}
- 启动Nginx
systemctl start nginx
四、其他附录
YUM(Yellowdog Updater Modified)是Fedora、CentOS、RedHat中的软件包管理器。基于 RPM 包管理,YUM通过分析RPM header数据,自动处理依赖关系,从指定服务器自动下载安装所有依赖的软件包。