前言
Tinywebserver是github上一个十分优秀的开源项目,帮助初学者学习如何搭建一个服务器.
本文讲述如何在使用docker部署mysql容器的情况下跟该项目进行连接并将项目运行起来,而不是直接使用普通的mysql与该项目连接
主流的运行方式
运行Tinywebserver服务器
下面讲述如何把mysql容器和项目进行连接,前提是你需要有一个正在运行的mysql容器.
1.下载项目的源代码
git clone https://github.com/qinguoyi/TinyWebServer.git
2.使用文本编辑器或者Clion打开项目,找到main.cpp
在这个位置,写入你docker中mysql容器的用户名,密码,还有数据库的名字,这里数据库的名字随意.
3.进入mysql容器之中创建一个跟你上面名字一样的数据库(前提是保证你的mysql容器正在运行,可以参考之前的文章)
docker exec -it mysql bash
mysql -u root -p
创建一个数据库
create database yourdb;
USE yourdb;
CREATE TABLE user(
username char(50) NULL,
passwd char(50) NULL
)ENGINE=InnoDB;
INSERT INTO user(username, passwd) VALUES('name', 'passwd');
这样才能跟项目中登陆界面的用户名-密码相匹配.
运行好项目之后,用户的登录名-密码就会存在这个表之中
4.将mysql的容器的ip地址和端口绑定到项目上
在项目中的sql_connection.cpp文件中,定义了数据库的属性IP地址,端口,数据库名,密码等.
然后在项目中的Webserver.cpp中,定义了初始化数据库连接池的函数
其中url默认是 localhost
如果你是直接下载的mysql,而非docker实例化的mysql容器的话,这里的localhost是不需要更改的.
但是如果是docker实例化的mysql容器,我们需要把localhost替换成mysql容器的IP地址
我们可以用如下方式查看容器的IP地址:
docker inspect -f '{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' <容器名称或容器ID>
之后就会在控制台上显示一行ip地址,替换localhost即可
接下来我们还要检查一下端口,原项目默认的端口是3306,如果你的mysql容器所占用的端口不是3306的话,你需要也把这里的3306替换成的mysql容器的端口
使用命令
docker ps
即可看到mysql容器对应的端口了
绑定好mysql容器的端口和ip地址之后,接下来的操作就都一样了
5.编译Tinywebserver服务器项目
cd Tinywebserver
sh ./build.sh
编译时遇到的错误:fatal error: mysql.h: No such file or directory
解决方法:安装链接库
apt-get install libmysqlclient-dev
./server
此时命令是不会退出的,会一直占用控制台.
如果命令直接退出,就是运行失败,此时可以查看项目的日志查看报错信息;在项目中会生成一个serverlog文件
如果该文件中有这样的提示,说明数据库没连接上
你需要检查你的数据库名,密码,IP地址,端口,表结构等信息确保数据库没有问题.
接着在浏览器中输入 ip地址:9006即可进入项目
查看虚拟机的ip地址:
ip addr
端口9006是项目默认的端口
它的位置在Config.cpp文件中,可以自行修改
接下来就可以直接在浏览器中输入 ip:9006运行项目,运行结果如图:
出了这个图代表运行成功了
当我使用命令
docker restart mysql
时,系统提示我这个端口正在使用,重启失败,但是我通过docker ps
查看所有正在运行的容器时,并没有mysql,使用 docker stop mysql也无济于事.
如下是解决方法:
sudo lsof -i :端口号
这样就可以找到占用这个端口号的进程,接下来使用指令
sudo kill 进程号
就可以杀死这个进程,正常使用该端口了