标签 Docker 下的文章 - 🥝 E 家 分 享 🥝
首页
📋 留言板
🔗 友情链接
🛠️ E家百宝箱
❤️ 关于
推荐
🔍 VPS监控
🐉 青龙面板
💽 E家网盘
----------
🔗 CloudFlare
🔗 甲骨文云
🔗 RackNerd
搜 索
1
自动提取 ChromeGo 一键翻墙包内的免费节点
145 阅读
2
【汇总:免费节点 - 每周更新】
113 阅读
3
GigaFile - 日本免费大文件加密分享服务,最长保留文档100天
71 阅读
4
【E家分享月刊系列】2024-12
56 阅读
5
CloudFlare WARP 免费 VPN 搭建教程
55 阅读
精选网站
网站搭建
科学上网搭建
有感而发
软件技巧
Excel技巧
WordPress技巧
登录
搜 索
标签搜索
WordPress
脚本
GitHub
科学上网
哈佛管理导师
E家分享月刊系列
V2ray
Mac软件
AI
Cloudflare
Docker
免费节点
建站在线工具
Excel技巧
Notion
Nginx
ChatGPT
图像编辑
免费图床
网盘资源
E家之长
累计撰写
195
篇文章
累计收到
245
条评论
首页
栏目
精选网站
网站搭建
科学上网搭建
有感而发
软件技巧
Excel技巧
WordPress技巧
页面
📋 留言板
🔗 友情链接
🛠️ E家百宝箱
❤️ 关于
推荐
🔍 VPS监控
🐉 青龙面板
💽 E家网盘
----------
🔗 CloudFlare
🔗 甲骨文云
🔗 RackNerd
用户登录
登录
找到
6
篇与
Docker
相关的结果
2024-03-23
青龙面板搭建
前言一直在使用青龙面板,每天做京东签到赚取京豆的任务,的确解决了每天很多重复签到的动作。因此有必要记录一下如何搭建的过程和一些可靠的拉取的库。项目介绍GitHub 项目地址:https://github.com/whyour/qinglong项目介绍:支持 Python3、JavaScript、Shell、Typescript 的定时任务管理平台。项目安装:官方推荐的方式是用 docker 和 docker-compose 来安装。docker 安装:# curl -sSL get.docker.com | sh docker run -dit \ -v $PWD/ql/data:/ql/data \ # 冒号后面的 5700 为默认端口,如果设置了 QlPort, 需要跟 QlPort 保持一致 -p 5700:5700 \ # 部署路径非必须,比如 /test -e QlBaseUrl="/" \ # 部署端口非必须,当使用 host 模式时,可以设置服务启动后的端口,默认 5700 -e QlPort="5700" \ --name qinglong \ --hostname qinglong \ --restart unless-stopped \ whyour/qinglong:latestdocker-compose 安装使用的 docker-compose.yml:version: '2' services: web: # alpine 基础镜像版本 image: whyour/qinglong:latest # debian-slim 基础镜像版本 # image: whyour/qinglong:debian volumes: - ./data:/ql/data ports: - "0.0.0.0:5700:5700" environment: # 部署路径非必须,以斜杠开头和结尾,比如 /test/ QlBaseUrl: '/' restart: unless-stopped1Panel 安装教程使用 1Panel 安装的优势在于,青龙面板已经在它内置的应用商店里找到,不用特意的去搭建 Docker 环境,直接可以一键安装。 在应用商店中找到青龙,点击安装即可。点选端口外部访问,即允许通过网站加端口的形式访问面板地址,点击确定,后台就会自动拉取青龙面板安装程序。在已安装页面下,直接点击服务端口链接,即可打开青龙面板,默认端口号为 5700。按照提示依次输入用户名,密码后,点击登录。打开订阅管理,点击创建订阅,在名称处填入以下命令,就能自动配置好。 这里参考的订阅来自“6dylan6”的项目:https://github.com/6dylan6/jdpro 国内机(带代理):ql repo https://js.jdpro.site/https://github.com/6dylan6/jdpro.git "jd_|jx_|jddj_" "backUp" "^jd[^_]|USER|JD|function|sendNotify|utils"国外机:本教程使用的就是下面的代码。ql repo https://github.com/6dylan6/jdpro.git "jd_|jx_|jddj_" "backUp" "^jd[^_]|USER|JD|function|sendNotify|utils"定时规则输入:* * 1 * *。注意每个字符间有空格。意思为每小时运行一次,定时规则为:秒 分 时 天 月 周。 名称比如是:jdpro打开配置文件页面,修改 config.sh 文件第11行,在后面添加 sh ts,注意中间有空格,点击保存。RepoFileExtensions="js py sh ts"打开环境变量页面,创建变量依次输入名称和值。名称为:JD_COOKIE,最好是大写,值的格式必须是:pt_key=xxx;pt_pin=xxx;。注意每个变量后面都有分号 ;,点击确定。pt_key 和 pt_pin的获取可通过登录 m.jd.com,点击键盘 F12,打开开发人员工具。登录京东后,在网络页面下打开第一个文件,在右侧的标头页面即可找到pt_key 和 pt_pin,复制粘贴到刚才创建的环境变量即可。或者在应用程序页面,在 Cookie 中找到pt_key 和 pt_pin。打开订阅管理页面,运行订阅 jdpro。打开定时任务页面,就可以看到自动拉取的脚本。如果想手动运行某些脚本,只需点选相应脚本,点击批量运行即可。其他库推荐he1pu 库:https://github.com/he1pu/JSHe1pershufflewzc 纯净版:https://github.com/shufflewzc/faker3依赖有的订阅需要添加必要的依赖,只需在依赖管理页面,创建相应依赖即可。常见的依赖如下:png-js,axios,ts-md5,date-fns,jsdomNodeJs 依赖库crypto-js prettytable dotenv jsdom date-fns tough-cookie tslib ws@7.4.3 ts-md5 jsdom -g jieba fs form-data json5 global-agent png-js @types/node require typescript js-base64 axios moment dsPython3 依赖库requests canvas ping3 jieba aiohttpLinux 依赖库bizCode bizMsg lxml当添加所有的依赖库均出现安装失败,且提示源问题,可尝试使用 ssh 工具进入青龙面板容器,执行下方代码。npm config set registry https://registry.npmmirror.com/在青龙面板依赖库中添加后会自动执行安装,点击日志或者刷新页面可以查看是否安装成功,若安装失败可以点击重新安装。Rabbit:第三方 AI 挂机工具工具网址:https://jd.euser.cf/工具介绍:AI 京东挂机得京豆、红包等账号有效期3天。没掉线不用登录个别账号某段时间可能会频繁掉线登录方式:【扫码登录】 获取二维码 >>> 京东APP扫码 >>> 授权许可。若扫码提示“存在风险”,稍等片刻约30秒,到个人页面可查询资产信息即为上车成功。扫码登录不成功,可使用短信登录。个人页面【微信】扫码获取【消息推送】(账号状态、资产情况)注意:为了您的财产安全,请关闭免密支付。京东 >> 设置 >> 支付设置 >> 支付验证设置参考文档https://github.com/6dylan6/jdprohttps://docs.qq.com/pdf/DVlpCekh4SnZoYml0https://www.youtube.com/watch?v=EpA9Zm\_O-DEhttps://www.youtube.com/watch?v=4SJglzx4URk【END】
2024年03月23日
26 阅读
2 评论
0 点赞
2024-03-16
MeTube:一款 YouTube 下载器
软件介绍今天跟大家分享一款 YouTube 下载器:MeTube。MeTube 是一个基于 youtube-dl 的 GUI web 系统,它能够从 YouTube 和其他许多视频和音乐站点比如B站,下载流媒体内容。MeTube 提供了一个界面友好的网页版界面,让用户可以轻松地搜索、下载和管理视频和音乐内容。项目地址GitHub 地址:https://github.com/alexta69/metube支持视频下载的网站:https://github.com/yt-dlp/yt-dlp/blob/master/supportedsites.md安装方法官网推荐 Docker 或 Docker-Compose 部署。Docker 方式docker run -d -p 8081:8081 -v /path/to/downloads:/downloads ghcr.io/alexta69/metubeDocker-Compose 方式version: "3" services: metube: image: ghcr.io/alexta69/metube container_name: metube restart: unless-stopped ports: - "8081:8081" volumes: - /path/to/downloads:/downloads本文将介绍使用 1Panel 以 Docker-Compose 的方式来安装 MeTube。1Panel 安装 MeTube登录 1Panel, 依次点击 容器 -> 编排 -> 创建编排。 选择编辑,为项目创建名为 metube 的文件夹,复制上面的 Docker-Compose 代码,粘贴到编辑对话框内,点击确定。 系统会自动拉取镜像。点击返回。编排列表中就会出现 metube 的容器。 点击容器页面,就可以通过端口链接访问 Metube 项目主页,默认端口号为 8081 使用 MeTube使用非常简单,只需要在视频或音乐网站上复制网址链接,粘贴在输入框中,点击 Add 按钮,自定义视频质量、格式等设置后,剩下的交给 MeTube 慢慢下载即可。后记MeTube 还支持浏览器插件和苹果手机快捷指令,请参考项目介绍,这里就不赘述。总之,MeTube 是一个不错的 YouTube 或其他视频网站的下载利器。【END】
2024年03月16日
28 阅读
0 评论
0 点赞
2023-09-02
Piwigo - 开源的网络照片库软件安装教程
软件介绍Piwigo 是一个开源的网络照片库软件,,用于管理照片,专为组织、团队和个人设计。软件地址官方网站:https://cn.piwigo.org/ Github项目地址:https://github.com/Piwigo/Piwigo环境要求及安装方式Piwigo 需要网络托管才能运行。对于包含所有内容(安装,托管,备份)的照片库解决方案,或者如果您只是想在不安装的情况下尝试 Piwigo,则可以考虑在 Piwigo.com 上开设免费试用帐户。服务器要求推荐 web 服务器 Apache 或 nginxPHP 5.3 以上版本,推荐 PHP 7+MySQL 5 以上版本,或 MariaDB推荐安装 PHP ImageMagick 模块或 PHP GD 模块exiftool 对于插件写入元数据或任何其他处理 EXIF/IPTC 元数据的插件是必需的插件 VideoJS 需要 ffmpeg 来创建视频海报建议使用 pdftoppm 从 PDF 文件(而不是 ImageMagick)生成海报。网络安装下载 PHP 安装脚本:NetInstall script通过 FTP 客户端上传脚本到服务器安装目录通过浏览器运行脚本,比如 http://5iehome.cc/piwigo-netinstall.php , 根据提示进行安装。手动安装下载最新版本安装包:latest stable version通过 FTP 客户端上传脚本到服务器安装目录并解压通过浏览器运行脚本,比如 http://5iehome.cc/piwigo , 根据提示进行安装。填写 Web 提供商所提供的 MySQL 数据库连接信息,默认情况下,数据表前缀为 piwigo_,但你也可以自定义它(仅支持字母与数字)。 安装结束后,你会看到安装成功或失败的提示 安装成功后,首次访问界面如下 Docker 安装GitHub 库:https://github.com/xmanyou/piwigo-docker环境需求:需要安装 docker 和 docker-compose镜像内容:本镜像包括2个服务mysql 5linuxserver/piwigo (https://github.com/linuxserver/docker-piwigo)配置文件version: "3" services: piwigo: image: linuxserver/piwigo network_mode: bridge ports: - 8899:80 links: - db db: image: mysql:5 network_mode: bridge environment: MYSQL_USER: "piwigo" MYSQL_PASSWORD: "piwigo" MYSQL_DATABASE: "piwigo" MYSQL_RANDOM_ROOT_PASSWORD: "true"安装 Piwigo,镜像启动后,需要先执行 Piwigo 的安装,打开页面:http://localhost:8899数据库配置如下:数据库主机: db (注意,这里要填镜像里的 service 名,而不是localhost)数据库用户: piwigo (mysql db user)数据库密码: piwigo (mysql db password)数据库名: piwigo (mysql db name)管理员信息自行配置。访问和管理 Piwigo,打开页面:http://localhost:8899 ,用管理员账号登录,即可进行管理。参考资料Piwigo 官网安装指导用Docker安装Piwigo个人相册系统【END】
2023年09月02日
16 阅读
0 评论
0 点赞
2023-08-01
前端页面部署方式的全面解析与比较
本文作者:Expo 转载地址:https://sspai.com/post/81564前端页面简介部署前端页面有多种方法,你可以选择最适合你项目需求和你自己技术背景的方式。以下是一些常见的部署方式:FTP上传: 这是最传统的方式,将你的前端文件(HTML,CSS,JavaScript等)上传到你的web服务器。大多数的web主机提供FTP访问,这也是小型项目的快速部署方式。使用Git: 如果你的服务器支持Git,你可以设置一个Git仓库,并使用**git push**命令部署你的前端页面。这种方式方便版本控制,也支持多人协作。使用SSH: 可以通过SSH将你的文件推送到你的服务器,这个过程可以通过脚本自动化。使用云服务: 像AWS S3,Google Cloud Storage,Azure Storage等服务可以托管静态网站,通常它们提供了很好的性能和安全性。使用专门的前端部署服务: 服务如Netlify,Vercel等,这些平台通常提供一站式服务,包括版本控制,持续集成,HTTPS和CDN等。使用CDN服务: 这些服务可以将你的站点部署到全球的服务器上,加速访问速度。例如,Cloudflare,Akamai等。容器化部署: 使用如Docker等工具,将前端应用容器化,然后在Kubernetes等容器编排平台进行部署。以上的部署方式有的适合小型项目,有的适合大型项目,有的需要更多的技术知识,选择哪一种方式取决于你的具体需求。Nginx配置 Nginx 来为前端页面提供服务通常需要以下步骤:步骤1:上传代码首先,你需要将你的前端代码上传到服务器上的某个目录,比如 **/var/www/mywebsite**。步骤2:创建 Nginx 配置文件Nginx 的配置文件通常位于 **/etc/nginx/** 目录下,具体路径可能会因服务器的不同而略有不同。在该目录下,你通常会找到一个叫做 **sites-available** 的目录。在这个目录下,你可以为每个网站创建一个配置文件。例如,你可以创建一个新的配置文件,命名为 **mywebsite**:sudo nano /etc/nginx/sites-available/mywebsite步骤3:编辑 Nginx 配置文件在新建的配置文件中,你可以输入以下内容来配置你的前端页面:server { listen 80; server_name your_domain_or_IP; location / { root /var/www/mywebsite; index index.html; try_files $uri $uri/ =404; } }其中 **your_domain_or_IP** 应该替换为你的域名或者IP地址,**/var/www/mywebsite** 应该替换为你的代码所在的目录。此配置意味着 Nginx 将监听80端口,并为所有指向你的域名或IP地址的请求提供服务。默认文档为 index.html,如果请求的文件不存在,Nginx 将返回 404 状态码。步骤4:启用网站创建并编辑完配置文件后,你需要创建一个到 **sites-enabled** 目录的符号链接来启用你的网站:sudo ln -s /etc/nginx/sites-available/mywebsite /etc/nginx/sites-enabled/步骤5:检查配置文件在重启 Nginx 之前,你应该检查你的配置文件有没有语法错误:sudo nginx -t如果没有错误,你会看到类似这样的输出:nginx: configuration file /etc/nginx/nginx.conf test is successful步骤6:重启 Nginx最后,你需要重启 Nginx 来使你的配置生效:sudo service nginx restart现在你的前端页面应该可以通过你的域名或IP地址访问了。注意,如果你的服务器有防火墙,你可能需要配置防火墙来允许 HTTP 和 HTTPS 流量。更完整的 Nginx 配置首先,你需要为你的域名获取一个 SSL 证书,你可以使用 Let's Encrypt 提供的免费证书。配置文件可能如下:server { listen 80; server_name your_domain_or_IP; return 301 https://$host$request_uri; } server { listen 443 ssl; server_name your_domain_or_IP; ssl_certificate /etc/letsencrypt/live/your_domain_or_IP/fullchain.pem; ssl_certificate_key /etc/letsencrypt/live/your_domain_or_IP/privkey.pem; ssl_protocols TLSv1.2 TLSv1.3; ssl_prefer_server_ciphers on; ssl_ciphers "EECDH+AESGCM:EDH+AESGCM:AES256+EECDH:AES256+EDH"; location / { root /var/www/mywebsite; index index.html; try_files $uri $uri/ =404; } location ~* \\.(jpg|jpeg|png|gif|ico|css|js|pdf)$ { expires 30d; } gzip on; gzip_vary on; gzip_min_length 10240; gzip_proxied expired no-cache no-store private auth; gzip_types text/plain text/css text/xml text/javascript application/x-javascript application/xml; gzip_disable "MSIE [1-6]\\."; }以下是这个配置的一些解释:第一个 **server** 块监听80端口,也就是HTTP的默认端口,然后把所有的请求重定向到HTTPS。第二个 **server** 块监听443端口,也就是HTTPS的默认端口。**ssl_certificate** 和 **ssl_certificate_key** 指向你的SSL证书和私钥的位置。**ssl_protocols** 和 **ssl_ciphers** 定义了你服务器支持的SSL协议和加密套件。**location /** 块定义了你的网站的根目录和默认文件,以及如何处理不存在的路径。**location ~* \\.(jpg|jpeg|png|gif|ico|css|js|pdf)$** 块定义了对于静态文件如图片,CSS文件,JavaScript文件等,客户端应该缓存30天。**gzip** 相关的行启用了gzip压缩,并定义了哪些类型的文件应该被压缩。这只是一个基本的配置样例,你可以根据你的需求进行修改。有许多其他的选项可以配置,例如负载均衡,反向代理,HTTP/2 支持等。你可以查看 Nginx 的文档来了解更多信息。负载均衡使用 Nginx 来做负载均衡的实现非常直接。以下是一个简单的示例来说明如何配置 Nginx 来实现对多个服务器的负载均衡。假设你有两个或更多的应用服务器实例,它们分别托管在不同的 IP 地址或主机名下**。你可以在 Nginx 配置文件中设置一个 upstream 模块,然后在 server 模块中将请求反向代理到这个 upstream。**首先,你需要在你的 Nginx 配置文件(一般位于 /etc/nginx/nginx.conf 或 /etc/nginx/conf.d/ 目录下的某个文件)中定义一个 upstream。例如:http { upstream myapp { server app1.example.com; server app2.example.com; } ... }在这个例子中,myapp 是你定义的 upstream 的名字,app1.example.com 和 app2.example.com 是你的应用服务器的地址。然后,在 server 模块中,你可以将来自客户端的请求代理到这个 upstream:server { listen 80; location / { proxy_pass <http://myapp>; } }在这个例子中,所有来自客户端的 HTTP 请求(即 :80 端口的请求)都会被 Nginx 转发到定义的 upstream(即 myapp)。Nginx 默认使用**轮询(round-robin)算法将请求分配给 upstream 中的服务器,你也可以配置其他的负载均衡算法,如最少连接(least\_conn)**或 IP 哈希(ip\_hash)。这样,Nginx 就会把请求均衡地转发到你的各个应用服务器实例上,实现负载均衡。注意这个配置对于前端静态页面来说可能不太必要,因为静态页面通常不会对服务器产生太大负载,但对于动态应用来说是非常有用的。Docker使用 Docker 来部署前端应用是一种很好的方式,因为它可以将你的应用及其依赖项打包到一个独立、可移植的容器中,可以在任何安装了 Docker 的环境中运行。以下是使用 Docker 部署一个基本的静态前端页面的步骤:步骤1:创建 Dockerfile在你的项目根目录中,创建一个名为"Dockerfile"的文件。这个文件是用来定义你的 Docker 镜像的,可以看作是一个自动化的脚本。以下是一个简单的 Dockerfile 示例,其中使用了官方的 Nginx 镜像来部署静态页面:# 使用官方的 Nginx 镜像 FROM nginx:latest # 删除 Nginx 默认的静态资源 RUN rm -rf /usr/share/nginx/html/* # 将你的静态资源复制到 Nginx 的静态资源目录下 COPY ./dist /usr/share/nginx/html # 暴露 80 端口 EXPOSE 80 # 启动 Nginx CMD ["nginx", "-g", "daemon off;"]步骤2:构建 Docker 镜像在项目根目录下,你可以使用 **docker build** 命令来根据 Dockerfile 构建 Docker 镜像:docker build -t my-frontend-app .其中,**-t my-frontend-app** 参数用于给你的 Docker 镜像命名,**.** 指定了 Dockerfile 所在的位置(在这里,它在当前目录下)。步骤3:运行 Docker 容器你现在可以使用 **docker run** 命令来运行你刚刚构建的 Docker 镜像:docker run -p 80:80 -d my-frontend-app**p 80:80** 参数指定了将容器的 80 端口映射到宿主机的 80 端口,**d** 参数指定了以后台模式运行容器。现在你应该可以在你的浏览器中通过访问 **http://localhost** 来查看你的前端页面了。如果你的前端应用更复杂,或者需要与后端服务进行交互,你可能需要进行更复杂的配置,比如使用 Docker Compose 来管理多个服务,或者使用环境变量来配置你的应用。负载均衡如果你的前端应用使用 Docker 部署,有多种方式可以实现负载均衡。以下是一些常见的方法:1. 使用 Docker Swarm:Docker Swarm 是 Docker 的原生集群管理和编排工具。在 Swarm 集群中,你可以创建一个服务,然后指定服务的副本数量。Swarm 会自动在集群的节点间分配这些副本,实现负载均衡。以下是一个简单的 Docker Swarm 服务创建命令:docker service create --name my-frontend-app --publish 80:80 --replicas 3 my-frontend-app在这个命令中,**--name my-frontend-app** 指定了服务的名称,**--publish 80:80** 指定了将容器的 80 端口映射到宿主机的 80 端口,**--replicas 3** 指定了创建 3 个副本,**my-frontend-app** 是你的 Docker 镜像的名称。2. 使用 Kubernetes:Kubernetes 是一个更强大的容器编排平台,它也支持负载均衡。在 Kubernetes 中,你可以创建一个 Deployment 和一个 Service,Kubernetes 会自动为你的应用提供负载均衡。以下是一个简单的 Kubernetes Deployment 和 Service 的定义:apiVersion: apps/v1 kind: Deployment metadata: name: my-frontend-app spec: replicas: 3 selector: matchLabels: app: my-frontend-app template: metadata: labels: app: my-frontend-app spec: containers: - name: my-frontend-app image: my-frontend-app ports: - containerPort: 80 --- apiVersion: v1 kind: Service metadata: name: my-frontend-app spec: type: LoadBalancer ports: - port: 80 selector: app: my-frontend-app在这个定义中,Deployment 创建了 3 个前端应用的副本,Service 为这些副本提供了一个负载均衡器。3. 使用云服务提供商的负载均衡器:如果你的应用部署在云环境(如 AWS, Google Cloud, Azure 等),你可以使用云服务提供商的负载均衡服务。这些负载均衡服务通常提供了更强大的功能,比如自动扩缩容,健康检查,SSL 终结等。以上都是实现 Docker 负载均衡的一些方式,你可以根据你的具体需求和环境选择最合适的方式。PM2PM2 主要用于管理和维护 Node.js 应用,但是你也可以使用 PM2 来运行一个静态服务器,用来部署你的前端页面。这可以通过使用像 **http-server** 这样的简单的静态文件服务器来完成。以下是使用 PM2 部署前端页面的步骤:安装 http-server首先,你需要在你的项目中安装 **http-server**。你可以使用 **npm** 来安装它:npm install http-server --save创建 PM2 配置文件接下来,你需要创建一个 PM2 的配置文件,例如 **ecosystem.config.js**。在这个文件中,你需要指定 **http-server** 的路径和你的前端页面的路径:javascriptCopy code module.exports = { apps: [ { name: 'frontend', script: 'node_modules/http-server/bin/http-server', args: './dist -p 8080', // 这里的 ./dist 是你的前端页面的路径,-p 8080 是你要监听的端口 instances: 'max', exec_mode: 'cluster', watch: true, // 如果你希望在文件改变时自动重启服务器,可以设置 watch 为 true env: { NODE_ENV: 'production', }, }, ], };使用 PM2 启动你的前端页面现在,你可以使用 PM2 来启动你的前端页面了:pm2 start ecosystem.config.js通过以上步骤,你就可以使用 PM2 和 **http-server** 来部署你的前端页面了。这种方式的好处是你可以利用 PM2 提供的特性,例如应用的自动重启和负载均衡。但需要注意的是,**http-server** 是一个非常简单的静态文件服务器,如果你需要更复杂的功能(例如 SSL、反向代理等),你可能需要考虑使用更强大的服务器软件,例如 Nginx 或 Express.js。部署方式比较技术优点缺点出现时间适合场景不适合场景Nginx轻量级,高性能,可作为反向代理和负载均衡器需要手动配置和管理2004年任何需要静态页面服务的项目需要动态服务器端渲染的项目PM2 Serve可以使用PM2来管理静态服务进程不包含反向代理或负载均衡器PM2:2014年需要简单的静态文件服务需要复杂的HTTP请求处理或负载均衡的项目Docker容器化,跨平台需要手动管理容器和镜像,比其他选项复杂2013年任何需要跨平台部署或以统一方式部署多种服务的项目小规模或简单的项目,因为Docker可能引入不必要的复杂性GitHub Pages免费,支持自定义域名,集成GitHub功能有限,仅支持静态内容2008年简单的个人、项目或组织页面复杂的、需要后端的应用Netlify/Vercel提供自动部署,函数即服务等免费版有一些限制Netlify:2014年, Vercel:2015年静态网站和Jamstack应用大规模、复杂的后端应用云存储服务 (AWS S3, Google Cloud Storage)简单,可扩展,集成CDN需要配置权限和CDNAWS S3:2006年, Google Cloud Storage:2010年静态网站,或需要大规模存储的应用需要后端逻辑的应用同样,你应该根据你的具体需求来选择最适合的部署方法。例如,如果你的网站很简单,GitHub Pages 可能就足够了。如果你需要一些后端逻辑,但不想管理服务器,那么 Netlify 或 Vercel 可能是一个好选择。如果你需要完全的控制和可扩展性,Docker 或云存储服务可能更合适。Node 应用简介部署 Node.js 应用也有多种方法,选择哪一种取决于你的项目需求和技术背景。以下是一些常见的部署方式:手动部署: 这是最基本的方式,你需要在你的服务器上安装Node.js,然后通过FTP或者SCP将你的代码上传到服务器,然后运行你的应用。使用版本控制系统(如Git): 你可以在服务器上设置一个Git仓库,并通过**git push**命令来部署你的应用。你还需要在服务器上设置一个脚本来自动运行你的应用。使用PM2: PM2是一个带有负载均衡功能的Node应用的进程管理器,可以让你的应用后台运行,如果应用崩溃了,PM2会自动重启应用。使用Docker: Docker让你可以在一个隔离的容器中运行你的应用,这可以避免很多系统依赖问题。你可以将你的Node.js应用“Docker化”,并在任何支持Docker的平台上运行。使用云服务: 许多云服务提供了Node.js的支持,比如AWS Elastic Beanstalk,Google App Engine,Heroku,Azure App Service等。这些服务通常会处理大部分部署细节,让你可以专注于编写代码。使用PaaS平台: 例如Heroku,它为部署Node.js应用提供了非常方便的平台。你只需要将你的代码推送到Heroku的Git仓库,然后Heroku就会自动为你的应用分配资源,并启动你的应用。使用Serverless架构: 如AWS Lambda,Azure Functions,Google Cloud Functions等,你只需要编写处理请求的函数,然后上传到服务提供商的平台,服务提供商会为你处理扩容、负载均衡等问题。选择适合你的方式,主要取决于你的应用规模,预期的访问量,以及你希望多大程度上控制你的服务器和部署过程。PM2PM2 是一个非常流行的 Node.js 应用程序的生产过程管理器,可以让你保持应用的持续运行,可以让你在应用崩溃时自动重启,也可以使你的应用运行在多个 CPU 核心上,从而提高性能。以下是使用 PM2 部署 Node.js 应用的步骤:安装 PM2首先,你需要在你的服务器上安装 PM2。你可以使用 npm(Node.js 的包管理器)来安装 PM2:npm install -g pm2这个命令会全局安装 PM2,所以你可以在任何地方运行 pm2 命令。启动你的应用有了 PM2,你就可以使用它来启动你的 Node.js 应用了。假设你的入口文件是 **app.js**,你可以运行以下命令来启动你的应用:pm2 start app.js你的应用现在就在 PM2 的管理下运行了。如果你的应用崩溃,PM2 会自动重启它。你也可以使用 PM2 的其他命令来查看应用的状态,查看日志,停止或重启应用等。配置应用对于更复杂的应用,你可能需要进行更多的配置。例如,你可能希望你的应用在服务器启动时自动启动,或者你可能希望在多个 CPU 核心上运行你的应用。PM2 允许你创建一个配置文件(通常是一个名为 **ecosystem.config.js** 的文件),在这个文件中,你可以定义你的应用的配置。以下是一个简单的配置文件示例:javascriptCopy code module.exports = { apps: [{ name: "my-app", script: "app.js", instances: "max", exec_mode: "cluster" }] }在这个配置中,**name** 属性定义了应用的名称,**script** 属性定义了应用的入口文件,**instances** 属性定义了应用的实例数量(在这个例子中,"max" 表示在所有可用的 CPU 核心上运行应用),**exec_mode** 属性定义了应用的执行模式(**cluster** 表示启用集群模式)。然后,你可以使用 **pm2 start ecosystem.config.js** 命令来按照这个配置启动你的应用。开启日志PM2 还提供了一些方便的工具来帮助你监视你的应用。例如,你可以使用 **pm2 logs** 命令来查看你的应用的日志,使用 **pm2 monit** 命令来查看每个应用的 CPU 和内存使用情况。以上就是使用 PM2 部署 Node.js 应用的基本步骤。需要注意的是,虽然 PM2 可以帮助你管理你的应用,但它并不能解决所有问题。例如,你可能还需要配置你的服务器防火墙,配置你的域名解析,安装和配置 SSL 证书等。高级应用PM2 是一个强大的 Node.js 应用进程管理器,除了基本的启动、监控和重启应用,它还提供了许多高级的特性和功能。以下是一些可以使用的高级功能:热重载(Hot Reload): 热重载可以在不停机的情况下重启应用。这对于需要长时间运行的应用来说非常有用,因为它可以在不影响用户的情况下进行更新。你可以使用 **pm2 reload <app_name>** 来进行热重载。应用监控(Monitoring): 使用 **pm2 monit** 命令,你可以看到所有由 PM2 管理的应用的 CPU 和内存使用情况,还可以看到每个应用的日志和其它信息。这个功能可以帮助你实时监控应用的性能并快速定位问题。日志管理(Log Management): PM2 会自动捕获你的应用的标准输出(stdout)和标准错误(stderr),并将它们保存到日志文件中。你可以使用 **pm2 logs** 命令来查看这些日志。集群模式(Cluster Mode): 在集群模式下,PM2 会启动多个应用实例,并自动负载均衡到所有可用的 CPU 核心。这可以极大地提高多核服务器的性能。启动文件(Startup Script): PM2 可以生成一个启动脚本,这样你的应用就可以在服务器启动时自动启动。你可以使用 **pm2 startup** 命令来生成这个脚本。自定义日志、PID 和应用列表路径: PM2 允许你自定义日志文件、PID 文件和应用列表文件的路径,这可以帮助你更好地组织你的文件。源代码变更自动重启(Watch & Restart): PM2 可以监听你的文件变化,并在文件变化时自动重启应用。你可以在启动应用时添加 **-watch** 参数来启用这个功能,或者在配置文件中设置 **watch** 属性。部署系统(Deployment System): PM2 提供了一个简单的部署系统,可以让你更容易地更新你的应用并追踪版本。你需要在配置文件中设置 **deploy** 属性来使用这个功能。这些高级功能可以让你更好地管理你的 Node.js 应用,并帮助你提高应用的性能和可靠性。如果你想了解更多关于 PM2 的信息,你可以查看 PM2 的官方文档。exec\_mode 有哪些模式PM2 提供两种执行模式,即 "fork" 和 "cluster"。这两种模式的主要区别在于它们处理 Node.js 应用的方式,以及它们如何利用多核 CPU。Fork Mode(分支模式): Fork mode 是 PM2 的默认执行模式。在这种模式下,每个 Node.js 应用都运行在自己的单独进程中。这意味着每个应用都有自己独立的内存空间,并且不能直接与其他应用共享状态。这种模式适合运行多个不同的 Node.js 应用。Cluster Mode(集群模式): 在集群模式下,PM2 会启动多个应用的实例,并自动进行负载均衡,让所有可用的 CPU 核心都被利用起来。这可以极大地提高多核服务器的性能。集群模式利用了 Node.js 的内建集群模块,因此你的 Node.js 应用不需要做任何修改就可以在集群模式下运行。如果你想在启动应用时指定执行模式,你可以在 **pm2 start** 命令后添加 **--exec-mode** 参数。例如,以下命令会在集群模式下启动 app.js:pm2 start app.js --exec-mode cluster如果你想在配置文件中指定执行模式,你可以设置 **exec_mode** 属性。例如,以下配置会在集群模式下启动 app.js:module.exports = { apps : [{ name: "app", script: "app.js", exec_mode: "cluster" }] }需要注意的是,虽然集群模式可以提高性能,但它也有一些限制。例如,因为每个应用实例都运行在自己的进程中,它们不能直接共享状态。如果你的应用需要维护共享状态,你可能需要使用外部服务(如 Redis)或者使用 IPC 通信。负载均衡使用 PM2 部署 Node.js 应用时,你可以利用其内建的集群模式(cluster mode)来实现负载均衡。在这种模式下,PM2 会创建多个应用实例,并自动将进入的请求分发到各个实例,从而实现负载均衡。以下是使用 PM2 实现负载均衡的步骤:确定应用实例的数量你可以选择让 PM2 自动根据 CPU 的核心数量来创建应用实例。你只需要将 instances 属性设置为 "max",PM2 就会创建与 CPU 核心数量相等的应用实例:module.exports = { apps : [{ name: "app", script: "app.js", instances: "max", exec_mode: "cluster" }] }你也可以手动指定实例的数量。只需要将 instances 属性设置为你想要的数字即可:module.exports = { apps : [{ name: "app", script: "app.js", instances: 4, // 创建4个实例 exec_mode: "cluster" }] }设置执行模式要启用集群模式,你需要将 exec\_mode 属性设置为 "cluster"。启动应用在你的配置文件设置好之后,你可以使用 pm2 start 命令启动你的应用:pm2 start ecosystem.config.js现在,你的 Node.js 应用已经在 PM2 的集群模式下运行了,PM2 会自动实现负载均衡。如果有任何应用实例崩溃,PM2 也会自动重启它。注意,虽然 PM2 的集群模式可以提高多核服务器的性能,但它并不是一个全功能的负载均衡解决方案。例如,它不支持会话粘性(session stickiness),这意味着如果你的应用需要维护用户会话,用户的每个请求可能会被路由到不同的应用实例。在这种情况下,你可能需要使用其他的负载均衡解决方案,例如 Nginx 或 HAProxy。PM2 + Nginx以下是使用 PM2 和 Nginx 部署 Node.js 应用并实现负载均衡的步骤:安装和配置PM2首先,你需要在服务器上安装 Node.js 和 PM2。你可以使用 NPM(Node Package Manager)来安装 PM2:npm install -g pm2然后,你可以使用 PM2 来启动你的 Node.js 应用。假设你的入口文件叫做 **app.js**,你可以使用以下命令来启动你的应用:pm2 start app.js -i max上述命令中的 **-i max** 参数将会告诉 PM2 启动尽可能多的应用实例来利用所有的CPU核心,这将帮助你实现负载均衡。安装和配置Nginx然后,你需要在服务器上安装 Nginx。在 Ubuntu 或 Debian 上,你可以使用以下命令来安装 Nginx:sudo apt-get update sudo apt-get install nginx接下来,你需要配置 Nginx 作为你的 Node.js 应用的反向代理。你需要编辑 Nginx 的配置文件(通常位于 **/etc/nginx/sites-available/default**)并添加以下内容:upstream myapp { server 127.0.0.1:3000; keepalive 64; } server { listen 80; location / { proxy_pass <http://myapp>; proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection 'upgrade'; proxy_set_header Host $host; proxy_cache_bypass $http_upgrade; } }在上述配置中,**upstream模块定义了一个服务器组,Nginx将会在该服务器组中进行负载均衡。proxy_pass 指令告诉 Nginx 将所有的请求转发到 myapp** 服务器组。注意:你需要将 **server 127.0.0.1:3000 中的3000**替换为你的 Node.js 应用实际监听的端口。重启Nginx保存配置文件后,你需要重启Nginx以使新的配置生效:sudo systemctl restart nginx现在,你的 Node.js 应用应该可以通过 http://your-server-ip 访问了,同时,你已经成功地实现了负载均衡。记住,你需要为每一个 Node.js 应用的实例配置一个独立的**server条目。你可以将这些server条目添加到upstream模块中以实现负载均衡。如果你的应用在多台服务器上运行,你可以将每个服务器的地址添加到upstream**模块中。Docker为了使用 Docker 来部署一个 Node.js 应用,你需要创建一个 Dockerfile,这是一个用来构建 Docker 镜像的文本文件。然后你可以运行这个 Docker 镜像以启动你的应用。以下是一个基本的 Dockerfile 的示例,它描述了如何创建一个包含 Node.js 应用的 Docker 镜像:# 使用官方 Node.js 作为基础镜像 FROM node:14 # 设置工作目录 WORKDIR /usr/src/app # 复制 package.json 和 package-lock.json COPY package*.json ./ # 安装你的应用的依赖 RUN npm install # 复制你的应用的源码 COPY . . # 暴露你的应用监听的端口 EXPOSE 8080 # 启动你的应用 CMD [ "node", "app.js" ]这个 Dockerfile 假设你的应用在 "app.js" 中定义。你可能需要根据你的应用修改这个文件名。一旦你的 Dockerfile 创建好了,你可以使用以下命令来在 Dockerfile 所在的目录中构建你的 Docker 镜像:docker build -t my-node-app .然后你可以使用以下命令来运行你的 Docker 镜像:docker run -p 8080:8080 -d my-node-app这个命令会启动一个新的 Docker 容器,并将容器的 8080 端口映射到宿主机的 8080 端口。**-d** 选项会让 Docker 在后台运行这个容器。这是使用 Docker 部署一个 Node.js 应用的基本步骤。根据你的应用和环境,你可能需要进行更复杂的 Docker 配置。Docker + Docker Swarm果你希望在 Docker 环境中部署 Node.js 应用并实现负载均衡,但是不想使用 Nginx,你可以考虑使用 Docker 的内置工具如 Docker Swarm 或者第三方工具如 Traefik 和 HAProxy。以下是一个使用 Docker Swarm 实现负载均衡的例子:创建 Dockerfile你需要创建一个 Dockerfile 来定义你的 Node.js 应用的镜像。以下是一个简单的 Dockerfile 例子:FROM node:14 WORKDIR /app COPY package*.json ./ RUN npm install COPY . . EXPOSE 8080 CMD [ "node", "server.js" ]构建 Docker 镜像在你的 Dockerfile 所在的目录中运行以下命令来构建你的 Docker 镜像:bashCopy code docker build -t my-node-app .初始化 Docker Swarm在你的服务器上运行以下命令来初始化 Docker Swarm:docker swarm init部署你的 Node.js 应用你可以使用 Docker Service 来部署你的 Node.js 应用。以下命令将会启动三个你的 Node.js 应用的实例,并在端口8080上公开服务:docker service create --name my-node-service --publish published=8080,target=8080 --replicas=3 my-node-appDocker Swarm 将会自动在这三个实例之间实现负载均衡。以上步骤提供了使用 Docker Swarm 进行负载均衡的基础步骤。如果你希望进行更复杂的负载均衡配置,你可能需要查阅更多的 Docker Swarm 文档或者考虑使用更专业的负载均衡工具如 Traefik 和 HAProxy。Docker + k8s使用 Docker 部署 Node.js 应用,并使用 Kubernetes(k8s)实现负载均衡,你需要创建 Dockerfile、构建和推送 Docker 镜像、然后在 Kubernetes 上创建 Deployment 和 Service。以下是具体的步骤:创建 Dockerfile首先,创建一个 Dockerfile 来定义你的 Node.js 应用的 Docker 镜像:FROM node:14 WORKDIR /app COPY package*.json ./ RUN npm install COPY . . EXPOSE 8080 CMD [ "node", "server.js" ]构建 Docker 镜像在你的 Dockerfile 所在的目录中运行以下命令来构建你的 Docker 镜像:docker build -t my-node-app .推送 Docker 镜像到镜像仓库然后,你需要将你的 Docker 镜像推送到一个可以被你的 Kubernetes 集群访问的镜像仓库中,例如 Docker Hub。首先,登录你的 Docker Hub 帐户:docker login然后,标记并推送你的镜像:docker tag my-node-app:latest yourusername/my-node-app:latest docker push yourusername/my-node-app:latest记住,你需要将 **yourusername** 替换为你的 Docker Hub 用户名。创建 Kubernetes Deployment然后,你需要在 Kubernetes 上创建一个 Deployment 以运行你的 Node.js 应用。创建一个名为**my-node-app-deployment.yaml**的文件,然后添加以下内容:yamlCopy code apiVersion: apps/v1 kind: Deployment metadata: name: my-node-app spec: replicas: 3 selector: matchLabels: app: my-node-app template: metadata: labels: app: my-node-app spec: containers: - name: my-node-app image: yourusername/my-node-app:latest ports: - containerPort: 8080在这个文件中,**replicas: 3**意味着 Kubernetes 将运行三个你的应用的副本。然后,运行以下命令来创建 Deployment:kubectl apply -f my-node-app-deployment.yaml创建 Kubernetes Service最后,你需要创建一个 Kubernetes Service 来公开你的应用。创建一个名为**my-node-app-service.yaml**的文件,然后添加以下内容:apiVersion: v1 kind: Service metadata: name: my-node-app spec: type: LoadBalancer ports: - port: 80 targetPort: 8080 selector: app: my-node-app在这个文件中,**type: LoadBalancer**意味着 Kubernetes 将创建一个云提供商的负载均衡器,并将公网流量导向你的应用。然后,运行以下命令来创建 Service:kubectl apply -f my-node-app-service.yaml现在,你的 Node.js 应用应该已经在 Kubernetes 上运行,并且已经实现了负载均衡。你可以运行以下命令来检查你的 Service 的状态:kubectl get svc my-node-app在输出中,你应该可以看到你的 Service 的外部IP地址,你可以通过这个IP地址访问你的应用。Docker 还有必要使用 pm2 吗PM2 是一个流行的进程管理器,它可以让你保持你的应用始终在线,自动重启在异常情况下崩溃的应用,并且可以方便地管理你的应用的日志。然而,当你的应用运行在 Docker 容器中时,你可能并不总是需要 PM2。在 Docker 的哲学中,通常每个容器只运行一个进程,当这个进程结束时,容器就会停止。因此,如果你的应用崩溃,Docker 可以自动重启容器,这就提供了 PM2 的部分功能。此外,Docker 也提供了日志管理的功能,你可以使用**docker logs**命令来查看你的应用的输出。然而,PM2 还提供了其他一些功能,例如集群模式,它可以启动多个你的应用的实例来充分利用多核CPU。如果你的应用需要这种功能,并且你不打算使用其他的负载均衡解决方案,那么在 Docker 容器中使用 PM2 可能是有价值的。总的来说,是否在 Docker 中使用 PM2 取决于你的具体需求。如果 Docker 的内建功能已经足够满足你的需求,那么你可能不需要 PM2。但是,如果你需要 PM2 的某些特定功能,那么你可能会希望在你的 Docker 容器中使用 PM2。Docker+Nginx 为什么 不适合场景 负载均衡的项目首先,我要澄清一点,Docker+Nginx 是可以实现负载均衡的。当你在 Docker 中启动多个应用实例,然后使用 Nginx 作为反向代理来分发流量时,就实现了负载均衡。我的表述可能有些误导,对此我感到非常抱歉。然而,使用 Docker+Nginx 实现负载均衡有一个局限性,那就是配置的复杂性。**在一个动态环境中,你可能会经常启动和停止 Docker 容器,这就需要你不断地更新 Nginx 的配置以反映这些变化。**这个过程可以手动完成,但在一个大型系统中,这可能会变得非常繁琐和容易出错。此外,Nginx 并不直接支持一些更高级的负载均衡策略,例如基于请求的路由或基于会话的持久性。这些功能通常需要使用更专业的负载均衡器或服务网格来实现。所以,当我说 Docker+Nginx 可能不适合需要复杂负载均衡的项目时,我是指对于那些需要更高级负载均衡功能或者需要在动态环境中自动处理容器变化的项目,可能需要考虑使用如 Kubernetes 或 Docker Swarm 这样的工具,因为它们提供了更强大和灵活的负载均衡能力,并能更好地处理容器的动态性。部署方式比较技术优点缺点出现时间适合场景不适合场景PM2进程管理,自动重启,负载均衡不处理反向代理或容器化2014年单体应用,小规模项目大规模或需要高度可配置的项目PM2+Nginx进程管理,自动重启,负载均衡,反向代理,静态文件服务不处理容器化PM2:2014年,Nginx:2004年单体应用,需要处理HTTP请求的项目需要容器化的项目Docker容器化,跨平台不直接提供进程管理,反向代理,或负载均衡2013年任何大小的项目,需要跨平台的项目无特殊需求的小型项目,因为 Docker 可能引入不必要的复杂性Docker+Nginx容器化,反向代理,静态文件服务,可以配置为负载均衡需要手动维护Nginx配置以反映容器变化,可能不能提供更高级的负载均衡功能Docker:2013年,Nginx:2004年需要处理HTTP请求和基本负载均衡的项目,需要跨平台的项目需要自动处理容器变化或需要高级负载均衡的项目Docker Swarm容器化,服务发现,负载均衡,集群管理功能可能不如 Kubernetes 丰富2016年中等规模的项目,需要集群管理的项目大规模或需要高度可配置的项目Docker+K8s容器化,服务发现,负载均衡,自动扩缩容,滚动更新,自愈,集群管理相对复杂,学习曲线陡峭Docker:2013年,K8s:2015年大规模或复杂的微服务架构的项目小规模项目,因为 Kubernetes 可能引入不必要的复杂性选择哪种部署方式主要取决于你的应用的特性和需求,以及你和你的团队的技能和资源。对于小规模的单体应用,PM2 或者 PM2+Nginx 可能就足够了。如果你的应用需要在多台服务器或云环境中部署,那么你可能需要考虑使用 Docker。如果你的应用是一个大规模或复杂的微服务架构的项目,那么你可能需要考虑使用 Kubernetes。【END】
2023年08月01日
13 阅读
0 评论
0 点赞
2023-05-28
【汇总:Docker Compose 配置文件】
前言利用 Docker compose可以使 Docker 布署变得简单而强大。简单讲只需创建并配置 docker-compose.yml 文件,执行 Docker compose 命令即可。本文将平时使用过的 docker-compose.yml 文件进行收集汇总,便于随时查询使用。推荐一个在线测试 Docker 的网站,Play with Docker:https://labs.play-with-docker.com/网站介绍:Play with Docker(PWD)由 Docker 股份有限公司赞助。PWD 是一个 Docker 游乐场,允许用户在几秒钟内运行 Docker 命令。它提供了在浏览器中拥有免费 Alpine Linux 虚拟机的体验,在这里您可以构建和运行 Docker 容器,甚至可以在 Docker Swarm 模式下创建集群。Docker 中的底层 Docker(DinD)用于提供多个 VM/PC 的效果。除了操场,PWD 还包括一个培训网站,该网站由一大套 Docker 实验室和从初学者到高级水平的测验组成,可在 training.play-with-Docker.com 上获得。Docker Compose 配置及使用创建 docker-compose.yml 文件在项目目录下,创建 docker-compose.yml 文件。vim docker-compose.yml 或者 nano docker-compose.yml或直接通过 SSH 登录服务器,通过 SFTP 像操作 Windows 一样直接创建 docker-compose.yml 文件。运行 docker-compose 相关命令检查端口是否被占用配置完 docker-compose.yml 文件后,最好先检查一下端口是否被占用。 查看端口是否被占用(以 81 为例),输入:lsof -i:81 #查看 81 端口是否被占用,如果被占用,重新自定义一个端口如果什么都没出现,表示端口未被占用,就可以继续下面的操作了。 如果出现:-bash: lsof: command not found运行:apt install lsof #安装 lsof如果端口没有被占用(被占用了就修改一下端口,比如改成 82,注意 docker 命令行里和防火墙都要改)最后一定在项目当前路径下,执行 Docker compose 命令。docker-compose up -d查询当前服务器 IP可以直接在命令行输入:curl ip.sb这样就可以输入 http://ip:81 访问了。更新镜像docker-compose down # 下线 docker-compose pull # 拉取 latest 镜像 docker-compose up -d # 重新上线卸载镜像在项目当前路径下(以 /root/data/docker\_data/npm 为例),执行:cd /root/data/docker_data/npm docker-compose down cp -r /root/data/docker_data/npm /root/data/docker_data/npm.archive # 卸载前先备份,以防万一 rm -rf /root/data/docker_data/npm # 完全删除映射到本地的数据删除不再使用的 docker 对象docker image prune # prune 命令用来删除不再使用的 docker 对象。删除所有未被 tag 标记和未被容器使用的镜像DCM - Docker Compose Maker工具介绍:Select the tools you want to include in your docker-compose.yaml. 用于帮助用户创建 docker-compose.yml 文件,该项目提供了一个选择和配置容器的平台,使得用户不再需要从文档中复制粘贴,也不需要记住正确的配置选项官网地址:https://compose.ajnart.dev/ Nginx Proxy Manager工具介绍:Nginx proxy manager 是一个很强大的反向代理工具。官网地址:https://nginxproxymanager.com/Github 地址:https://github.com/NginxProxyManager/nginx-proxy-managerversion: '3.8' services: app: image: 'jc21/nginx-proxy-manager:latest' restart: unless-stopped ports: - '80:80' # 冒号左边可以改成自己服务器未被占用的端口 - '81:81' # 冒号左边可以改成自己服务器未被占用的端口 - '443:443' # 冒号左边可以改成自己服务器未被占用的端口 volumes: - ./data:/data # 冒号左边可以改路径,现在是表示把数据存放在在当前文件夹下的 data 文件夹中 - ./letsencrypt:/etc/letsencrypt # 冒号左边可以改路径,现在是表示把数据存放在在当前文件夹下的 letsencrypt 文件夹中默认访问地址及管理员信息:登录地址: http://ip:81 Email: admin@example.com Password: changemeqBittorrent工具介绍:BT 下载Github 地址:https://github.com/linuxserver/docker-qbittorrentversion: "2" services: qbittorrent: image: linuxserver/qbittorrent container_name: qbittorrent environment: - PUID=1000 - PGID=1000 - TZ=Asia/Shanghai # 你的时区 - UMASK_SET=022 - WEBUI_PORT=8081 # 将此处修改成你欲使用的 WEB 管理平台端口 volumes: - ~/qBittorrent/config:/config # 绝对路径请修改为自己的 config 文件夹 - ~/qBittorrent/downloads:/downloads # 绝对路径请修改为自己的 downloads 文件夹 ports: # 要使用的映射下载端口与内部下载端口,可保持默认,安装完成后在管理页面仍然可以改成其他端口。 - 6881:6881 - 6881:6881/udp # 此处WEB UI 目标端口与内部端口务必保证相同 - 8081:8081 restart: unless-stopped默认访问地址及管理员信息:登录地址: http://ip:8081 User: admin Password: adminadminTiny Tiny RSS工具介绍:RSS 订阅服务官网地址:https://tt-rss.org/Github 地址:https://github.com/HenryQW/Awesome-TTRSSversion: "3" services: service.rss: image: wangqiru/ttrss:latest container_name: ttrss ports: - 8002:80 # 改成自己的端口 environment: - SELF_URL_PATH=https://rss.665188.xyz/ # 设置访问域名,注意最好提前设置好域名,注意域名地址是否带有 "/" 符号。 - DB_PASS=ttrss # use the same password defined in `database.postgres` - PUID=1000 - PGID=1000 volumes: - feed-icons:/var/www/feed-icons/ networks: - public_access - service_only - database_only stdin_open: true tty: true restart: always service.mercury: # set Mercury Parser API endpoint to `service.mercury:3000` on TTRSS plugin setting page image: wangqiru/mercury-parser-api:latest container_name: mercury networks: - public_access - service_only restart: always service.opencc: # set OpenCC API endpoint to `service.opencc:3000` on TTRSS plugin setting page image: wangqiru/opencc-api-server:latest container_name: opencc environment: - NODE_ENV=production networks: - service_only restart: always database.postgres: image: postgres:13-alpine container_name: postgres environment: - POSTGRES_PASSWORD=ttrss # feel free to change the password volumes: - ~/postgres/data/:/var/lib/postgresql/data # persist postgres data to ~/postgres/data/ on the host networks: - database_only restart: always # utility.watchtower # container_name: watchtower # image: containrrr/watchtower:latest # volumes: # - /var/run/docker.sock:/var/run/docker.sock # environment: # - WATCHTOWER_CLEANUP=true # - WATCHTOWER_POLL_INTERVAL=86400 # restart: always volumes: feed-icons: networks: public_access: # Provide the access for ttrss UI service_only: # Provide the communication network between services only internal: true database_only: # Provide the communication between ttrss and database only internal: true默认访问地址及管理员信息:登录地址: http://ip:8002 User: admin Password: passwordHexo + 后台管理 + 评论工具介绍:使用 hexo admin 运行 hexo 的 Docker 容器,并添加 Twikoo 评论系统。Hexo 在线部署镜像 Github 地址:https://github.com/spurin/docker-hexoButterfly 官方 GitHub 地址:https://github.com/jerryc127/hexo-theme-butterfly评论系统 Twikoo 文档:https://twikoo.js.org/quick-start.html#私有部署-dockerHexo 部署:version: '3.3' services: hexo: container_name: hexo environment: - HEXO_SERVER_PORT=4000 # 不建议改,如果这边的 4000 改了,下面 ports 部分,冒号右边的 4000 也需要修改 - GIT_USER=github_name # 改成自己的用户名,可以随便写一个 - GIT_EMAIL=xxxx@gmail.com # 改成自己的邮箱,可以随便写一个 - TZ=Asia/Shanghai # 时区 volumes: - './blog:/app' # 冒号左边可以改路径,现在是表示把数据存放在在当前文件夹下的 blog 文件夹中 ports: - '8080:4000' # 冒号左边可以改成自己服务器未被占用的端口 image: spurin/hexoHexo 后台地址:登录地址: http://ip:8080/adminTwikoo 评论部署:version: "3.5" services: twikoo: container_name: twikoo image: imaegoo/twikoo environment: - TWIKOO_THROTTLE=1000 # IP 请求限流,当同一 IP 短时间内请求次数超过阈值将对该 IP 返回错误,默认 250,可以自己修改 ports: - 4000:8080 # 冒号左边可以改成自己服务器未被占用的端口 volumes: - ./data:/app/data # 冒号左边可以改路径,现在是表示把数据存放在在当前文件夹下的 data 文件夹中 restart: unless-stoppedAList工具介绍:支持多种存储的目录文件列表程序Alist 文档地址:https://alist-doc.nn.ci/docs/introGithub 地址:https://github.com/alist-org/alistversion: '3.3' services: alist: restart: always volumes: - '/etc/alist:/opt/alist/data' # 冒号左边的地址可以自己修改 ports: - '5244:5244' # 冒号左边的端口可以自己修改 container_name: alist image: 'xhofe/alist:latest'默认访问地址及管理员信息:登录地址: http://ip:5244 User: admin Password: adminUmami工具介绍:网站流量监控官网地址:https://umami.is/Github 地址:https://github.com/umami-software/umamiversion: '3' services: umami: image: docker.umami.dev/umami-software/umami:postgresql-latest ports: - "3000:3000" environment: DATABASE_URL: postgresql://umami:umami@db:5432/umami DATABASE_TYPE: postgresql APP_SECRET: replace-me-with-a-random-string depends_on: - db restart: always db: image: postgres:15-alpine environment: POSTGRES_DB: umami POSTGRES_USER: umami POSTGRES_PASSWORD: umami volumes: - ./sql/schema.postgresql.sql:/docker-entrypoint-initdb.d/schema.postgresql.sql:ro - ./umami-db-data:/var/lib/postgresql/data restart: always默认访问地址及管理员信息:登录地址: http://ip:3000 User: admin Password: umamiIT-Tools工具介绍:为开发人员收集方便的在线工具官网地址:https://it-tools.tech/Github 地址:https://github.com/CorentinTh/it-toolsversion: '3.9' services: ittools: image: 'ghcr.io/corentinth/it-tools:latest' container_name: it-tools restart: unless-stopped ports: - '30811:80'Nextcloud All-in-One工具介绍:开源网盘,功能丰富。Nextcloud AIO 代表 Nextcloud All-in-One,提供轻松的部署和维护,其中包含此 Nextcloud 实例中的大多数功能。官方 Docker 镜像:https://hub.docker.com/r/nextcloud/all-in-oneGithub 地址:https://github.com/nextcloud/all-in-oneversion: "3.8" volumes: nextcloud_aio_mastercontainer: name: nextcloud_aio_mastercontainer services: nextcloud: image: nextcloud/all-in-one:latest restart: unless-stopped container_name: nextcloud-aio-mastercontainer volumes: - nextcloud_aio_mastercontainer:/mnt/docker-aio-config - /var/run/docker.sock:/var/run/docker.sock:ro ports: - 8090:8080 # change the port on the left side if it's already in use on your host system. environment: - APACHE_PORT=11000 # change this port number if 11000 is already in use on your host system. - APACHE_DISABLE_REWRITE_IP=1 - NEXTCLOUD_TRUSTED_DOMAINS=pan.gugu.ovh 31.22.109.18 # Your domain name + proxy host IP - TRUSTED_PROXIES=31.22.109.18 # proxy host IPKoodo Reader工具介绍:开源免费的电子书阅读器,支持多达15种主流电子书格式, 内置笔记、高亮、翻译功能,助力高效书籍阅读和学习。官方 Docker Compose 文件:https://github.com/troyeguo/koodo-reader/blob/master/docker-compose.ymlGithub 地址:https://github.com/troyeguo/koodo-readerversion: '3.5' services: koodo: container_name: koodo build: context: . dockerfile: Dockerfile ports: - "80:80/tcp" restart: unless-stoppedPiwigo工具介绍:开源的网络照片库软件,用于管理照片,专为组织、团队和个人设计。Github 地址:https://github.com/Piwigo/Piwigoversion: "3" services: piwigo: image: linuxserver/piwigo network_mode: bridge ports: - 8899:80 links: - db db: image: mysql:5 network_mode: bridge environment: MYSQL_USER: "piwigo" MYSQL_PASSWORD: "piwigo" MYSQL_DATABASE: "piwigo" MYSQL_RANDOM_ROOT_PASSWORD: "true"Hellohao工具介绍:Hellohao 图像托管程序(图床)这是一个由 JAVA 语言编写 SpringBoot 框架开发的开源图像托管程序。具备多对象存储源对接,采用前后端分离式设计的一款专门托管图像的程序,支持多种格式的图像 多功能的图床系统。该程序支持除了 web 端之外,同时支持客户端(win/mac),移动端(小程序)等常用全平台支持。程序主要使用领域:个人照片存储,团队共享图像,博客/商城等网站图片托管,图像批量云分享等。具备优秀的多用户图像上传功能和完善的图像查询管理逻辑,同时支持对接多家对象存储。存储源支持:开源版:本地,阿里OSS,又拍USS,七牛KODO,腾讯COS,网易NOS,FTP,AWS S3协议(百度云BOS,青云Qingstor,Ucloud US3,Minio等兼容S3协议)Core 版:开源版的基础上增加 Backblaze(B2) 并且可同个对象存储商家可开多个存储源(可添加至90+存储源)Github 地址:https://github.com/hello-hao/Tbed初始用户名:admin 初始邮箱:admin 初始密码:adminversion: "3" services: tbed-free: # 具体版本号需要填写目前发行的最新版本 image: hellohao/tbed-free:2023xxxx networks: hellohao_network: ports: - "10088:10088" - "10089:10089" volumes: - /HellohaoData/:/HellohaoData/ environment: MYSQL_URL: jdbc:mysql://hellohaodb/tbed?useUnicode=true&characterEncoding=UTF-8&serverTimezone=Asia/Shanghai # 数据库用户名(一般使用本镜像数据库无需修改,如果使用外部三方数据库自行修改自己的用户名) MYSQL_USERNAME: root # 自定设置一个MySQL的密码,请保证与下方 POSTGRES_PASSWORD 的变量值一致 MYSQL_PASS: tIaNGg@SHa&hIo56 # 前端域名(反代10089端口的域名) HELLOHAO_WEB_HOST: http://pic.example.com # 后端域名(反代10088端口的域名) HELLOHAO_SERVER_HOST: http://server.example.com hellohaodb: image: hellohao/mysql-free:1.0 networks: hellohao_network: command: - --default-authentication-plugin=mysql_native_password - --character-set-server=utf8mb4 - --collation-server=utf8mb4_general_ci - --explicit_defaults_for_timestamp=true ports: - "3307:3306" volumes: - /HellohaoData/mysql:/var/lib/mysql environment: # MySQL的密码 MYSQL_ROOT_PASSWORD: tIaNGg@SHa&hIo56 networks: hellohao_network:Immich工具介绍:高性能的自托管照片和视频备份方案。官方网站: https://immich.appGithub 地址:https://github.com/immich-app/immich下载 docker-compose.yml 和 example.env 文件到同一个目录下并编辑配置文件。docker-compose.yml 文件wget https://github.com/immich-app/immich/releases/latest/download/docker-compose.ymlversion: "3.8" # # WARNING: Make sure to use the docker-compose.yml of the current release: # # https://github.com/immich-app/immich/releases/latest/download/docker-compose.yml # # The compose file on main may not be compatible with the latest release. # name: immich services: immich-server: container_name: immich_server image: ghcr.io/immich-app/immich-server:$ command: [ "start.sh", "immich" ] volumes: - $:/usr/src/app/upload - /etc/localtime:/etc/localtime:ro env_file: - .env ports: - 2283:3001 depends_on: - redis - database restart: always immich-microservices: container_name: immich_microservices image: ghcr.io/immich-app/immich-server:$ # extends: # uncomment this section for hardware acceleration - see https://immich.app/docs/features/hardware-transcoding # file: hwaccel.transcoding.yml # service: cpu # set to one of [nvenc, quicksync, rkmpp, vaapi, vaapi-wsl] for accelerated transcoding command: [ "start.sh", "microservices" ] volumes: - $:/usr/src/app/upload - /etc/localtime:/etc/localtime:ro env_file: - .env depends_on: - redis - database restart: always immich-machine-learning: container_name: immich_machine_learning # For hardware acceleration, add one of -[armnn, cuda, openvino] to the image tag. # Example tag: $-cuda image: ghcr.io/immich-app/immich-machine-learning:$ # extends: # uncomment this section for hardware acceleration - see https://immich.app/docs/features/ml-hardware-acceleration # file: hwaccel.ml.yml # service: cpu # set to one of [armnn, cuda, openvino, openvino-wsl] for accelerated inference - use the `-wsl` version for WSL2 where applicable volumes: - model-cache:/cache env_file: - .env restart: always redis: container_name: immich_redis image: redis:6.2-alpine@sha256:afb290a0a0d0b2bd7537b62ebff1eb84d045c757c1c31ca2ca48c79536c0de82 restart: always database: container_name: immich_postgres image: tensorchord/pgvecto-rs:pg14-v0.1.11@sha256:0335a1a22f8c5dd1b697f14f079934f5152eaaa216c09b61e293be285491f8ee env_file: - .env environment: POSTGRES_PASSWORD: $ POSTGRES_USER: $ POSTGRES_DB: $ volumes: - pgdata:/var/lib/postgresql/data restart: always volumes: pgdata: model-cache:将 example.env 文件重命名为 .env 文件wget -O .env https://github.com/immich-app/immich/releases/latest/download/example.env# You can find documentation for all the supported env variables at https://immich.app/docs/install/environment-variables # The location where your uploaded files are stored UPLOAD_LOCATION=./library # The Immich version to use. You can pin this to a specific version like "v1.71.0" IMMICH_VERSION=release # Connection secret for postgres. You should change it to a random password DB_PASSWORD=postgres # The values below this line do not need to be changed ################################################################################### DB_HOSTNAME=immich_postgres DB_USERNAME=postgres DB_DATABASE_NAME=immich REDIS_HOSTNAME=immich_redis持续更新中......
2023年05月28日
12 阅读
0 评论
0 点赞
1
2