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"