目录
7. kylin 使用 SSL证书基于https访问部署的博客系统
一、实验
1.环境
(1)主机
表1 主机
主机 | 架构 | 版本 | IP | 备注 |
kylin | 银河麒麟 | V10 | 192.168.204.77 | |
mysql数据库 | 8.0.18-1 | |||
openjdk | 11.0.21 | |||
halo博客 | 1.6.0 |
2. kylin 部署mysql数据库
(1) 修改yum仓库
[root@kylin ~]# cd /etc/yum.repos.d/
[root@kylin yum.repos.d]# ls
[root@kylin yum.repos.d]# vim kylin_x86_64.repo
修改前:
修改后:
###Kylin Linux Advanced Server 10 - os repo###
[ks10-adv-os]
name = Kylin Linux Advanced Server 10 - Os
baseurl = http://update.cs2c.com.cn:8080/NS/V10/V10SP2/os/adv/lic/base/$basearch/
gpgcheck = 1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-kylin
enabled = 1
[ks10-adv-updates]
name = Kylin Linux Advanced Server 10 - Updates
baseurl = http://update.cs2c.com.cn:8080/NS/V10/V10SP2/os/adv/lic/updates/$basearch/
gpgcheck = 1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-kylin
enabled = 1
[ks10-adv-addons]
name = Kylin Linux Advanced Server 10 - Addons
baseurl = http://update.cs2c.com.cn:8080/NS/V10/V10SP2/os/adv/lic/addons/$basearch/
gpgcheck = 1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-kylin
enabled = 0
[kylin-epel]
name = epel
baseurl = https://update.cs2c.com.cn/NS/V10/V10SP3/EPKL/x86_64/
gpgcheck = 0
enabled = 1
(2)安装
[root@kylin yum.repos.d]# dnf install mysql-server mysql mysql-common mysql-libs
(3) 启动服务
[root@kylin yum.repos.d]# systemctl start mysqld
[root@kylin yum.repos.d]# ps -ef|grep mysqld
(4)查看临时密码
[root@kylin yum.repos.d]# tail -f /var/log/mysqld.log
……
A temporary password is generated for root@localhost: 0A.Ks%yihwei
……
(5)登录
输入上一步的临时密码
[root@kylin yum.repos.d]# mysql -uroot -p
(6)修改密码
mysql> alter user 'root'@'localhost' identified by 'root@mySQL123';
(7)查看数据库
mysql> show databases;
(8)退出
mysql> quit
3. kylin 构建Java运行环境
(1) 卸载java-1.8.0
[root@kylin ~]# dnf remove java-1.8.0*
(2)安装
[root@kylin ~]# dnf install java-11
(2) 查看版本
[root@kylin ~]# java -version
4. 创建博客使用的数据库
(1)创建
字符集(Character Set):utf8mb4
排序规则(Collate):utf8mb4_bin
[root@kylin ~]# mysql -uroot -p
Enter password:
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 9
Server version: 8.0.18 MySQL Community Server - GPL
Copyright (c) 2000, 2019, Oracle and/or its affiliates. All rights reserved.
Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
mysql> create database halodb character set utf8mb4 collate utf8mb4_bin;
Query OK, 1 row affected (0.01 sec)
mysql> flush privileges;
Query OK, 0 rows affected (0.01 sec)
mysql> quit
Bye
5. kylin 部署 halo博客系统
(1)上传jar包
[root@kylin ~]# mkdir -p /data/halo
[root@kylin ~]# cd /data/halo/
[root@kylin halo]# wget https://dl.halo.run/release/halo-1.6.0.jar
[root@kylin halo]# ll
(2)配置部署文件
编辑配置文件
[root@kylin halo]# mkdir /root/.halo
[root@kylin halo]# cd /root/.halo
[root@kylin .halo]# ll
[root@kylin .halo]# vim application.yaml
server:
port: 8090
# Response data gzip.
compression:
enabled: false
spring:
datasource:
# H2 database configuration.
#driver-class-name: org.h2.Driver
#url: jdbc:h2:file:~/.halo/db/halo
#username: admin
#password: 123456
# MySQL database configuration.
driver-class-name: com.mysql.cj.jdbc.Driver
url: jdbc:mysql://127.0.0.1:3306/halodb?characterEncoding=utf8&useSSL=false&serverTimezone=Asia/Shanghai&allowPublicKeyRetrieval=true
username: root
password: root@mySQL123
# H2 database console configuration.
#h2:
# console:
# settings:
# web-allow-others: false
# path: /h2-console
# enabled: false
halo:
# Your admin client path is https://your-domain/{admin-path}
admin-path: admin
# memory or level
cache: memory
(3)编写服务脚本
修改
[root@kylin halo]# vim /etc/systemd/system/halo.service
[Unit]
Description=Halo Service
Documentation=https://halo.run
After=network-online.target
Wants=network-online.target
[Service]
Type=simple
User=root
ExecStart=/usr/bin/java -server -Xms1024m -Xmx1024m -jar /data/halo/halo-1.6.0.jar
ExecStop=/bin/kill -s QUIT $MAINPID
Restart=always
StandOutput=syslog
StandError=inherit
[Install]
WantedBy=multi-user.target
(4)重载服务
[root@kylin halo]# systemctl daemon-reload
(5)启动服务
[root@kylin halo]# systemctl start halo
(6)查看服务
[root@kylin halo]# systemctl status halo
[root@kylin halo]# ps -ef |grep halo
(7)查看信息
[root@kylin halo]# vim /etc/systemd/system/halo.service
[root@kylin halo]# cd /root/.halo/
[root@kylin .halo]# ll
(8)查看防火墙状态
[root@kylin .halo]# systemctl status firewalld.service
查看规则
[root@kylin .halo]# firewall-cmd --list-all
添加端口
[root@kylin .halo]# firewall-cmd --add-port=8090/tcp
再次查看规则
[root@kylin .halo]# firewall-cmd --list-all
另一种方式:关闭防火墙
[root@kylin .halo]# systemctl stop firewalld.service
[root@kylin .halo]# systemctl status firewalld.service
(9)访问halo
http://192.168.204.77:8090
(10)设置
(11)输入账户
进入系统
(12)安装主题
安装
访问
https://halo.run/themes
手动下载
上传
启用
修改主题样式
查看效果
6. kylin 部署nginx
(1)安装
[root@kylin ~]# dnf install nginx
(3)查看目录
默认配置文件:nginx.conf
[root@kylin ~]# ll /etc/nginx
(4)反向代理
[root@kylin ~]# vim /etc/nginx/nginx.conf
location / {
proxy_pass http://192.168.204.77:8090;
proxy_set_header HOST $host;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
(5)启动服务
[root@kylin ~]# systemctl start nginx
查看 (1个父进程。多个子进程)
[root@kylin ~]# ps -ef |grep nginx
自启
[root@kylin nginx]# systemctl enable nginx
(6)查看网络
nginx监听80端口
[root@kylin ~]# netstat -antlp
(7)访问测试反向代理
http://192.168.204.77
(8) 登录
http://192.168.204.77/admin
修改博客地址
修改前:
修改后:
7. kylin 使用 SSL证书基于https访问部署的博客系统
(1)阿里云数字证书管理服务
数字证书管理服务(原SSL证书)(SSL Certificate)-阿里云帮助中心 (aliyun.com)
(2)SSL证书类型
SSL证书选购指引_数字证书管理服务(原SSL证书)(SSL Certificate)-阿里云帮助中心 (aliyun.com)
(3) 申请个人测试证书
(4)证书审核
(5)DNS验证
设置
验证成功
已签发
(6)下载证书
选择nginx
(7) 上传证书
nginx相对路径上传证书
[root@kylin maojing]# ls
maojing.site.key maojing.site.pem
[root@kylin maojing]# ll
总用量 8
-rw-r--r-- 1 root root 1675 2月 21 2024 maojing.site.key
-rw-r--r-- 1 root root 3822 2月 21 2024 maojing.site.pem
[root@kylin maojing]# pwd
/etc/nginx/maojing
(8)修改nginx配置文件
[root@kylin maojing]# vim /etc/nginx/nginx.conf
http段新增1个server段
server
{
listen 443 ssl;
server_name www.maojing.site;
ssl_certificate maojing/maojing.site.pem;
ssl_certificate_key maojing/maojing.site.key;
ssl_prefer_server_ciphers on;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_ciphers "HIGH:!aNULL:!MD5";
add_header X-Frame-Options DENY;
add_header X-Content-Type-Options nosniff;
add_header X-Xss-Protection 1;
location / {
proxy_pass http://192.168.204.77:8090;
proxy_set_header Host $proxy_host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}
(9)重启服务
[root@kylin maojing]# systemctl restart nginx
(10)修改Windows域名
notepad
打开
添加解析
192.168.204.77 www.maojing.site
(11) 访问
https://www.maojing.site/
查看安全性
(12) 登录
https://www.maojing.site/admin
进入系统
二、问题
1.mysql安装报错
(1)报错
下载的软件包保存在缓存中,直到下次成功执行事务。
您可以通过执行 'dnf clean packages' 删除软件包缓存。
错误:事物测试失败:
file /etc/my.cnf from install of mysql-community-server-8.0.18-1.ky10.x86_64 conflicts with file from package mariadb-common-3:10.3.39-1.p01.ky10.x86_64
(2)原因分析
mysql-community-server-8.0.18-1.ky10.x86_64 和 后面的mariadb-common-3:10.3.39-1.p01.ky10.x86_64 冲突
(3)解决方法
卸载冲突的包再重新安装。
[root@kylin yum.repos.d]# dnf remove mariadb-common-3:10.3.39-1.p01.ky10.x86_64
成功:
[root@kylin yum.repos.d]# dnf install mysql-server mysql mysql-common mysql-libs
2.查看mysql数据库报错
(1)报错
mysql> show databases;
ERROR 1820 (HY000): You must reset your password using ALTER USER statement before executing this statement.
(2)原因分析
需要重置密码。
(3)解决方法
设置密码
mysql> alter user 'root'@'localhost' identified by 'root@mySQL123';
成功:
3.systemd服务如何实现脚本编写与管理
(1)service文件存放路径
/etc/systemd/system/* ―――― 系统管理员手动软件安装包或脚本放置于此,优先级更高
/run/systemd/system/* ―――― 运行时配置文件,这个目录一般是进程在运行时动态创建unit文件的目录,一般很少修改,除非是修改程序运行时的一些参数时,即Session级别的,才在这里做修改。
/usr/lib/systemd/system/* ―――― 该目录中包含的是软件包安装的单元,也就是说通过yum、dnf、rpm等软件包管理命令管理的systemd单元文件,都放置在该目录下。
/lib/systemd/system: 指向/usr/lib/systemd/system。
(2)systemd 使用语法
1)语法
systemctl [command] [unit](配置的应用名称)
2(command可选项
start:启动指定的unit systemctl start nginx
stop:关闭指定的unit systemctl stop nginx
restart:重启指定unit systemctl restart nginx
reload:重载指定unit systemctl reload nginx
enable:系统开机时自动启动指定unit,前提是配置文件中有相关配置 systemctl enable nginx
disable:开机时不自动运行指定unit systemctl disable nginx
status:查看指定unit当前运行状态 systemctl status nginx
(3)service unit文件
整个文件分三个部分,[Unit]·[Service]·[Install]
[Unit]:记录unit文件的通用信息。
[Service]:记录Service的信息
[Install]:安装信息。
1)[Unit]部分
Description:对本service的描述
Before, After:定义启动顺序,Before=xxx.service,代表本服务在xxx.service启动之前启动。After=xxx.service,代表本服务在xxx之后启动。
2) [Service]部分
Type:service的种类,包含下列几种类型:
simple 默认,这是最简单的服务类型。意思就是说启动的程序就是主体程序,这个程序要是退出,那么一切都退出。
forking 标准的启动方式。服务包含父进程和子进程,启动程序后,会调用 fork() 函数,通过父进程生成子进程。
oneshot:这种服务类型就是启动完成,进程就没了。属于一次性启动。
notify:跟simple 类似,但是notify会在当前服务启动完毕,发送一个信号通知Systemd。
ExecStart:服务启动时执行的命令,此命令就是服务的主体。
ExecStartPre:ExecStart执行前所调用的命令。
ExecStartPost:ExecStart执行后所调用的命令。
ExecStop:定义停止当前服务时执行的命令。
EnvironmentFile:环境配置文件
PIDFile:指向当前服务 PID file 的绝对路径
注意:启动、重启、停止命令全部要求使用绝对路径
3)[Install]部分
WantedBy:何种情况下,服务被启用。
例如:WantedBy=multi-user.target(多用户环境下启用)
4. Linux软件安装
(1)yum/dnf
安装命令
1)安装
yum install -y XXX
dnf install -y XXX
2)查找
yum search XXX
dnf search XXX
3)卸载
yum remove XXX
dnf remove XXX
dnf 与 yum相同
whereis dnf
ll /usr/bin/dnf
whereis yum
ll /usr/bin/yum
(2)RPM
一般安装:rpm -ivh xxx.rpm
升级安装:rpm -Uvh xxx.rpm
卸载:rpm -e xxx
5.安装 OpenJDK 11 两种方式
(1)下载
OpenenJDK:Java Platform, Standard Edition 11 ReferenceImplementations
清华镜像:https://mirrors.tuna.tsinghua.edu.cn/AdoptOpenJDK/
(2)卸载
查看系统是否已安装OpenJDK。一般的linux都默认使用了开源的OpenJDK。
查看
rpm -qa | grep java
rpm -qa | grep jdk
批量卸载
rpm -qa | grep jdk | xargs rpm -e --nodeps
rpm -qa | grep java | xargs rpm -e --nodeps
(3)第一种方式:yum安装(适用于在线)
1)yum安装
yum search java-11-openjdk # 可以不用执行,查找安装包
yum install -y java-11-openjdk java-11-openjdk-devel # 安装
2)查找JAVA安装目录
3)查找安装目录
which java 或 ls -l $(which java)
# 如果显示的是/usr/bin/java请执行下面命令
ls -lr /usr/bin/java
ls -lrt /etc/alternatives/java
# 输出:/etc/alternatives/java -> /usr/lib/jvm/java-11-openjdk-11.0.12.0.7-0.el7_9.x86_64/bin/java
# 上面的/usr/lib/jvm/java-11-openjdk-11.0.12.0.7-0.el7_9.x86_64就是JAVA的安装路
4)配置环境变量
# 通过yum方式安装默认安装在/usr/lib/jvm文件下
# 修改JAVA_HOME为/usr/lib/jvm/java-11-openjdk-11.0.12.0.7-0.el7_9.x86_64
# 编辑/etc/profile文件
vim /etc/profile
# 按" i "键进行编辑,设置环境变量,ESC退出编辑," :wq "保存内容
# Java Environment
export JAVA_HOME=/usr/lib/jvm/java-11-openjdk-11.0.12.0.7-0.el7_9.x86_64
export JRE_HOME=$JAVA_HOME/jre
export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/jre/lib/tools.jar:$JRE_HOME/lib:$CLASSPATH
export PATH=$JAVA_HOME/bin:$PATH
5)使环境变量生效
source /etc/profile
(4)第二种方式:tar解压安装(适用于离线)
1)切换到root用户,在/usr下创建java文件夹
su root
mkdir /usr/java
cd /usr/java/
2)tar解压文件
tar -zxvf openjdk-11+28_linux-x64_bin.tar.gz
3)配置环境变量
# 修改JAVA_HOME为/usr/java/jdk-11
# 编辑/etc/profile文件
vim /etc/profile
# 按" i "键进行编辑,设置环境变量,ESC退出编辑," :wq "保存内容
# Java Environment
export JAVA_HOME=/usr/java/jdk-11
export JRE_HOME=$JAVA_HOME/jre
export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar:$JRE_HOME/lib:$CLASSPATH
export PATH=$JAVA_HOME/bin:$PATH
4)使环境变量生效
source /etc/profile
5)检查是否安装成功
java -version
javac
java
echo $JAVA_HOME
6. Halo 如何下载不同版本与配置文件
(1)下载
1)官网
https://halo.run
2)文档
https://docs.halo.run
3)社区
https://bbs.halo.run
4)主题仓库
https://halo.run/themes.html
5)开源地址
https://github.com/halo-dev/halo
(2)版本
下载新的 halo.service 配置文件
sudo curl -o /etc/systemd/system/halo.service --create-dirs https://dl.halo.run/config/halo.service
(3)配置文件
下载配置文件到 ~/.halo 目录
curl -o ~/.halo/application.yaml --create-dirs https://dl.halo.run/config/application-template.yaml
7.Halo 服务启动失败
(1)报错
[root@kylin .halo]# systemctl status halo
(2)原因分析
java服务未配置环境变量,脚本版本指定错误。
(3)解决方法
安装
[root@kylin .halo]# dnf install java-11-openjdk-devel
查找JAVA安装目录
# 查找安装目录
which java 或 ls -l $(which java)
# 如果显示的是/usr/bin/java请执行下面命令
ls -lr /usr/bin/java
ls -lrt /etc/alternatives/java
# 输出:/etc/alternatives/java -> /usr/lib/jvm/java-11-openjdk-11.0.21.9-1.ky10.x86_64/bin/java
# 上面的/usr/lib/jvm/java-11-openjdk-11.0.21.9-1.ky10.x86_64/bin/java
就是JAVA的安装路径
配置环境变量
# 通过yum或dnf方式安装默认安装在/usr/lib/jvm文件下
# 修改JAVA_HOME为/usr/lib/jvm/java-11-openjdk-11.0.21.9-1.ky10.x86_64/bin/java
# 编辑/etc/profile文件
vim /etc/profile
# 按" i "键进行编辑,设置环境变量,ESC退出编辑," :wq "保存内容
# Java Environment
export JAVA_HOME=/usr/lib/jvm/java-11-openjdk-11.0.21.9-1.ky10.x86_64/bin/java
export JRE_HOME=$JAVA_HOME/jre
export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/jre/lib/tools.jar:$JRE_HOME/lib:$CLASSPATH
export PATH=$JAVA_HOME/bin:$PATH
# 使环境变量生效
source /etc/profile
修改脚本:
修改前:
修改后:
成功:
[root@kylin ~]# systemctl start halo
[root@kylin ~]# systemctl status halo
8. Halo 附件上传报错
(1)报错
(2)原因分析
查看nginx日志
[root@kylin ~]# cd /var/log/nginx/
[root@kylin nginx]# ls
[root@kylin nginx]# ll
查看错误日志 (文件太大,都没转发出去就被nginx拦截了)
[root@kylin nginx]# tail -100 error.log
2024/02/19 22:33:58 [error] 67431#0: *86 client intended to send too large body: 4309547 bytes, client: 192.168.204.1, server: _, request: "POST /api/admin/attachments/upload HTTP/1.1", host: "192.168.204.77", referrer: "http://192.168.204.77/admin"
(3)解决方法
配置nginx上传文件最大限制。
[root@kylin nginx]# vim /etc/nginx/nginx.conf
#http段添加
client_max_body_size 500M;
重启
[root@kylin nginx]# systemctl restart nginx
查看服务
[root@kylin nginx]# ps -ef |grep nginx
成功: