谨记:如果容器启动成功了,但是访问不到大部分是防火墙没放行端口,记得要用的端口都放行
一开始先新建两个文件夹:
curl -fsSL https://get.docker.com | bash -s docker --mirror Aliyunsystemctl enable dockersudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{
"registry-mirrors": ["https://e2wlsmur.mirror.aliyuncs.com"],
"iptables": true
}
EOF
sudo systemctl daemon-reload
sudo systemctl restart dockersudo systemctl start docker如果 FirewallD 没有运行,你首先需要启动并启用它。这是在 CentOS 系统中使用 firewalld 配置防火墙规则的方法。执行以下命令:
sudo yum install firewalld -y
让它在系统启动时自动运行:
sudo systemctl start firewalld
sudo systemctl enable firewalld
wget https://npmmirror.com/mirrors/node/v16.18.0/node-v16.18.0-linux-x64.tar.xztar -xvf node-v16.18.0-linux-x64.tar.xzln -s /root/envrionment/node-v16.18.0-linux-x64/bin/node /usr/bin/node
ln -s /root/envrionment/node-v16.18.0-linux-x64/bin/npm /usr/bin/npmnode -v
npm -vnpm install -g cnpm --registry=https://registry.npm.taobao.org
建立软连接
ln -s /root/node-v16.18.0-linux-x64/bin/cnpm /usr/bin/cnpm
cnpm -vsudo firewall-cmd --zone=public --add-port=80/tcp --permanent
sudo firewall-cmd --reload
1. 下载
wget https://dl.google.com/go/go1.19.6.linux-amd64.tar.gz
2. 解压
tar -xvf go1.19.6.linux-amd64.tar.gz
3. 配置环境变量
cd go
vim ~/.bashrc
4. 进入文件后,在末尾加
export GOROOT=/root/envrionment/go
export GOPATH=/root/projects/go
export PATH=$PATH:$GOROOT/bin:$GPPATH/bin
5.按Esc 然后 :wq - 保存退出
6. source ~/.bashrcexport GOPROXY="https://goproxy.cn,https://mirrors.aliyun.com/goproxy/,https://goproxy.io,direct"
go env -w GO111MODULE=ondocker pull mysql:8.0.26 ==> docker pull 镜像名称:镜像版本- docker images
- 查看所有镜像我们发现mysql已经拉取成功了!
-d: 后台运行容器,也可以使用镜像id
-p 将容器的端口映射到本机的端口
-v 将主机目录挂载到容器的目录
-e 设置参数 MYSQL_ROOT_PASSWORD 指定登录密码
docker run -d --name mysql -p 3306:3306 -v /opt/containerd/mysql/conf:/etc/mysql/conf.d -v /opt/containerd/mysql/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=<密码> mysql:8.0.26
#重启容器后自动启动
docker container update --restart=always 容器id# 进入容器
docker exec -it 容器id /bin/bash
# 进入myslq
mysql -uroot -p
# 创建数据库表
-- 创建库
create database if not exists sqlfather;
-- 切换库
use sqlfather;
-- 用户表
create table if not exists user
(
id bigint auto_increment comment 'id' primary key,
userName varchar(256) null comment '用户昵称',
userAccount varchar(256) not null comment '账号',
userAvatar varchar(1024) null comment '用户头像',
gender tinyint null comment '性别',
userRole varchar(256) default 'user' not null comment '用户角色:user/ admin',
userPassword varchar(512) not null comment '密码',
createTime datetime default CURRENT_TIMESTAMP not null comment '创建时间',
updateTime datetime default CURRENT_TIMESTAMP not null on update CURRENT_TIMESTAMP comment '更新时间',
isDelete tinyint default 0 not null comment '是否删除',
constraint uni_userAccount
unique (userAccount)
)
comment '用户';
-- 词库表
create table if not exists dict
(
id bigint auto_increment comment 'id' primary key,
name varchar(512) null comment '词库名称',
content text null comment '词库内容(json 数组)',
reviewStatus int default 0 not null comment '状态(0-待审核, 1-通过, 2-拒绝)',
reviewMessage varchar(512) null comment '审核信息',
userId bigint not null comment '创建用户 id',
createTime datetime default CURRENT_TIMESTAMP not null comment '创建时间',
updateTime datetime default CURRENT_TIMESTAMP not null on update CURRENT_TIMESTAMP comment '更新时间',
isDelete tinyint default 0 not null comment '是否删除'
) comment '词库';
create index idx_name
on dict (name);
-- 表信息表
create table if not exists table_info
(
id bigint auto_increment comment 'id' primary key,
name varchar(512) null comment '名称',
content text null comment '表信息(json)',
reviewStatus int default 0 not null comment '状态(0-待审核, 1-通过, 2-拒绝)',
reviewMessage varchar(512) null comment '审核信息',
userId bigint not null comment '创建用户 id',
createTime datetime default CURRENT_TIMESTAMP not null comment '创建时间',
updateTime datetime default CURRENT_TIMESTAMP not null on update CURRENT_TIMESTAMP comment '更新时间',
isDelete tinyint default 0 not null comment '是否删除'
) comment '表信息';
create index idx_name
on table_info (name);
-- 字段信息表
create table if not exists field_info
(
id bigint auto_increment comment 'id' primary key,
name varchar(512) null comment '名称',
fieldName varchar(512) null comment '字段名称',
content text null comment '字段信息(json)',
reviewStatus int default 0 not null comment '状态(0-待审核, 1-通过, 2-拒绝)',
reviewMessage varchar(512) null comment '审核信息',
userId bigint not null comment '创建用户 id',
createTime datetime default CURRENT_TIMESTAMP not null comment '创建时间',
updateTime datetime default CURRENT_TIMESTAMP not null on update CURRENT_TIMESTAMP comment '更新时间',
isDelete tinyint default 0 not null comment '是否删除'
) comment '字段信息';
create index idx_fieldName
on field_info (fieldName);
create index idx_name
on field_info (name);
-- 举报表
create table if not exists report
(
id bigint auto_increment comment 'id' primary key,
content text not null comment '内容',
type int not null comment '举报实体类型(0-词库)',
reportedId bigint not null comment '被举报对象 id',
reportedUserId bigint not null comment '被举报用户 id',
status int default 0 not null comment '状态(0-未处理, 1-已处理)',
userId bigint not null comment '创建用户 id',
createTime datetime default CURRENT_TIMESTAMP not null comment '创建时间',
updateTime datetime default CURRENT_TIMESTAMP not null on update CURRENT_TIMESTAMP comment '更新时间',
isDelete tinyint default 0 not null comment '是否删除'
) comment '举报';GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY 'root' WITH GRANT OPTION;
GRANT ALL PRIVILEGES ON *.* TO 'root'@'127.0.0.1' IDENTIFIED BY 'root' WITH GRANT OPTION;
GRANT ALL PRIVILEGES ON *.* TO 'root'@'localhost' IDENTIFIED BY 'root' WITH GRANT OPTION;
-- 8.0以后的只用执行下面这条语句
grant all privileges on *.* to 'root'@'localhost';
FLUSH PRIVILEGES;sudo firewall-cmd --zone=public --add-port=3306/tcp --permanent
sudo firewall-cmd --reload
如果没开放外部端口连接这里是连不上的,只给服务器内部连接,开放有被攻击的威胁

