创建服务,开机启动 sharp-admin 应用

创建 Service 文件

vim /etc/systemd/system/sharp-admin.service

写入以下内容:

[Unit]
Description=Sharp Admin Deploy Service
After=network.target mysql.service
Requires=mysql.service

[Service]
Type=simple
# ExecStart=/bin/bash -c 'nohup java -Xms1024m -Xmx2048m -Dspring.profiles.active=prod -jar /usr/local/projects/sharp-admin/sharp-admin-2.0-SNAPSHOT.jar --server.port=8080 &'
ExecStart=/usr/local/projects/sharp-admin/deploy.sh
WorkingDirectory=/usr/local/projects/sharp-admin
RemainAfterExit=yes

[Install]
WantedBy=multi-user.target

如果数据库是 mariadb 上面需要替换成 mariadb.service

添加deploy.sh可执行权限

chmod +x /usr/local/projects/sharp-admin/deploy.sh

启用并启动服务

sudo systemctl daemon-reload
sudo systemctl enable sharp-admin.service
sudo systemctl start sharp-admin.service

Centos7 安装 Nginx

参考https://nginx.org/en/linux_packages.html#RHEL

Install the prerequisites:

sudo yum install yum-utils

To set up the yum repository, create the file named /etc/yum.repos.d/nginx.repo with the following contents:

[nginx-stable]
name=nginx stable repo
baseurl=http://nginx.org/packages/centos/$releasever/$basearch/
gpgcheck=1
enabled=1
gpgkey=https://nginx.org/keys/nginx_signing.key
module_hotfixes=true

[nginx-mainline]
name=nginx mainline repo
baseurl=http://nginx.org/packages/mainline/centos/$releasever/$basearch/
gpgcheck=1
enabled=0
gpgkey=https://nginx.org/keys/nginx_signing.key
module_hotfixes=true

By default, the repository for stable nginx packages is used. If you would like to use mainline nginx packages, run the following command:

sudo yum-config-manager --enable nginx-mainline

To install nginx, run the following command:

sudo yum install nginx

start

nginx

设置开机启动

sudo systemctl enable nginx

Centos7 安装 MySQL

CentOS 7 默认自带了 MariaDB mariadb-libs-5.5.68-1.el7.x86_64

可以用这个命令确认一下系统里有没有 MariaDB:

rpm -qa | grep mariadb

CentOS 7 默认可能有 MariaDB,要先移除。

sudo yum remove mariadb-libs

直接下载 MySQL 5.6 的官方 YUM 源 rpm 包:

wget https://repo.mysql.com/mysql-community-release-el7-5.noarch.rpm

然后安装它:

sudo rpm -ivh mysql-community-release-el7-5.noarch.rpm

直接安装:

sudo yum install mysql-community-server-5.6.24

启动服务

sudo systemctl start mysqld

设置开机启动

sudo systemctl enable mysqld

设置密码

mysqladmin -u root password '你的新密码'

开启远程数据库访问

mysql -u root -p
use mysql;
grant all PRIVILEGES on *.* to root@'%' identified by '数据库密码';
flush privileges;

Centos7 安装 MariaDB

yum安装 MariaDB

yum install mariadb mariadb-server
systemctl start mariadb   #启动mariadb
systemctl enable mariadb  #设置开机自启动
mysql_secure_installation #设置root密码等相关
mysql -uroot -p           #测试登录

MariaDB 开启远程数据库访问

mysql -u root -p
use mysql;
grant all PRIVILEGES on *.* to root@'%' identified by '数据库密码';
flush privileges;

docker 部署 sharp-admin + 1Panel 管理面板

购买云服务器

登录阿里云购买ECS,操作系统我选择 Debian 12.10 64位,选择 Alibaba Cloud linux 安装 1Panel 的时候会出现错误。

docker 部署 sharp-admin

创建项目目录

mkdir -p /usr/local/projects/sharp-admin

sharp-admin 下依次创建目录:data、deploy、init

root@iZbp114oy5r2mjdc1yuspoZ:/usr/local/projects/sharp-admin# ls -al
total 28
drwxr-xr-x 5 root root 4096 Apr 25 19:59 .
drwxr-xr-x 3 root root 4096 Apr 25 19:52 ..
drwxr-xr-x 8  999 root 4096 Apr 25 21:01 data # 挂载 mysql 的数据卷
drwxr-xr-x 2 root root 4096 Apr 25 19:54 deploy # 上传可执行的 jar 文件
-rw-r--r-- 1 root root 1190 Apr 25 19:57 docker-compose.yaml
-rw-r--r-- 1 root root  409 Apr 25 19:58 Dockerfile
drwxr-xr-x 2 root root 4096 Apr 25 19:59 init # 初始化的 mysql 脚本

