都说项目部署难倒一大片英雄好汉
今天我一节课把这些知识点都给你讲清楚
这也是我最喜欢go的一大原因
因为相比其他语言的部署,go的部署是最简单的
后端部分
后端开发完成之后,只需要编译为linux环境下的可执行文件即可
如果是windows下开发,执行以下命令即可
SET CGO_ENABLED=0
set GOARCH=amd64
set GOOS=linux
go build -o main
set GOOS=windows
然后将这个打包好的文件,和settings.yaml一起放入服务器
这是我的服务器对应的目录
opt
gin-vue-docs
server
main // 后端打包之后的文件,放上服务器上记得执行 chmod +x main
settings.yaml
uploads // 后端的一些用户上传文件目录
gvd_db_20230826.sql
gvd_server_full_text_index_20230826.json
web
dist // 前端打包之后的目录
gvd_server.ini
nginx.conf
先cd到/opt/gin-vue-docs/server
cd /opt/gin-vue-docs/server
mysql环境搭建
docker pull mysql:5.7
mkdir -p ./mysql/conf ./mysql/datadir
docker run -itd --name mysql --restart=always -p 3306:3306 -v /opt/gin-vue-docs/server/mysql/conf:/etc/mysql/conf.d -v /opt/gin-vue-docs/server/mysql/datadir:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=root -e MYSQL_DATABASE=gvd_db mysql:5.7
创建一个gvd_db 的数据库,root密码是root,端口映射为本机的3306映射到容器的3306
如果你已经有mysql服务了,那你换一个端口就行了,在对应的settings.yaml配置文件修改就ok了
redis环境搭建
docker pull redis:5.0.5
docker run -itd --name redis --restart=always -p 6379:6379 redis:5.0.5 --requirepass "redis"
redis的密码是redis
es环境搭建
mkdir -p es/config & mkdir -p es/data & mkdir -p es/plugins
chmod 777 es/data
echo "http.host: 0.0.0.0" > es/config/elasticsearch.yml
docker run --name docs_es -p 9200:9200 -e "discovery.type=single-node" -e ES_JAVA_OPTS="-Xms84m -Xmx512m" -v /opt/gin-vue-docs/server/es/config/elasticsearch.yml:/usr/share/elasticsearch/config/elasticsearch.yml -v /opt/gin-vue-docs/server/es/data:/usr/share/elasticsearch/data -v /opt/gin-vue-docs/server/es/plugins:/usr/share/elasticsearch/plugins -d elasticsearch:7.12.0
settings文件
因为上面搭建环境,相关的配置已经写死了
所以难得改配置文件的,直接复制这个内容到settings.yaml就行了
system:
ip: 127.0.0.1
port: 8082
env: dev
mysql:
host: 127.0.0.1
port: 3306
config: charset=utf8mb4&parseTime=True&loc=Local
db: gvd_db
username: root
password: root
logLevel: error
redis:
ip: 127.0.0.1
port: 6379
password: "redis"
poolSize: 100
es:
addr: http://127.0.0.1:9200
user:
password:
jwt:
expires: 8
issuer: fengfeng
secret: uis&*jb123
site:
title: fengfeng docs
icon: https://docs.fengfengzhidao.com/static/avatar/zzf-1.png
abstract: |-
枫枫知道官方文档,致力于帮助更多的人学好知识
哔哩哔哩视频总播放量突破10w
文档浏览量突破3w
越来越多的人,开始了解枫枫知道
iconHref: <img src="https://img.shields.io/badge/fengfengdoc-3.0.1-red"><img src="https://img.shields.io/badge/%E6%9E%AB%E6%9E%AB%E7%9F%A5%E9%81%93-6.0.2-brightgreen"><img src="https://img.shields.io/badge/python-3.8.6-yellowgreen"><img src="https://img.shields.io/badge/golang-1.19-orange">
href: ""
footer: ""
content: "# Fengfeng-docs 枫枫知道官方文档\n\n\U0001F30D\n[简体中文](README.md)\n\n一份很全面的全栈知识文档\n包含`前端`、`python`和`golang`,适合零基础入门的同学。\n\n [](http://www.fengfengzhidao.com/)  \n\n## 文档包含:\n\n- python基础文档\n- vue基础文档\n- django基础文档\n- django博客开发文档\n- golang基础文档\n- gin框架文档\n- gorm基础文档\n\n\n\n## 问题相关\n\n有任何问题请添加我的联系方式 2974771769(qq).我会尽快解答.\n\n\n## 打赏\n\n如果您觉得本文档对您有所帮助,欢迎您请我喝杯咖啡,您的支持是我最大的动力,您可以扫描下方二维码为我进行打赏,谢谢。"
导入数据
这个时候,执行 ./main 就能看到东西了
主意这个时候,mysql里面没有表,es里面没有索引,我们需要导入数据
./main -load gvd_db_20230826.sql
./main -esload gvd_server_full_text_index_20230826.json
supervisor
如果你的后端服务,本身是没有操作docker的话,那么可以直接将你的后端程序直接构建为镜像,然后直接在容器里面运行
不过我比较需要在外面运行,我们需要一个程序将我们的服务稳定运行下去,如果出现程序错误,服务器重启,它能够帮助我们重启项目
它就是supervisor
安装
# 安装第三方源,CentOS本身的yum源中没有supervisor,需要更换第三方源:
yum install epel-release -y
# 安装supervisor:
yum install -y supervisor
# 启动supervisor 服务、查看supervisor 服务状态
systemctl start supervisord
# 开机启动
systemctl enable supervisord
[program:gvd_server]
command= /opt/gin-vue-docs/server/main
directory=/opt/gin-vue-docs/server
autorestart=true
autostart=true
stderr_logfile=/opt/gin-vue-docs/server/err.log
stdout_logfile=/opt/gin-vue-docs/server/out.log
environment=ASPNETCORE_ENVIRONMENT=Production
user=root
stopsignal=INT
startsecs=1
stopasgroup=true
killasgroup=true
将这个文件复制到 /etc/supervisord.d/ 目录
# 加载新的服务,ini文件有变化都要执行这个
supervisorctl reload
# 查看服务状态
supervisorctl status
# 重启服务
supervisorctl restart
然后后端部分就可以不用管了
前端部分
直接npm run build
将打包后的 dist目录扔到服务器上即可
nginx配置
如果没有安装nginx,可以推荐先安装nginx
特别不推荐小白一开始就用nginx容器部署项目
因为涉及到两个新的知识,一个nginx,一个docker
搜索nginx安装,网上有一堆教程是教怎么进行源码安装的,搞得那么复杂,其实像nginx这种很广为人知的软件,直接使用yum就可以安装了
yum install -y nginx
配置文件 /etc/nginx/nginx.conf
这个是nginx的主配置文件,我们要在它里面引入其他的配置文件
如果有默认的,要把它删掉
注意,其他地方我省略了
user root;
http {
include /etc/nginx/conf.d/*.conf;
include /opt/*/*.conf;
}
项目的nginx.conf
有域名的话,那个server_name 就写你的域名,子域名也可以
没有就写ip,或者不写,顺便写一个也可以
server {
listen 80;
server_name doc.fengfengzhidao.com;
location / {
try_files $uri $uri/ /index.html; # 解决刷新404问题
root /opt/gin-vue-docs/web/dist;
index index.html index.htm;
}
location /api/ {
# rewrite ^/(api/.*) /$1 break;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header REMOTE-HOST $remote_addr;
proxy_pass http://127.0.0.1:8082/api/;
}
location /uploads/ {
alias /opt/gin-vue-docs/server/uploads/;
}
access_log /opt/gin-vue-docs/access.log;
error_log /opt/gin-vue-docs/error.log;
}
nginx -s reload
执行完成之后,在浏览器中输入服务器ip即可成功看到页面
如果以上这些操作,还是觉得很麻烦,可以使用docker-compose
直接一个命令,部署以上全部环境
编写shell脚本,甚至可以做到一条命令就可以在一套全选的服务器上完成部署
这些知识后续将会讲解到,请持续关注我