docker pull redis- 查看是否拉取成功了,以下表示拉取成功
docker imagesdocker run --name redis -p 6379:6379 -d redis redis-server --appendonly yes --requirepass "自己的密码"
# -p:端口映射
# -d:后台运行
# redis-server --appendonly yes:开启缓存模式,可以存储至硬盘中
docker container update --restart=always 容器idsudo firewall-cmd --zone=public --add-port=6379/tcp --permanent
sudo firewall-cmd --reload
可以使用 **Reids Desktop Manger **图形化界面连接
sudo yum update(Extra Packages for Enterprise Linux)存储库,此存储库提供额外的软件包。运行以下命令:
sudo yum install epel-releasesudo yum install git- 安装完成后,查看是否已正确安装。运行以下命令:
git --version如果命令返回Git的版本号,那么安装就成功了。
1. 配置用户名
git config --global user.name "zhashut"
2. 配置邮箱
git config --global user.email "[email protected]"
3. 查看配置
git config --global --listserver {
listen 80;
server_name <服务器地址/域名>;
# gzip config
gzip on;
gzip_min_length 1k;
gzip_comp_level 9;
gzip_types text/plain text/css text/javascript application/json application/javascript application/x-javascript application/xml;
gzip_vary on;
gzip_disable "MSIE [1-6]\.";
root /usr/share/nginx/html;
include /etc/nginx/mime.types;
location / {
try_files $uri /index.html;
}
}FROM nginx
WORKDIR /usr/share/nginx/html/
USER root
COPY ./docker/nginx.conf /etc/nginx/conf.d/default.conf
COPY ./dist /usr/share/nginx/html/
EXPOSE 80
CMD ["nginx", "-g", "daemon off;"]- 将代码 push 上 gitee/github 仓库,在服务器的指定文件夹下把代码
clone下来
- 进入该文件中
直接在本地 copy 下面选中的代码,不需要 node_modules


