1Panel是一款功能强大的基于Web的Linux服务器管理面板,被评为顶级VPS控制面板和最佳Linux服务器运维管理工具。项目采用GPL v3开源协议,提供完整的服务器运维解决方案,包括网站管理、数据库管理、容器管理、监控告警、备份恢复等核心功能。
# 使用官方安装脚本
curl -sSL https://resource.1panel.pro/install/install.sh | bash
# 或者下载离线安装包
wget https://github.com/1Panel-dev/1Panel/releases/latest/download/1panel.linux.amd64.tar.gz
tar -zxvf 1panel.linux.amd64.tar.gz
cd 1panel
./install.sh
docker run -d --name 1panel \
-p 8888:8888 \
-v /var/run/docker.sock:/var/run/docker.sock \
-v /opt/1panel:/app/data \
1panel/1panel:latest
# 通过API创建网站
curl -X POST http://localhost:8888/api/v1/websites \
-H "Content-Type: application/json" \
-d '{
"type": "php",
"alias": "my-website",
"domains": [{"domain": "example.com"}],
"runtimeID": 1
}'
// 通过Go代码创建MySQL数据库
func CreateMySQLDatabase() error {
req := dto.MysqlDBCreate{
Name: "my_database",
From: "local",
Database: "mysql",
Format: "utf8mb4",
Username: "db_user",
Password: "secure_password",
}
client := &http.Client{}
data, _ := json.Marshal(req)
request, _ := http.NewRequest("POST", "http://localhost:8888/api/v1/databases/mysql", bytes.NewBuffer(data))
request.Header.Set("Content-Type", "application/json")
resp, err := client.Do(request)
if err != nil {
return err
}
defer resp.Body.Close()
return nil
}
# docker-compose.yml示例
version: '3'
services:
nginx:
image: nginx:latest
ports:
- "80:80"
volumes:
- ./nginx.conf:/etc/nginx/nginx.conf
1Panel提供完整的RESTful API接口,涵盖所有管理功能:
// @Tags Website
// @Summary Create website
// @Accept json
// @Param request body request.WebsiteCreate true "request"
// @Success 200
// @Security ApiKeyAuth
// @Security Timestamp
// @Router /websites [post]
func (b *BaseApi) CreateWebsite(c *gin.Context) {
var req request.WebsiteCreate
if err := helper.CheckBindAndValidate(&req, c); err != nil {
return
}
if err := websiteService.Create(req); err != nil {
helper.ErrorWithDetail(c, constant.CodeErrInternalServer, constant.ErrInternalServer, err)
return
}
helper.Success(c)
}
// @Tags Database MySQL
// @Summary Create mysql database
// @Accept json
// @Param request body dto.MysqlDBCreate true "request"
// @Success 200
// @Security ApiKeyAuth
// @Security Timestamp
// @Router /databases/mysql [post]
func (b *BaseApi) CreateMySQLDatabase(c *gin.Context) {
var req dto.MysqlDBCreate
if err := helper.CheckBindAndValidate(&req, c); err != nil {
return
}
if len(req.Password) != 0 {
password, err := base64.StdEncoding.DecodeString(req.Password)
if err != nil {
helper.BadRequest(c, err)
return
}
req.Password = string(password)
}
if _, err := mysqlService.Create(context.Background(), req); err != nil {
helper.InternalServer(c, err)
return
}
helper.Success(c)
}
// @Tags Container
// @Summary Page containers
// @Accept json
// @Param request body dto.PageContainer true "request"
// @Produce json
// @Success 200 {object} dto.PageResult
// @Security ApiKeyAuth
// @Security Timestamp
// @Router /containers/search [post]
func (b *BaseApi) SearchContainer(c *gin.Context) {
var req dto.PageContainer
if err := helper.CheckBindAndValidate(&req, c); err != nil {
return
}
total, list, err := containerService.Page(req)
if err != nil {
helper.InternalServer(c, err)
return
}
helper.SuccessWithData(c, dto.PageResult{
Items: list,
Total: total,
})
}
// @Tags Monitor
// @Summary Load monitor data
// @Param request body dto.MonitorSearch true "request"
// @Success 200 {array} dto.MonitorData
// @Security ApiKeyAuth
// @Security Timestamp
// @Router /monitor/data [post]
func (b *BaseApi) LoadMonitorData(c *gin.Context) {
var req dto.MonitorSearch
if err := helper.CheckBindAndValidate(&req, c); err != nil {
return
}
data, err := monitorService.LoadMonitorData(req)
if err != nil {
helper.InternalServer(c, err)
return
}
helper.SuccessWithData(c, data)
}
// @Tags File
// @Summary List files
// @Accept json
// @Param request body request.FileOption true "request"
// @Success 200 {object} response.FileInfo
// @Security ApiKeyAuth
// @Security Timestamp
// @Router /files/search [post]
func (b *BaseApi) ListFiles(c *gin.Context) {
var req request.FileOption
if err := helper.CheckBindAndValidate(&req, c); err != nil {
return
}
fileList, err := fileService.GetFileList(req)
if err != nil {
helper.InternalServer(c, err)
return
}
helper.SuccessWithData(c, fileList)
}
这些核心代码展示了1Panel的主要功能模块实现,包括API路由定义、参数验证、服务调用和响应处理,体现了项目的高代码质量和良好的架构设计。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。