拷贝文件:sharp-admin-2.0-SNAPSHOT.jar、docker-compose.yaml、Dockerfile、init-sql-2025-01-11.sql 到对应的目录下
树形结构展示

├── data
├── deploy
│   └── sharp-admin-2.0-SNAPSHOT.jar
├── docker-compose.yaml
├── Dockerfile
└── init
    └── init-sql-2025-01-11.sql

Dockerfile

# For Java 8, try this
# FROM openjdk:8-jdk-alpine

# For Java 8, try this
FROM openjdk:8-jdk-alpine

# Refer to Maven build -> finalName
ARG JAR_FILE=deploy/sharp-admin-2.0-SNAPSHOT.jar

# cd /opt/app
WORKDIR /opt/app

# cp target/sharp-admin-2.0-SNAPSHOT.jar /opt/app/app.jar
COPY ${JAR_FILE} app.jar

# java -jar /opt/app/app.jar
ENTRYPOINT ["java","-Dspring.profiles.active=docker-prod","-jar","app.jar"]

docker-compose.yaml

version: '3'

services:
  db:
    container_name: mysql-sharp-admin
    image: mysql:latest
    restart: always
    environment:
      MYSQL_ROOT_PASSWORD: 123456
      MYSQL_DATABASE: sharp-admin
    volumes:
      - /usr/local/projects/sharp-admin/data:/var/lib/mysql # 数据挂载
      - ./init:/docker-entrypoint-initdb.d # 数据挂载目录下没有数据,那么执行 init 下的 sql
#    ports:
#      - "3306:3306"
#      - "33060:33060"
    expose: # 不会真的开放端口到宿主机或外部网络
      - 3306
      - 33060
    healthcheck: # 给 db 添加健康检查,要真正做到“等数据库准备好再启动”
      test: ["CMD", "mysqladmin", "ping", "-h", "localhost", "-u", "root", "-p123456"]
      interval: 10s
      timeout: 5s
      retries: 5

  sharp-admin:
    container_name: sharp-admin
    image: sharp-admin:2.0
    build:
      context: ./
      dockerfile: Dockerfile
    ports:
      - "8080:8080"
    volumes:
      - /Users/rick/Space/tmp/admin/log:/opt/app/log
    depends_on:
      db:
        condition: service_healthy

1Panel

安装

参考https://1panel.cn/docs/installation/online_installation/#__tabbed_1_3

curl -sSL https://resource.fit2cloud.com/1panel/package/quick_start.sh -o quick_start.sh && bash quick_start.sh

安装完成后,控制台会打外网访问链接,用户名,密码。如果无法访问,查看一下默认端口 22367 是否开启允许访问。

环境配置

网站

【网站】中安装:OpenResty 服务后,【创建】网站,选择【反向代理】填写域名【sharp-admin.xhope.top】,【代理地址】写【127.0.0.1:8080】,我们的应用就运行在8080端口。不要忘记域名解析到【sharp-admin.xhope.top】。配置完成后,通过地址sharp-admin.xhope.top就能访问应用。

证书

  • 创建 Acme 账户,填写邮箱和类型后确认。
  • 创建 DNS 账户,填写名称,类型选择【阿里云】,Access key 和 Secret key,通过 – RAM 访问控制创建用户获取,同时给权限【AliyunDNSFullAccess】
  • 申请证书,从网站中获取选择网站【sharp-admin.xhope.top】
  • 网站配置,启用 HTTPS

mvn 自动上传 jar 部署重启容器运行

  • sharp-admin 目录下添加 文件 config.sh、deploy-docker.yml
  • 配置 ssh 免密登陆,配置别名 node,参考https://xhope.top/?p=1722
  • 运行 mvn.sh

config.sh

server_ip="47.97.7.98"
dir="/usr/local/projects"
project_name="sharp-admin"
port="8080"
project_path="$dir/$project_name"

deploy-docker.yml

#!/bin/bash
source ./config.sh

docker-compose stop $project_name
docker-compose rm $project_name -f
docker rmi $project_name:2.0
docker build -t $project_name:2.0 .
docker-compose create $project_name
docker-compose start $project_name

mvn.sh

#!/bin/bash
source ./config.sh

# 获取当前工作目录的绝对路径
current_dir=$(pwd)

mvn clean package -Dmaven.test.skip=true
scp $current_dir/target/$project_name-2.0-SNAPSHOT.jar root@$server_ip:$dir/$project_name/deploy

# 服务器免密登录 ssh node
# 执行服务器 deploy-docker.sh
ssh node "cd $dir/$project_name && bash -s < $dir/$project_name/deploy-docker.sh"