1.根据 Dockerfile 构建镜像:
docker build -t sql-generate-frontend:v0.1 .
2.docker run 启动 -d: 在后台启动
docker run -p 8000:80 -d sql-generate-frontend:v0.1
docker container update --restart=always 容器idsudo firewall-cmd --zone=public --add-port=8000/tcp --permanent
sudo firewall-cmd --reload
到这里如果没有问题的话,访问自己绑定域名就可以看见前端页面了
http://<服务器地址>:8000/# 启动编译环境
FROM golang:1.19-alpine AS builder
# 配置编译环境
ENV GO111MODULE=on \
CGO_ENABLED=0 \
GOOS=linux \
GOARCH=amd64 \
GOPROXY=https://goproxy.cn,direct \
GOBIN=/go/bin
# 创建编译目录
WORKDIR /go/src/sql-generate
# 将代码复制到容器中
COPY go.mod .
COPY go.sum .
# 安装依赖包
RUN go mod tidy
# 将所有源文件复制到容器中
COPY . .
# 编译代码并输出到 /go/bin
RUN go build -o /go/bin/sql-generate .
# 使用 alpine 镜像
FROM alpine:3.18
# 复制构建好的可执行文件到镜像中
COPY --from=builder /go/bin/sql-generate /bin/sql-generate
# 从编译器容器中复制 config.yaml 文件到容器中
COPY --from=builder /go/src/sql-generate/config.yaml /config.yaml
# 申明暴露的端口
EXPOSE 8102
# 设置服务入口
ENTRYPOINT [ "/bin/sql-generate" ]这里忽略把代码 copy 至服务器中了,跟前端一样的,后端是所有代码都要 copy
docker build -t sql-generate -f ./Dockerfile .
docker run -p 8102:8102 -d sql-generate:latest
docker container update --restart=always 容器idsudo firewall-cmd --zone=public --add-port=8102/tcp --permanent
sudo firewall-cmd --reload
package initialize
import (
"context"
"flag"
"fmt"
"github.com/redis/go-redis/v9"
"sql_generate/global"
)
/**
* Created with GoLand 2022.2.3.
* @author: 炸薯条
* Date: 2023/6/22
* Time: 18:28
* Description: 初始化缓存配置
*/
var rdb = flag.Int("rdb", 0, "db")
var rPoolSize = flag.Int("pool_size", 10, "pool_size")
var rhost = flag.String("rhost", "127.0.0.1", "host")
var rpassword = flag.String("rpassword", "写自己的密码", "password")
var rport = flag.Int("rport", 6379, "port")
func InitCache() {
flag.Parse()
global.CaChe = redis.NewClient(&redis.Options{
Addr: fmt.Sprintf("%s:%d", *rhost, *rport),
Password: *rpassword, // 密码
DB: *rdb, // 数据库
PoolSize: *rPoolSize, // 连接池大小
})
_, err := global.CaChe.Ping(context.Background()).Result()
if err != nil {
panic(err)
}
}package initialize
import (
"flag"
"fmt"
"gorm.io/driver/mysql"
"gorm.io/gorm"
"gorm.io/gorm/logger"
"gorm.io/gorm/schema"
"log"
"os"
"sql_generate/global"
"time"
)
/**
* Created with GoLand 2022.2.3.
* @author: 炸薯条
* Date: 2023/6/9
* Time: 20:18
* Description: db 全局初始化
*/
var db = flag.String("db", "sqlfather", "database name")
var host = flag.String("host", "127.0.0.1", "host")
var user = flag.String("user", "root", "user")
var password = flag.String("password", "写上自己的密码", "password")
var port = flag.Int("port", 3306, "port")
func InitDB() {
flag.Parse()
dsn := fmt.Sprintf("%s:%s@tcp(%s:%d)/%s?charset=utf8mb4&parseTime=True&loc=Local",
*user, *password, *host, *port, *db)
newLogger := logger.New(
log.New(os.Stdout, "\r\n", log.LstdFlags),
logger.Config{
SlowThreshold: time.Second,
Colorful: true,
LogLevel: logger.Info,
},
)
var err error
global.DB, err = gorm.Open(mysql.Open(dsn), &gorm.Config{
Logger: newLogger,
NamingStrategy: schema.NamingStrategy{
SingularTable: true, // 自动生成数据库表的时候表名不带s后缀
},
})
if err != nil {
panic(err)
}
}package main
import (
"flag"
"fmt"
"go.uber.org/zap"
"os"
"os/signal"
"sql_generate/initialize"
"syscall"
)
/**
* Created with GoLand 2022.2.3.
* @author: 炸薯条
* Date: 2023/5/14
* Time: 22:10
* Description: No Description
*/
var addr = flag.Int("addr", 8102, "address to listen")
func main() {
flag.Parse()
// 初始化配置
initialize.InitLogger()
//initialize.InitConfig()
initialize.InitDB()
initialize.InitCache()
r := initialize.Router()
// 启动监听端口
zap.S().Debugf("启动服务器,端口:%d", *addr)
go func() {
if err := r.Run(fmt.Sprintf(":%d", *addr)); err != nil {
zap.S().Fatal("启动失败", err.Error())
}
}()
// 优雅退出
quit := make(chan os.Signal)
signal.Notify(quit, syscall.SIGINT, syscall.SIGTERM)
<-quit
zap.S().Infof("服务退出成功")
}# 先登录
docker login docker tag sql-generate:latest ${账户}/sql-generate:backend
docker push ${账户}/sql-generate:backenddocker tag sql-generate-frontend:v0.7 ${账户}/sql-generate:frontend
docker push ${账户}/sql-generate:frontenddocker tag mysql:8.0.26 ${账户}/sql-generate:mysql
docker push ${账户}/sql-generate:mysqldocker tag redis:latest ${账户}/sql-generate:redis
docker push ${账户}/sql-generate:redis












