Tinywebserver项目运行(docker部署mysql)

news2024/9/22 11:42:08

.

  • 运行项目
  • 运行时遇到的一些其他问题
    • 重启mysql容器时发现端口被占用

前言
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运行项目,运行结果如图:
在这里插入图片描述
出了这个图代表运行成功了


运行时遇到的一些其他问题

重启mysql容器时发现端口被占用

当我使用命令

docker restart mysql

时,系统提示我这个端口正在使用,重启失败,但是我通过docker ps
查看所有正在运行的容器时,并没有mysql,使用 docker stop mysql也无济于事.

如下是解决方法:

sudo lsof -i :端口号

这样就可以找到占用这个端口号的进程,接下来使用指令

sudo kill 进程号

就可以杀死这个进程,正常使用该端口了

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/659321.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

萌萌哒的八戒1

拿到了一个图片&#xff0c;根据图片下方的字符&#xff0c;结合远古时期这个提示&#xff0c;想到了古典密码里的猪圈密码 挨个输入得到when the pig want to eat,套上flag

PyTorch 深度学习 || 2. 全连接网络 | Ch2.3 PyTorch 全连接自编码网络的无监督学习

PyTorch 全连接自编码网络的无监督学习 文章目录 PyTorch 全连接自编码网络的无监督学习1. 数据去噪1.1 计算库和数据准备工作1.2 构建自编码网络1.3 调用主函数1.4 可视化 2. 数据的重建与降维2.1 计算模块和数据的准备2.2 自编码网络数据准备2.3 自编码网络的构建2.4 自编码网…

深入理解程序的结构

文章目录 前言一、程序的组成二、未初始化和初始化变量保存地址三、栈什么时候被创建四、内存映射段总结 前言 本篇文章我们来深入的理解一下理解程序的结构。 一、程序的组成 通常情况下&#xff0c;一个可执行程序由以下几个不同的段组成&#xff1a; 1.代码段 (Text Seg…

怎么针对微服务架构做单元测试?

Martin Fowler 是国际著名的软件专家&#xff0c;敏捷开发方法的创始人之一&#xff0c;现为 ThoughtWorks 公司的首席科学家。在面向对象分析设计、UML、模式、软件开发方法学、XP、重构等方面&#xff0c;都扮演着举足 什么是微服务&#xff1f; 微服务的由来 微服务的前身…

笑谈之传统行业的软件测试

最近进入一传统企业做O2O社区&#xff0c;在里面&#xff0c;项目管理一团混乱&#xff0c;上层对软件测试的理解更是匮乏。今天没有技术&#xff0c;仅是对这些现象的吐槽。当然我相信传统行业不都是这样&#xff0c;所以大家仅当笑谈。 产品经理写的需求文档永远是拿来作为做…

cas单点登录 前端步骤流程

CAS&#xff08;Central Authentication Service&#xff09;是一个开源的单点登录协议和实现&#xff0c;它提供了一种统一的方法来管理和验证用户身份&#xff0c;使用户只需通过一次登录即可访问多个应用程序。CAS 单点登录的工作原理是基于服务提供者 (Service Provider) 和…

MNIST机器学习入门

引入所需库 import osimport cv2 import matplotlib.pyplot as plt import numpy as np import pandas as pd import tensorflow as tf from PIL import ImageMNIST数据集 下载MNIST数据集 mnisttf.keras.datasets.mnist (x_train, y_train), (x_test, y_test) mnist.load_…

【干货】Android系统定制基础篇:第七部分-Android OTA升级(系统、应用)

OTA升级应用 项目地址&#xff1a;https://github.com/aystshen/Android-RomUpgrade. 这是一个负责 Android OTA 升级的后台应用&#xff0c;开机后自动运行后台 Service&#xff0c;支持系统升级和应用升级&#xff0c;支持本地升级&#xff08;tf卡、u盘&#xff09;和在线升…

数据库系统概述——第一章 绪论(知识点复习+练习题)

✨博主&#xff1a;命运之光 &#x1f984;专栏&#xff1a;离散数学考前复习&#xff08;知识点题&#xff09; &#x1f353;专栏&#xff1a;概率论期末速成&#xff08;一套卷&#xff09; &#x1f433;专栏&#xff1a;数字电路考前复习 &#x1f99a;专栏&#xff1a;数…

Qt 每月收支计算

