树莓派5上部署博客系统
温馨提示:
本文最后更新于 2024年11月20日,已超过 150 天没有更新。若文章内的图片失效(无法正常加载),请留言反馈或直接联系我。
上一个教程已经说了树莓派怎么安装操作系统,现在说一下怎么部署开源博客系统OneBlog。OneBlog 一个简洁美观、功能强大并且自适应的Java博客。使用springboot开发,前端使用Bootstrap。支持移动端自适应,配有完备的前台和后台管理功能。部署到服务器设计到的环境有JDK、MySQL、Redis、Nginx,下面我们开始部署,这里我构建了一个一键部署脚本。
1.部署
1.1.JDK
#!/bin/bash
echo "开始安装JDK"
cp /opt/dblog/jdk/jdk-8u361-linux-aarch64.tar.gz /opt && echo "复制完成"
cd /opt && echo "进入到目录成功 /opt"
echo "解压中" && tar -zxvf jdk-8u361-linux-aarch64.tar.gz && echo "解压完成"
mv jdk1.8.0_361 jdk && echo "改名完成"
rm -rf jdk-8u361-linux-aarch64.tar.gz && echo "删除安装包成功"
echo "配置环境变量"
ln -sv /opt/jdk/bin/java /usr/sbin/java
echo "JDK安装完成"
1.2.MySQL
#!/bin/bash
echo "开始安装MySQL"
cp /opt/dblog/mysql/mysql-8.0.32-linux-glibc2.17-aarch64.tar.gz /opt
cd /opt
echo "解压MySQL"
tar -zxvf mysql-8.0.32-linux-glibc2.17-aarch64.tar.gz
rm -rf mysql-8.0.32-linux-glibc2.17-aarch64.tar.gz
mv mysql-8.0.32-linux-glibc2.17-aarch64 mysql
echo "安装MySQL依赖"
if [ ! -f /usr/lib/aarch64-linux-gnu/libaio.so.1 ]; then
echo "install libaio.so.1"
dpkg -i /opt/dblog/mysql/libaio1t64_0.3.113-6build1_arm64.deb
ln -s /usr/lib/aarch64-linux-gnu/libaio.so.1t64 /usr/lib/aarch64-linux-gnu/libaio.so.1
fi
if [ ! -f /usr/lib/aarch64-linux-gnu/libncurses.so.5 ]; then
echo "install libncurses.so.5"
ln -s /usr/lib/aarch64-linux-gnu/libncurses.so.6 /usr/lib/aarch64-linux-gnu/libncurses.so.5
fi
if [ ! -f /usr/lib/aarch64-linux-gnu/libtinfo.so.5 ]; then
echo "install b/aarch64-linux-gnu/libtinfo.slibtinfo.so.5"
dpkg -i /opt/dblog/mysql/libtinfo6_6.4+20240113-1ubuntu2_arm64.deb
ln -s /usr/lib/aarch64-linux-gnu/libtinfo.so.6 /usr/lib/aarch64-linux-gnu/libtinfo.so.5
fi
echo "创建mysql用户"
# 创建一个用户组:mysql
groupadd mysql
# 创建一个系统用户:mysql,指定用户组为mysql
useradd -r -g mysql mysql
# 创建数据目录
mkdir -p /opt/mysql/data
chmod -R 750 /opt/mysql/data
# 赋予数据目录权限
chown -R mysql:mysql /opt/mysql/data
# 复制配置文件
cp /opt/dblog/mysql/my.cnf /etc/
echo "开始初始化MySQL"
cd /opt/mysql/bin
# 初始化MySQL
./mysqld --defaults-file=/etc/my.cnf --basedir=/opt/mysql/ --datadir=/opt/mysql/data --user=mysql --initialize-insecure
echo "启动MySQL"
sed -i 's/usr\/local\/mysql/opt\/mysql/g' /opt/mysql/support-files/mysql.server
cp /opt/dblog/mysql/mysql.service /usr/lib/systemd/system/
systemctl daemon-reload
chmod -R 777 /opt/mysql/data
systemctl start mysql
echo "配置环境变量"
ln -sv /opt/mysql/bin/mysql /usr/sbin/mysql
ln -sv /opt/mysql/bin/mysqladmin /usr/sbin/mysqladmin
ln -sv /opt/mysql/bin/mysqldump /usr/sbin/mysqldump
echo "登录MySQL"
mysql -u root --skip-password -e "ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'password11';"
echo "导入数据"
mysql -uroot -p'password11' -e "create database dblog charset utf8mb4 collate utf8mb4_general_ci;
use dblog;
source /opt/dblog/mysql/dblog.sql;"
echo "设置开机自启"
sudo systemctl enable mysql
echo "MySQL安装完成"
1.3.Redis
#!/bin/bash
echo "开始安装Redis"
cd /opt/dblog/redis/
dpkg -i *.deb
sed -i 's/# requirepass foobared/requirepass password11/g' /etc/redis/redis.conf
sed -i 's/daemonize no/daemonize yes/g' /etc/redis/redis.conf
echo "Redis安装完成"
1.4.Nginx
这里Nginx是用来作为一个文件服务器
#!/bin/bash
echo "开始安装Nginx"
cd /opt/dblog/nginx/
dpkg -i *.deb
cp default /etc/nginx/sites-enabled/
echo "Nginx安装完成"
default文件内容
server {
listen 8890 default_server;
listen [::]:8890 default_server;
root /var/www/html;
index index.html index.htm index.nginx-debian.html;
server_name _;
location ~* ^/blogFiles/ {
root /opt/;
try_files $uri $uri/ =404;
}
}
1.4.Web服务
博客的前台
#!/bin/bash
echo "开始启动博客Web服务"
cd /opt/dblog/web
nohup java -Dfile.encoding=utf-8 -Xms1G -Xmx2G -jar blog-web.jar > /dev/null 2>&1 &
echo "博客Web服务已启动"
方便程序的管理,将博客前台程序做成了service服务
[Unit]
Description=blog web server
After=mysql.service
[Service]
Type=forking
ExecStart=/bin/bash /opt/dblog/web/startWeb.sh
PrivateTmp=true
[Install]
WantedBy=multi-user.target
1.5.后台管理服务
博客的后台管理
#!/bin/bash
echo "开始启动博客后台管理服务"
cd /opt/dblog/admin
nohup java -Dfile.encoding=utf-8 -Xms1G -Xmx2G -jar blog-admin.jar > /dev/null 2>&1 &
echo "博客后台管理服务已启动"
方便程序的管理,将博客后台管理程序做成了service服务
[Unit]
Description=blog admin server
After=mysql.service
[Service]
Type=forking
ExecStart=/bin/bash /opt/dblog/admin/startAdmin.sh
PrivateTmp=true
[Install]
WantedBy=multi-user.target
1.6.维护
替换下载文件的IP
UPDATE biz_file SET full_file_path = REPLACE(full_file_path, '47.108.99.40', '43.33.113.4');
UPDATE biz_article SET cover_image = REPLACE(cover_image, '47.108.99.40', '43.33.113.4');
UPDATE biz_article SET content = REPLACE(content, '47.108.99.40', '43.33.113.4');
UPDATE sys_config SET config_value = REPLACE(config_value, '47.108.99.40', '43.33.113.4');
UPDATE biz_file SET full_file_path = REPLACE(full_file_path, '47.108.99.40', '43.33.113.4');
UPDATE biz_article SET cover_image = REPLACE(cover_image, '47.108.99.40', '43.33.113.4');
UPDATE biz_article SET content = REPLACE(content, '47.108.99.40', '43.33.113.4');
UPDATE sys_config SET config_value = REPLACE(config_value, '47.108.99.40', '43.33.113.4');
1.7.https配置
nginx
server {
# SSL configuration
listen 8890 ssl default_server;
listen [::]:8890 ssl default_server;
# SSL certificate and key
ssl_certificate /etc/nginx/ssl/fullchain.crt;
ssl_certificate_key /etc/nginx/ssl/private.pem;
# Read up on ssl_ciphers to ensure a secure configuration.
ssl_protocols TLSv1.2 TLSv1.3;
ssl_ciphers HIGH:!aNULL:!MD5;
root /var/www/html;
# Add index.php to the list if you are using PHP
index index.html index.htm index.nginx-debian.html;
server_name _;
location ~* ^/blogFiles/ {
root /opt/;
try_files $uri $uri/ =404;
}
}
application.yml
# 自定义配置
custom:
# https配置
ssl:
# 是否开启证书验证
enabled: false
# 证书密码
keyStorePassword: 8059al
SslConfig.java
/**
* https配置
*/
@Configuration
public class SslConfig {
@Value("${custom.ssl.enabled}")
private boolean sslEnabled;
@Value("${custom.ssl.keyStorePassword}")
private String keyStorePassword;
/**
* 配置嵌入式Tomcat服务器以启用HTTPS
* @return
*/
@Bean
public WebServerFactoryCustomizer<TomcatServletWebServerFactory> sslCustomizer() {
return factory -> {
if (sslEnabled) {
try {
// 获取证书文件路径
String certDir = ApplicationUtil.getJarPath() + "/certs/";
File certDirectory = new File(certDir);
File[] certFiles = certDirectory.listFiles((dir, name) -> Arrays.asList("jks", "p12", "pfx").contains(name.toLowerCase().substring(name.lastIndexOf(".") + 1)));
if (certFiles == null || certFiles.length == 0) {
throw new RuntimeException("在" + certDir + "目录中没有找到有效的证书文件");
}
File keyStoreFile = certFiles[0];
String keyStoreType = keyStoreFile.getName().endsWith(".jks") ? "JKS" : "PKCS12";
// 加载密钥库
KeyStore keyStore = KeyStore.getInstance(keyStoreType);
try (FileInputStream fis = new FileInputStream(keyStoreFile)) {
keyStore.load(fis, keyStorePassword.toCharArray());
} catch (CertificateException e) {
throw new ZhydException("证书加载失败,请检查证书" + keyStoreFile.getAbsolutePath() + "是否有效", e);
} catch (IOException e) {
throw new ZhydException("证书不存在,请检查" + certDir + "目录中是否有证书文件。支持的证书格式有.p12和.jks", e);
} catch (NoSuchAlgorithmException e) {
throw new ZhydException("算法不可用", e);
}
// 初始化 KeyManagerFactory 和 TrustManagerFactory
KeyManagerFactory keyManagerFactory = KeyManagerFactory.getInstance(KeyManagerFactory.getDefaultAlgorithm());
keyManagerFactory.init(keyStore, keyStorePassword.toCharArray());
TrustManagerFactory trustManagerFactory = TrustManagerFactory.getInstance(TrustManagerFactory.getDefaultAlgorithm());
trustManagerFactory.init(keyStore);
// 创建 SSLContext
SSLContext sslContext = SSLContext.getInstance("TLS");
sslContext.init(keyManagerFactory.getKeyManagers(), trustManagerFactory.getTrustManagers(), null);
// 配置 Tomcat 连接器
factory.addConnectorCustomizers(connector -> {
connector.setSecure(true);
connector.setScheme("https");
connector.setProperty("SSLEnabled", "true");
connector.setProperty("clientAuth", "false");
connector.setProperty("sslProtocol", "TLS");
connector.setProperty("keystoreFile", keyStoreFile.getAbsolutePath());
connector.setProperty("keystorePass", keyStorePassword);
connector.setProperty("keystoreType", keyStoreType);
connector.setAttribute("SSLContext", sslContext);
});
} catch (UnrecoverableKeyException e) {
throw new ZhydException("密钥库密码" + keyStorePassword + "不正确", e);
} catch (KeyStoreException e) {
throw new ZhydException("操作密钥库时发生错误", e);
} catch (NoSuchAlgorithmException e) {
throw new ZhydException("请求的算法不可用", e);
} catch (KeyManagementException e) {
throw new ZhydException("管理密钥或信任材料时发生错误", e);
}
}
};
}
}
2.内网穿透
通过花生壳做的内网穿透,然后就可以通过互联网进行访问,花生壳安装步骤如下
2.1.安装花生壳
在花生壳官网,选择Raspberry Pi 64位的安装包
安装
# 切换到root账号
sudo -s
# 安装花生壳
dpkg -i phddns_5.1.0_rapi_aarch64.deb
# 花生壳功能
phddns start(启动)| status(状态)| stop(停止)|restart(重启)| reset(重置)|enable(开机自启动)|disable(关闭开机自启动)|version(版本)
# 日志路径
/var/log/phddns/
# 卸载
dpkg -r phddns
2.2.花生壳配置
绑定设备,执行以下命令获取SN码
phddns status
在设备列表根据SN码添加设备
添加内网穿透的映射
正文到此结束
- 本文标签: Linux
- 本文链接: https://lanzi.cyou/article/4
- 版权声明: 本文由咖啡豆原创发布,转载请遵循《署名-非商业性使用-相同方式共享 4.0 国际 (CC BY-NC-SA 4.0)》许可协议授权