安装mysql并启动

1
2
3
4
sudo apt update
sudo apt install -y mysql-server-8.0
sudo systemctl start mysql
sudo systemctl enable mysql

安装redis并启动

1
2
3
4
sudo apt update
sudo apt install -y redis-server
sudo systemctl start redis
sudo systemctl enable redis

安装go环境

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
pwd 
# 查看所在当前文件夹

mkdir go_zhuce
# 创建文件夹

cd go_zhuce
# 进入指定文件夹

wget https://go.dev/dl/go1.20.linux-amd64.tar.gz
# 下载文件到当前目录

tar -xvf go1.20.linux-amd64.tar.gz
# 解压到当前目录


echo "export PATH=\$PATH:/usr/local/go/bin" >> ~/.profile
# 添加环境变量永久生效,路径为go的解压目录

source ~/.profile
# 刷新环境变量

# 验证安装
go version
# 查看go版本

mysql的创建与使用

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
sudo mysql -u root
# 免密码登录

ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY '密码';
# 修改root用户密码

FLUSH PRIVILEGES;
# 刷新权限
EXIT;
# 退出mysql

mysql -u root -p
# 登录mysql用密码

CREATE DATABASE IF NOT EXISTS go_zhuce
# 创建数据库
CHARACTER SET utf8mb4
# 设置字符集为utf8mb4
COLLATE utf8mb4_unicode_ci;
# 设置排序规则为utf8mb4_unicode_ci ,排序规则,不区分大小写,兼容性最好

CREATE USER 'go_user'@'127.0.0.1' IDENTIFIED BY 'Ww12300..';
# 创建用户go_user,密码为你的安全密码

# 为什么不用 root?
#root 是最高权限,一旦泄露,整个数据库都危险
#项目专用账号 权限最小化,安全规范

GRANT SELECT, INSERT, UPDATE, DELETE ON go_zhuce.* TO 'go_user'@'127.0.0.1';
# 授权go_user用户对go_zhuce数据库的SELECT,INSERT,UPDATE,DELETE权限
GRANT CREATE, ALTER, INDEX, DROP ON go_zhuce.* TO 'go_user'@'127.0.0.1';
# 授权go_user用户对go_zhuce数据库的CREATE,ALTER,INDEX,DROP权限

FLUSH PRIVILEGES;
# 刷新权限
EXIT;
# 退出mysql

首次使用redis需要设置redis密码,设置redis密码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15

sudo nano /etc/redis/redis.conf
# 编辑redis配置文件,添加密码
# 把# requirepass foobared修改密码
requirepass w123 ..
# 保存退出编辑

sudo systemctl restart redis
# 重启redis服务,使配置生效

redis-cli -a w..
# 登录redis,密码为w123456

exit
# 退出redis

配置环境变量用于设置go语言

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
# 复制环境变量模板到当前目录
cp .env.example .env
nano .env
# 配置验证登录态的jwt以及相关环境的密码等

# 生产环境改为 production
APP_ENV=production
APP_DEBUG=false

# MySQL 配置(用刚创建的账号)
DB_USER=go_user
DB_PASSWORD=你的安全密码
DB_NAME=go_zhuce

# Redis(如果 Redis 有密码则填写)
REDIS_PASSWORD=w123 ..

# JWT 密钥(改为随机长字符串,务必修改!)
JWT_SECRET=这里填一个至少32位的随机字符串,不要用默认值

# AES/SM4 加密密钥(修改为32位十六进制字符)
ENCRYPTION_KEY=这里填32位十六进制字符

生成rsa密钥对,防止中间人篡改请求,验证rsa签名匹配性,匹配则未被其他人篡改

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
# nano 创建一个脚本gen_rsa.go
#放入代码
package main

import (
"go_zhuce/config"
"go_zhuce/pkg/encrypt"
"github.com/joho/godotenv"
)

func main() {
_ = godotenv.Load()
cfg := config.Init()

priv, pub, _ := encrypt.GenerateRSAKeyPair(2048)
encrypt.SaveRSAPrivateKey(cfg.RSA.PrivateKeyPath, priv)
encrypt.SaveRSAPublicKey(cfg.RSA.PublicKeyPath, pub)
println("RSA 密钥生成成功!")
}
# 生成私钥文件,密钥长度为2048位
#CTRL o 和在ctrl x 保存退出编辑
go run gen_rsa.go
# 运行脚本,生成rsa密钥对
# 文件路径从脚本中读取的配置文件获取

编译并运行测试

1
2
3
4
5
6
7
8
9
go mod tidy
#下载go依赖

go build -o go_zhuce
#编译为二进制文件go_zhuce

./go_zhuce
# 运行go_zhuce可执行文件进行测试

配置systemd服务把,注意工作目录要设置为go_zhuce文件夹

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
sudo nano /etc/systemd/system/go_zhuce.service
# 编辑systemd服务文件
[Unit]
Description=go_zhuce api
After=network.target mysql.service redis.service
Wants=mysql.service redis.service

[Service]
Type=simple
User=root
WorkingDirectory=/home/ubuntu/go_luntan/go_zhuce
ExecStart=/home/ubuntu/go_luntan/go_zhuce/go_zhuce
Restart=always
RestartSec=5
StandardOutput=journal
StandardError=journal
Environment=GIN_MODE=release

[Install]
WantedBy=multi-user.target
1
2
3
4
5
6
7
8
9
10
11
12
13
14
sudo systemctl daemon-reload
# 重新加载systemd配置
sudo systemctl enable go_zhuce
# 启动go_zhuce服务
sudo systemctl start go_zhuce
# 启动go_zhuce服务
sudo systemctl status go_zhuce
# 查看go_zhuce服务状态

# 查看实时日志
sudo journalctl -u go_zhuce -f

# 重启服务(更新代码后)
sudo systemctl restart go_zhuce

申请ssl证书

1
2
3
4
5
6
7
8
9
10
11
12
sudo ln -s /etc/nginx/sites-available/zhiand.com /etc/nginx/sites-enabled

# 启动nginx服务
# 建立快捷方式使得网站配置生效,


# 安装certbot
sudo apt install certbot python3-certbot-nginx -y

sudo certbot --nginx -d zhiand.com -d www.zhiand.com
# 安装certbot的nginx插件

前端编写

1
2
# 前端将不再用vue编写,vue只是html和css和js编写的上层建筑,或者写前端三剑客的一个工具而已