当前位置: 首页 > news >正文

自己有域名怎么做免费网站crm系统解决方案

自己有域名怎么做免费网站,crm系统解决方案,贵阳商城网站开发,怎么通过数据库做网站的登录本文目录 Github Webhooks 介绍Webhooks 工作原理配置与验证应用云服务器通过 Webhook 自动部署网站实现复制私钥编写 webhook 接口Github 仓库配置 webhook以服务的形式运行 app.py Github Webhooks 介绍 Webhooks是GitHub提供的一种通知方式#xff0c;当GitHub上发生特定事… 本文目录 Github Webhooks 介绍Webhooks 工作原理配置与验证应用云服务器通过 Webhook 自动部署网站实现复制私钥编写 webhook 接口Github 仓库配置 webhook以服务的形式运行 app.py Github Webhooks 介绍 Webhooks是GitHub提供的一种通知方式当GitHub上发生特定事件时会向指定的外部Web服务器发送HTTP POST请求从而通知这些服务器有关事件的信息。 通过配置Webhooks开发者可以在GitHub上发生特定事件时如代码推送、拉取请求创建、评论等自动接收事件数据并在外部服务器上执行相应的操作如持续集成、代码审查、部署等。 Webhooks 工作原理 事件触发当GitHub上发生订阅的事件时如代码推送到特定分支GitHub会识别这一事件并触发Webhook。 发送请求GitHub 将构造一个包含事件数据的 HTTP POST 请求并将该请求发送到开发者在 Webhook 配置中指定的 URL。 接收与处理外部 Web 服务器接收来自 GitHub 的 POST 请求并解析请求体中的事件数据。根据事件数据的具体内容服务器可以执行相应的操作如触发构建流程、发送通知、更新数据库等。 配置与验证 配置 Webhook在GitHub上开发者可以为特定的仓库或组织配置Webhook。配置过程中需要指定Webhook的URL即外部Web服务器的接收地址以及要订阅的事件类型。 安全验证为了确保Webhook的安全性GitHub提供了Secret密钥和签名验证机制。开发者可以在配置Webhook时设置一个Secret密钥GitHub在发送POST请求时会使用该密钥对请求体进行哈希计算并将哈希值包含在请求头中如X-Hub-Signature-256。外部Web服务器在接收请求时可以使用相同的Secret密钥对请求体进行哈希计算并将计算得到的哈希值与请求头中的哈希值进行比较以验证请求的真实性。 应用 应用场景 持续集成当代码推送到GitHub时自动触发构建和测试流程。代码审查当拉取请求创建或更新时自动通知审查者进行代码审查。部署当构建成功或测试通过时自动将代码部署到生产环境。通知与监控当发生特定事件时向指定的通知渠道如Slack、Discord等发送通知。 优势 实时性Webhook允许在事件发生时立即接收通知并执行操作无需轮询API。自动化通过Webhook可以实现自动化的工作流程减少手动操作。可扩展性Webhook可以与各种外部服务和工具集成扩展GitHub的功能。安全性通过Secret密钥和签名验证机制确保Webhook的安全性。 云服务器通过 Webhook 自动部署网站 GitHub 用来存放代码等资源使用第三方网站托管平台或者云服务器来部署网站的静态资源。本地的电脑上存放网站的静态资源每次网站更新执行 git push 命令将网站的静态资源上传到 Github 之后GitHub 会通过 webhook 来通知第三方网站托管平台或者云服务器执行 pull 操作从 GitHub 仓库中拉取网站的静态资源自动部署网站。 第三方网站托管平台有很多自行上网搜索且操作流程都很简单都是自动的不需要执行什么操作。这里就不做介绍。 下面介绍的是在云服务器上部署网站使其在仓库更新时自动从 GitHub 上拉取网站的静态资源部署到云服务器的 Tomcat 上。 至于云服务器部署 tomcat请参见往期文章 Ubuntu 服务器部署 Tomcat 并配置 SSL/TLS 证书 。 思路创建一个可以接收 webhook HTTP POST 的进程使用 Tomcat 用户的权限并以系统服务的形式将该进程一直运行在后台以接收 Github webhook HTTP POST。使用 ssh 协议从 Github 拉取网站代码并进行网站部署。 实现 ssl 远程云服务器ssl -i /path/to/id_rsa userserver_IP 提升管理员权限 sudo -i 。 复制私钥 创建文件夹mkdir /opt/tomcat/.ssh 用来存放 ssh 私钥 (我这里的 /opt/tomcat 路径是 tomcat 用户的主目录)。将私钥文件通过 scp 命令复制到服务器上。因为云服务器要通过私钥ssh 协议来访问 Github 的仓库。Github 已经配置了和私钥对应的公钥。 scp -i /path/to/id_rsa /path/to/id_rsa_corresponding_to_Github_publicKey userserver_IP:/path/to/store/id_rsa 复制到服务器后将私钥复制到 /opt/tomcat/.ssh 目录下 cp /home/ubuntu/id_rsa /opt/tomcat/.ssh/ 修改 .ssh/* 文件的权限chown -R tomcat:tomcat /opt/tomcat/.ssh chmod 700 /opt/tomcat/.ssh chmod 700 /opt/tomcat/.ssh/id_rsa 编写 webhook 接口 编写 webhook 接口用什么语言都可以C/C 、Java、Python、node.js 等都可以。 我这里使用 Python 来写因为 Ubuntu 一般自带 Python3 且 Python 语法简单。python3 --version if python3 is not installed, execute command sudo apt install python3 to install it. Examine that you have installed pip and venv. rootVM-0-17-ubuntu:/opt/webhooks/example# pip Command pip not found, but can be installed with: apt install python3-pip rootVM-0-17-ubuntu:/opt/webhooks/example# dpkg -s python3-venv dpkg-query: package python3-venv is not installed and no information is available Use dpkg --info ( dpkg-deb --info) to examine archive files.从上面的执行结果来看我的这台 Ubuntu 的云服务器上没有安装 Python 的包管理工具 pip 和 虚拟环境工具 venv。执行命令安装sudo apt install python3-pip python3-venv 。 创建文件夹 mkdir -p /opt/webhooks/example 用来编写 webhook 接口。 cd /opt/webhooks/example创建 Python 的虚拟环境python3 -m venv myenv 。这将会在当前目录下创建一个名为 myenv 的文件夹里面包含了 Python 解释器和虚拟环境所需的所有文件。创建虚拟环境后激活虚拟环境使用 pip 安装的所有第三方包都将会安装在 当前 /opt/webhooks/example/ 目录下而不是安装在全局环境下。安装在全局环境下的话会导致第三方包的版本混乱比如你的机子上有很多 Python 项目每个项目都使用了指定版本的第三方包如果都安装在全局环境就会导致混乱或者执行代码时报包的版本错误所以创建虚拟环境用来隔离不同的项目的环境。 rootVM-0-17-ubuntu:/opt/webhooks/example# python3 -m venv myenv rootVM-0-17-ubuntu:/opt/webhooks/example# ls myenv创建了虚拟环境后需要激活当前环境Linux 系统使用命令 source myenv/bin/activate rootVM-0-17-ubuntu:/opt/webhooks/example# ls myenv rootVM-0-17-ubuntu:/opt/webhooks/example# source myenv/bin/activate (myenv) rootVM-0-17-ubuntu:/opt/webhooks/example#Windows 上激活虚拟环境在 Command Prompt(CMD) 下使用 myenv\Scripts\activate.bat 激活。在 PowerShell 下激活先设置 PowerShell 有执行脚本的权限Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope CurrentUser然后执行 myenv\Scripts\Activate.ps1 激活关闭 PowerShell 执行脚本权限 Set-ExecutionPolicy -ExecutionPolicy Restricted -Scope CurrentUser 。允许 PowerShell 执行脚本通常不安全不建议使用 PowerShell 激活 Python 虚拟环境。无论 Windows 还是 Linux取消虚拟环境的激活使用命令 deactivate 。 激活了虚拟环境后安装 Flask pip install Flask 。What’s Flask? Read Below: Flask is a popular, lightweight web framework for Python, used for building web applications and APIs. It’s classified as a micro-framework because it provides the essential tools and features for building web apps, but it doesn’t come with some of the heavier components that larger frameworks like Django provide (e.g., built-in ORM, form handling, etc.). Flask is designed to be simple, flexible, and easy to extend, which makes it a great choice for both beginners and advanced developers. It allows you to build anything from small, simple websites to large, complex applications. Key Features of Flask Minimalistic and Lightweight: Flask doesn’t force you to use any specific tools or libraries. It’s designed to be flexible and allows you to use only what you need for your project. Routing: Flask provides an easy-to-use routing system, which means you can map URLs to specific Python functions (known as views). For example, you can easily set up routes for different pages of your web application. Template Engine: Flask uses the Jinja2 template engine, which allows you to separate the HTML structure from the Python code. It lets you embed dynamic content into HTML templates with the power of Python code. Development Server and Debugger: Flask includes a built-in development server with an interactive debugger that makes it easy to test and debug your application. RESTful Support: Flask is widely used for building REST APIs, thanks to its simplicity and the ability to integrate with tools like Flask-RESTful, Flask-SQLAlchemy, etc. Extensibility: You can extend Flask with a wide variety of third-party libraries or plugins to add more features, such as database integration, authentication, and form validation. Flexibility: Unlike Django, Flask gives you full control over how you structure your application. You can choose your own database, authentication methods, and other components. WSGI Compliance: Flask is WSGI-compliant, meaning it’s compatible with any WSGI-compliant server, like Gunicorn or uWSGI, for production environments. 编写 webhook 接口的 python 代码 vim app.py import os import shutil import subprocess from flask import Flask, request, jsonifyapp Flask(__name__)app.route(/webhook, methods[POST]) def webhook():# 验证 GitHub Webhook 是否发送的正确请求可以添加 GitHub Secret 密钥验证if request.method POST:payload request.jsonprint(fReceived payload: {payload})# 拉取最新代码pull_code()return jsonify({message: Webhook received and deployment triggered!}), 200def pull_code():拉取 GitHub 仓库的最新代码并部署到 Tomcat 的 webapps/blog 目录repo_dir /opt/webhooks/exampleos.chdir(repo_dir)blog_dir os.path.join(repo_dir, blog)# 如果 blog 目录不存在则从 GitHub 克隆仓库if not os.path.exists(blog_dir):print(fCloning the repository into {blog_dir}...)mkdir_result subprocess.run([mkdir, blog], stdoutsubprocess.PIPE, stderrsubprocess.PIPE)if mkdir_result.returncode ! 0:print(fError mkdir dir blog: {mkdir_result.stderr.decode()})returnresult subprocess.run([git, clone, --depth, 1, gitgithub.com:User-Name/Repository-Name.git, blog_dir], stdoutsubprocess.PIPE, stderrsubprocess.PIPE)if result.returncode ! 0:print(fError cloning repository: {result.stderr.decode()})returnelse:# 如果 blog 目录已经存在拉取最新代码print(Pulling the latest code from GitHub...)result subprocess.run([git, -C, blog_dir, pull, origin, main], stdoutsubprocess.PIPE, stderrsubprocess.PIPE)if result.returncode ! 0:print(fError pulling code: {result.stderr.decode()})return# 复制代码到 Tomcat webapps/example 目录tomcat_blog_dir /opt/tomcat/webapps/example # Tomcat 下的 blog 目录if os.path.exists(tomcat_blog_dir):shutil.rmtree(tomcat_blog_dir) # 清除旧的 blog 目录shutil.copytree(blog_dir, tomcat_blog_dir) # 复制新代码print(Code deployed to Tomcat webapps/blog)if __name__ __main__:app.run(host127.0.0.1, port12345, debugFalse) # 启动 Flask 应用代码中程序监听了本机 127.0.0.1 的 12345 端口一旦接收了 Github webhook 发出的 HTTP HOST就使用子进程 subprocess 执行从仓库拉取代码以及资源文件的操作将仓库中所有的子文件保存到 /opt/webhooks/example/blog 下面然后清除 /opt/tomcat/webapps/example 里面旧的代码和资源将新的代码以及资源复制进去。根据需求自行修改代码。 由于我的服务器中运行了 apache2它监听了 443 端口并反向代理到 tomcat所以也要将 webhook 反向代理到本机的 12345 端口。 编辑 apache2 的配置文件我这里的是 /etc/apache2/sites-available/my_conf.conf # 反向代理配置ProxyPreserveHost On# 反向代理到 webhook 的接口ProxyPass /webhook http://127.0.0.1:12345/webhookProxyPassReverse /webhook http://127.0.0.1:12345/webhook# 反向代理到 TomcatProxyPass / http://127.0.0.1:8080/ProxyPassReverse / http://127.0.0.1:8080/注意 webhook 接口的反向代理要放在 tomcat 的反向代理前面因为反向代理的顺序是配置文件中的从上往下如果 tomcat 的反向代理放在前面那么路径为 /webhook 的 HTTPS 请求将会被反向代理到 tomcat而 tomcat 中我并没有写 webhook 的接口。 编辑完成 apache2 的配置文件后systemctl restart apache2 重启 apache2 。 先以 root 身份运行 app.py测试反向代理是否配置成功 (myenv) rootVM-0-17-ubuntu:/opt/webhooks/example# ls app.py myenv (myenv) rootVM-0-17-ubuntu:/opt/webhooks/example# python3 app.py* Serving Flask app app* Debug mode: off WARNING: This is a development server. Do not use it in a production deployment. Use a production WSGI server instead.* Running on http://127.0.0.1:12345 Press CTRLC to quit然后在本地使用 curl 命令验证 $ curl -X POST https://example.jackey-song.com/webhook -H Content-Type: application/json -d {event: user_signup, data: {username: john_doe, email: johnexample.com}} {message:Webhook received and deployment triggered!}curl -X 指定方法 POST-H 设置请求头指定发送的数据是 JSON 格式。-d 请求体中的 JSON 数据。确保数据格式正确。 curl 指令执行后可以看到服务器端输出说明反向代理配置成功 (myenv) rootVM-0-17-ubuntu:/opt/webhooks/example# python3 app.py* Serving Flask app app* Debug mode: off WARNING: This is a development server. Do not use it in a production deployment. Use a production WSGI server instead.* Running on http://127.0.0.1:12345 Press CTRLC to quit Received payload: {event: user_signup, data: {username: john_doe, email: johnexample.com}} Cloning the repository into /opt/webhooks/example/blog... The authenticity of host github.com (xxx.xxx.xxx.xxx) cant be established. ED25519 key fingerprint is SHA256:DiY3wvvV6TuJJhbpZisF/zLDA0zPMSvHdkr4UvCOqU. This key is not known by any other names. Are you sure you want to continue connecting (yes/no/[fingerprint])? yes Error cloning repository: Cloning into /opt/webhooks/example/blog... Warning: Permanently added github.com (ED25519) to the list of known hosts. gitgithub.com: Permission denied (publickey). fatal: Could not read from remote repository.Please make sure you have the correct access rights and the repository exists.127.0.0.1 - - [29/Nov/2024 17:19:00] POST /webhook HTTP/1.1 200 -从输出的结果来看从 github 上克隆仓库内容并没有成功因为 root 用户没有权限之前配置的 id_rsa 私钥文件是放在 tomcat 用户的主目录下的 /opt/tomcat/.ssh/id_rsa。后文会以 tomcat 的权限来运行 app.py。下面配置 Github 仓库那边的 webhook 。 Github 仓库配置 webhook Github — 对应的 repository — settings — Webhooks — add webhook Payload URLhttps://你的服务器域名/webhook 启用 SSL 验证push 事件触发 webhook。 以服务的形式运行 app.py 创建一个 flask-app.service 文件用来保存配置vim /etc/systemd/system/flask-app.service [Unit] DescriptionFlask Webhook API Afternetwork.target[Service] # 使用 tomcat 用户来运行 Usertomcat # Flask 应用所在的目录 WorkingDirectory/opt/webhooks/example # 执行 Flask 应用的命令 ExecStart/opt/webhooks/example/myenv/bin/python3 /opt/webhooks/example/app.py # 虚拟环境的路径以及 git 的路径 EnvironmentPATH/opt/webhooks/example/myenv/bin:/usr/bin EnvironmentFLASK_APPapp.py Restartalways RestartSec3[Install] WantedBymulti-user.target保存并退出 vim :wq 。 将 /opt/webhooks/example/ 中所有文件的权限修改为 tomcat-R 递归修改 sudo chown -R tomcat:tomcat /opt/webhooks/example sudo chmod -R 700 /opt/webhooks/example (myenv) rootVM-0-17-ubuntu:/opt/webhooks# chown -R tomcat:tomcat /opt/webhooks/example (myenv) rootVM-0-17-ubuntu:/opt/webhooks# chmod -R 700 /opt/webhooks/example (myenv) rootVM-0-17-ubuntu:/opt/webhooks# ls -l total 4 drwx------ 5 tomcat tomcat 4096 Nov 29 17:41 example (myenv) rootVM-0-17-ubuntu:/opt/webhooks# ls -l example total 16 -rwx------ 1 tomcat tomcat 2289 Nov 29 16:51 app.py drwx------ 2 tomcat tomcat 4096 Nov 29 17:19 blog drwx------ 5 tomcat tomcat 4096 Nov 29 16:03 myenv drwx------ 2 tomcat tomcat 4096 Nov 29 17:41 __pycache__sudo systemctl daemon-reload 重新加载服务的配置文件。 sudo systemctl start flask-app 启动 flask-app 服务。 sudo systemctl enable flask-app 开机自动启动 flask-app。 (myenv) rootVM-0-17-ubuntu:/opt/webhooks# systemctl daemon-reload (myenv) rootVM-0-17-ubuntu:/opt/webhooks# systemctl start flask-app (myenv) rootVM-0-17-ubuntu:/opt/webhooks# systemctl status flask-app ● flask-app.service - Flask Webhook APILoaded: loaded (/etc/systemd/system/flask-app.service; disabled; preset: enabled)Active: activating (auto-restart) (Result: exit-code) since Fri 2024-11-29 17:57:21 CST; 2s agoProcess: 1523039 ExecStart/opt/webhooks/example/myenv/bin/python3 /opt/webhooks/example/app.py # 执行 FlaMain PID: 1523039 (codeexited, status217/USER)CPU: 1ms(myenv) rootVM-0-17-ubuntu:/opt/webhooks# systemctl enable flask-app Created symlink /etc/systemd/system/multi-user.target.wants/flask-app.service → /etc/systemd/system/flask-app.service. (myenv) rootVM-0-17-ubuntu:/opt/webhooks# systemctl status flask-app ● flask-app.service - Flask Webhook APILoaded: loaded (/etc/systemd/system/flask-app.service; enabled; preset: enabled)Active: activating (auto-restart) (Result: exit-code) since Fri 2024-11-29 17:57:37 CST; 2s agoProcess: 1523189 ExecStart/opt/webhooks/example/myenv/bin/python3 /opt/webhooks/example/app.py # 执行 FlaMain PID: 1523189 (codeexited, status217/USER)CPU: 1ms有一点需要注意修改 app.py 后如果不重新启动 flask-app 服务修改后的 app.py 代码不会被执行。 确保 /opt/tomcat/webapps/example 的权限为 tomcat 。因为这个 example 我之前创建的时候以 root 权限进行创建的所以这里要修改它的权限为 tomcat 。真不愧是 Linux 系统安全系数这么高各种权限的限制难怪很多服务器都跑 Linux 安全稳定。 在执行 push 之前先使用 root 权限 git clone 一次你的仓库先 cp /opt/tomcat/.ssh/id_rsa /root/.ssh 再 git clone ...确保能够拉取代码。然后将 /root/.ssh/known_hosts 文件复制到 /opt/tomcat/.ssh/ 下并修改权限让 tomcat 可以读写执行。说了半天如果你嫌麻烦那么就直接以 root 权限运行 app.py 就直接省去了各种权限问题。 本地网站的静态资源项目里创建一个 a.txt 文件然后使用 命令 git add . git commit -m test webhook git push 到 github 仓库。 可以看到 webhook 成功了检查服务器上的文件也成功从 github 上 clone 或者 pull 拉取代码并部署到 tomcat 下了 flask-app.service 文件也有其他的配置方法 [Unit] DescriptionFlask Application Afternetwork.target[Service] Userroot WorkingDirectory/opt/webhooks/example ExecStart/opt/webhooks/example/myenv/bin/gunicorn -w 1 -b 127.0.0.1:12345 app:app Restartalways[Install] WantedBymulti-user.target使用 gunicorn 来运行 app.py。需要在虚拟的 python 环境中安装 pip install gunicorn 。 Gunicorn 是一个 Python WSGI UNIX HTTP 服务器用于 UNIX 系统上运行 Python web 应用。它通常用作生产环境中的 Flask、Django 等应用的服务器。 OK 简单总结一下github 配置公钥文件将私钥文件复制到服务器的 /opt/tomcat/.ssh/ 下并修改权限注意 id_rsa 文件 tomcat 要有读写和执行的权限chomd 700否则是无法使用该密钥建立 ssh 连接到 github 服务器的。然后使用 python 的 Flask 库 编写 webhook 接口apache2 反向代理到 webhook 接口github 仓库配置 webhookpush 测试一下成功
http://www.w-s-a.com/news/10270/

