go从0到1项目实战体系四十:生产环境搭建

本文详细描述了如何在Docker中部署MySQL数据库,包括配置文件my.cnf设置,解决权限问题,以及使用Go语言编译和在生产环境中通过Nginx进行反向代理的实践。
摘要由CSDN通过智能技术生成

1. 数据库:

(1). docker文件结构:

mysql
├─ data
├─ mylog
└─ conf 
    └─ my.cnf(配置文件放在这)

(2). my.conf:

[client]
default-character-set=utf8mb4
[mysql]
default-character-set=utf8mb4

[mysqld]
// 数据目录
datadir=/data
character-set-server=utf8mb4 
collation-server=utf8mb4_unicode_ci 
init_connect='SET NAMES utf8mb4'
default-storage-engine=INNODB
// 开启mysql日志
log-error=/mylog/error.log
slow_query_log=on
long_query_time=1
slow-query-log-file=/mylog/slow.log

(3). 命令:

docker run --name mysql -d \
-p 3306:3306 \
-v /home/root/mysql/data:/data \
-v /home/root/mysql/conf/my.cnf:/etc/mysql/my.cnf \
-v /home/root/mysql/mylog:/mylog \
-e MYSQL_ROOT_PASSWORD=123456 \
mysql:5.7

:. 有防火墙则开启:
   sudo iptables -I INPUT -p tcp --dport 3306 -j ACCEPT. 生产环境是不需要端口映射的,直接连接容器中的ip地址和端口.

(4). 权限问题:

. 启动不了,查看docker日志:
    docker logs mysql
    报错:Could not open file 'mylog/error.log' fro error logging:Permission denied 

②. 查看文件:
    ll
    drwxrwxr-x. 6 systemd-bus-proxy root 4096 Nov 24 23:19 data
    drwxrwxr-x. 6 david david 4096 Nov 24 23:19 data

③. 生成临时容器查看用户:
    docker run -it --rm --entrypoint="/bin/bash" mysql:5.7 -c "cat /etc/group "
    mysql:x:999:              // 可以看到mysql运行对应的用户是999,注:不同的机器值不同.
    a. 因为容器默认使用的是mysql用户,需要把映射的文件夹修改对应的owner.. 设置mylog用户:
    cat /etc/passwd
    polkitd:x:999:998:User for polkitd:/:/sbin/nologin       // 查到宿主机的999对应polkitd用户
    chown -R 999 mylog
    a. 让容器中的999用户和本机的999用户有同一个id,并不一定是同一个用户名.. 查看并测试慢日志记录:
    show variables like 'log%';
    select sleep(3)

4. go编译:

(1). 交叉编译后传到服务器:

set GOOS=linux
set GOARCH=amd64
go build -o build/gin main.go

:. 交叉编译是指可以编译成.exe可执行程序,也可以编译成linux可执行程序.

(2). 配置goland和服务器ssh同步:

这里一定要点一下获取根目录:

①. Local path:表示哪个目录需要上传到服务器.

②. Deployment path:配合上面的root path表示上传到服务器哪个目录.

上传后在服务器加上可执行权限:

chomd +x gin

5. 生产环境:

①. gin在生产环境,不可能就是一个build后的一个可执行文件在线上运行.
②. 浏览器访问,不是直接访问go的服务.而是访问nginx或其它网关.
③. nginx用一个反向代理,这个是对外的.gin服务不对外.不映射端口(由nginx进行反向代理).
④. 如果还有业务功能,可以结合consul来自动发现.
⑤. 访问过程:
   nginx -> gin -> mysql

(1). gin容器:

①. go可以支持交叉编译,所以,只要一个alpine镜像就可以了.

②. 拉取镜像:
   docker pull alpine

③. 容器:
   docker run --name ginserver -d \
   -v /home/root/web:/server \
   -w /server \
   alpine ./gin

(2). nginx容器:

①. 拉取镜像:
   docker pull nginx:alpine

③. 配置文件:
user nginx;
worker_processes auto;
error_log  /var/log/nginx/error.log warn;
pid   /var/run/nginx.pid;
events {
    worker_connections 1024;
}
http{
    include   /etc/nginx/mime.types;
    default_type application/octet-stream;
    keepalive_timeout 65;

    upstream gin {
        server 10.3.69.3:8080;
    }
    server {
        listen 80;
        location / {
            proxy_pass http://gin;   // 这个gin就是上面写的gin
            #proxy Settings
            proxy_redirect off;
            proxy_set_header Host $host;
            proxy_set_header X-Real-IP $remote_addr;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        }
    }
}

③. 查看端口:
   docker inspect mysql | grep IP

④. 容器:
   docker run -d --name ngx \
   -v /home/root/ngx/nginx.conf:/etc/nginx/nginx.conf \
   -p 80:80
   nginx:alpine
  • 4
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值