Qt 每月收支计算&#xff0c;针对每月有支出&#xff08;房贷、车贷、花呗、借呗&#xff09;的情况&#xff0c;计算收支明细&#xff0c;直观看到未来的个人经济情况&#xff0c;培养良好的消费习惯&#xff0c;进行理性的财富支配&#xff0c;量入为出。 #include "mai…

云安全技术(三)之云计算相关的安全概念

云计算相关的安全概念 Security Concepts Relevant to Cloud Computing 1. 密码学和密钥管理 Cryptography and key management 1、加密技术: 有许多不同类型和等级的加密技术。在云环境中&#xff0c;云安全专家有责任评价应用程序的需求、所使用的技术、需要保护的数据类型&…

【UE 从零开始制作坦克】5-通过旋转摄像机控制炮塔旋转

效果 步骤 打开动画蓝图“ABP_West_Tank_M1A1Abrams” 我们在动画图表中可以发现控制坦克炮塔旋转和炮管旋转的变量分别是“TurretRotation”和“GunRotattion”&#xff0c;因此只需改变这两个旋转体的值即可控制炮塔和炮管的旋转。 切换到事件图表中&#xff0c;首先通过“T…

单向散列函数【密码学】(一)

目录 一、前言&#xff1a;密码学有什么用&#xff1f; 二、单向散列函数 1、单向函数 2、散列函数 3、单向散列函数 三、怎么解决完整性问题 四、如何设置合适的安全强度 一、前言&#xff1a;密码学有什么用&#xff1f; 二、单向散列函数 单向散列函数就是用来解决…

article-6-pss 并联六自由度机构轨迹规划

建模 ** [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-djltxj90-1687070335773)(data:image/svgxml;utf8, )] ** 程序如下&#xff1a; % clc % clear all % function []PSS1(XP,YP,ZP) tic %%%%%鍒濆浣嶇疆鐨勪綅濮?%%%%% % XP 0; %鍔ㄥ钩鍙…

存储笔记6 SAN

SAN&#xff08;Storage Area Networks&#xff09; SAN 优势 benefitsSAN 组件 componentsSAN连接选项 connective optionsFC协议 FC寻址 protocol addressing\FC拓扑 topologie SAN优缺点 光纤通道 fibre channel SAN组件 FC三种互联 FC端口类型 fabric 企业需要和科技…

RFID期末复习总结

一.概念部分 1.基础概念 射频识别无线电频率识别RFID 应答器&#xff1a;存放识别信息的电子数据载体 阅读器&#xff1a;将识别信息从应答器中读出&#xff08;还可以写入数据&#xff09; 应答器是统称&#xff0c;在各种专业场合有专业名字&#xff0c;比如射频卡&#…

pikachu靶场-PHP反序列化

在理解这个漏洞前,你需要先搞清楚php中serialize()&#xff0c;unserialize()这两个函数。 序列化serialize() 序列化说通俗点就是把一个对象变成可以传输的字符串,比如下面是一个对象: class S{public $test"pikachu";}$snew S(); //创建一个对象serialize($s); //…

FPGA时序约束--进阶篇(主时钟约束)

在FPGA设计中&#xff0c;时序约束的设置对于电路性能和可靠性都至关重要。在上一篇的文章中&#xff0c;已经详细介绍了FPGA时序约束的基础知识。 本文将重点讲解主时钟约束设置&#xff0c;给出详细的约束命令&#xff0c;并介绍了在Vivado中如何写入主时钟约束。 一、主时…

一文详解!接口测试(http与rpc)总结

目录 前言&#xff1a; 一、了解一下HTTP与RPC 二、HTTP接口测试 三、RPC接口测试 四、接口测试用例设计 五、测试思路总结 前言&#xff1a; 在接口测试方面&#xff0c;常见的接口类型有HTTP接口和RPC接口。这两者的测试方法略有不同&#xff0c;在测试前需要进行技术选…

[INFO] [copilotIgnore] inactive,github copilot没反应怎么解决

在使用github copilot的时候&#xff0c;插件不工作&#xff0c;后台出现了这种输出&#xff0c; 这种情况下就是它的激活出现了问题&#xff0c;如果账号的使用权没有问题的话&#xff0c;就将该插件disable之后再重新enable&#xff0c;重新观察输出&#xff0c;就会看到copi…