相关文章:

  • 网站推广原则做网站的那个语言好
  • 潍坊网站建设怎样商品网站建设设计思路
  • 建网站公司是如何赚钱南昌营销网站公司哪家好
  • 淘宝客网站管理质量好网站建设费用
  • 网站建设教程搭建青岛中企动力做网站怎么样
  • wordpress最底部网站优化怎么弄
  • 二手市场网站建设的目的长沙ui设计公司
  • 微信公众号做留言网站wordpress详情页选择模板
  • php网站开发面向对象教程如何做分享赚钱的网站
  • 山东网站建设最便宜常州网站建站公司
  • 网站地图 seo中国建设招标网是私人网站吗
  • 高中作文网站全网营销有哪些平台
  • 网站构建建设制作平台上海搬家公司收费价目表
  • 成功案例展示网站做网站赚多少钱
  • 建设银行网站用什么字体网站建站后维护需要做哪些
  • 有哪些做平面设计好素材网站有哪些开网站建设
  • 国际交流网站平台有哪些筑建网
  • 网站程序是如何开发的江门市住房建设管理局网站
  • 网站建设一般需要几个步骤昵图网免费素材
  • 个人网站建设需求说明书微信域名防封在线生成
  • 专业网站建设的公司wordpress后台没有模板
  • 哈尔滨网站运营服务商制作外贸网站公司
  • 个人网站需要备案宁波网站推广工具
  • 苏州建设银行网站首页wordpress修改密码
  • 网站建设员工技能要求网站制作简单协议
  • 没有ipc备案的网站wordpress isux主题
  • 清远做网站电子商务网站建设需要的语言及特点6
  • 万州那家做网站c语言基础知识入门
  • 齐河网站建设公司价格网站建设包括什么
  • 论坛网站开发费用怎么把文件放到网站的根目录