服务器部署笔记
使用 docker 拉取 mysql 镜像,使用这个镜像创建容器并运行,这样就创建了一个数据库,但是此时是没有任何表以及信息的,所以我们就要从本地导入
.sql
文件了。将
.sql
文件导入。首先,拷贝文件到 docker 里面,
docker cp /root/GoNoteProject/go-note/dao/sql/notes.sql mysql5.7:/notes.sql
,这就是这个命令将本地路径下的notes.sql
文件拷贝到容器名为mysql5.7:/
的主目录下。然后,
docker exec -it mysql5.7 bash
,使用容器名,启动容器。最后,进入 bash 界面时可以使用所有的 Linux 命令的,我们使用
mysql -u root -p test < /notes.sql
将notes.sql
导入数据库test
,用户名root
。我们就能使用mysql -u root -p
进入数据库查看导入好的数据了。docker cp /root/go/go-note/dao/notes.sql mysql57:/notes.sql
docker cp /root/go/go-note/dao/notes.sql mysql57:/users.sql
docker exec -it mysql5.7 bash
mysql -u root -p test < /notes.sql
mysql -u root -p test < /users.sql
-p 3306:3306
: 将容器内部的 MySQL 3306 端口映射到主机的 3306 端口。这使得你可以通过主机上的 3306 端口连接到 MySQL 服务器。
要在 Linux 分别安装前端
react
所需要的nodejs
以及配置 go 环境。部署前端需要使用
nginx
所以下载一下,react
前端打包后为build
文件,我们把build
文件的路径/root/GoNoteProject/react-note/buil
写到nginx
下的conf
里面的nginx.conf
的根下面更改用户权限为root
,然后进入到nginx
下的sbin
里面使用./nginx
启动前端,前端也就部署好了。关闭前端的端口:
这个错误消息表明 Nginx 无法绑定到 0.0.0.0:80 这个地址,因为该地址已经被其他进程占用。
1.找出占用端口 80 的进程: 使用以下命令找出占用端口 80 的进程以及其进程
ID(PID)
:sudo lsof -i :80
这将列出占用端口 80 的进程的信息。
2.终止占用端口 80 的进程:
sudo kill -9 12345
-9 是强制终止选项,如果进程不响应正常的终止信号,可以使用该选项。
3.重新启动
Nginx
:sudo service nginx start
部署 go 后端。
想要重启 go 程序的话就要关掉已经监听的端口了。
1.使用命令查找占用端口的进程: 运行以下命令来查找占用端口 8089 的进程:
sudo lsof -i :8089
这将显示占用端口 8089 的进程的详细信息,包括进程
ID(PID)
。2.终止占用端口的进程: 使用 kill 命令来终止占用端口 8089 的进程。如果你得到了占用端口的进程的
PID
,例如12345
,则可以运行以下命令:sudo kill -9 12345
-9 是强制终止选项,如果进程不响应正常的终止信号,可以使用该选项。
3.这样就可以重新启动 go 了,如果还不行,那就是其它应用占用这个端口了。
关联前端和后端,需要在
nginx/conf/nginx.conf
下修改
sudo docker run -p 3306:3306 --name mysql57 -e MYSQL_ROOT_PASSWORD=123456 -d mysql:5.7
1.检查 firewalld 防火墙状态: 使用以下命令检查 firewalld 防火墙的状态:
sudo systemctl status firewalld
如果 firewalld 正在运行,你将看到有关防火墙状态的信息。
2.停止 firewalld 防火墙: 如果 firewalld 防火墙正在运行,可以使用以下命令停止它:
sudo systemctl stop firewalld
这将停止 firewalld 防火墙服务。
前端 docker 部署
docker build -t react-app .
构建docker
镜像docker run -d -p 8080:80 react-app
运行docekr
容器
后端 docker 部署
docker run -d -p 8082:8082 go-app
该错误是由于你在 Dockerfile 中将 CMD 设置为空,导致在容器启动时没有默认命令可执行。
1.启动容器并进入交互式终端:
docker run -it -p 8082:8082 go-app /bin/bash
这个命令使用 -it 选项启动容器并进入交互式 Bash 终端。
2.在容器内部手动执行你的应用程序:
./app
# 使用 docker 成功部署项目即 mysql 操作:
1.更改 MySQL 用户密码: ALTER USER 'root'@'localhost' IDENTIFIED BY '123456'; 这个 SQL 命令用于修改 MySQL 数据库中 'root' 用户在 'localhost' 主机上的密码为 '123456'。这是通过 IDENTIFIED BY 子句实现的。
2.授予 MySQL 用户权限: GRANT ALL PRIVILEGES ON . TO root@'%' IDENTIFIED BY '123456'; GRANT ALL PRIVILEGES ON . TO 'root'@'%' IDENTIFIED BY '123456' WITH GRANT OPTION; 这两个 SQL 命令用于授予 'root' 用户在任何主机('%' 表示所有主机)上对所有数据库的全部权限。 第二个命令还包括了 WITH GRANT OPTION,这表示 'root' 用户可以将自己拥有的权限授予其他用户。
3.运行 Docker 容器: docker run -p 8802:80 -p 8082:8082 -e DATABASE_HOST=host.docker.internal -e DATABASE_PORT=3306 -v /Go_project/docker-project/go-note/logs:/logs/ note-image
4.保存 Docker 镜像为 tar 文件: docker save -o image.tar note-images 这个命令将名为 note-images 的 Docker 镜像保存为名为 image.tar 的 tar 文件。这样可以将镜像文件分享给其他人或在不同的环境中加载。
5.从 tar 文件加载 Docker 镜像: docker load -i image.tar
# 开机自动启动
1.创建 Systemd 服务文件:
在 /etc/systemd/system/ 目录下创建一个以 .service 结尾的文件,例如 myapp.service。编辑该文件,指定容器的启动命令和相关配置。以下是一个示例:
[Unit]
Description=My Note App Container
After=docker.service network-online.target
Wants=network-online.target
[Service]
ExecStartPre=-/usr/bin/docker stop mynote-container
ExecStartPre=-/usr/bin/docker rm mynote-container
ExecStart=/usr/bin/docker run -p 8802:80 -p 8082:8082 -e DATABASE_HOST=host.docker.internal -e DATABASE_PORT=3306 -v /Go_project/docker-project/go-note/logs:/logs/ --name=mynote-container note-image
Restart=always
User=root
[Install]
WantedBy=default.target
2.重新加载 Systemd 配置: sudo systemctl daemon-reload
3.启动服务: sudo systemctl start myapp
4.设置开机启动: sudo systemctl enable myapp