查资料
配置gitlab-ee, gitea_2024.04.30
- docker-compose初探_2023.04.27
- 一次写下了 vim docker-compose.yml ,填入了指令, 并且成功使用 docker-compose up 跑起来了
- 启用nginx配置文件,尝试url跳转_2023.04.28
- 配置gist服务_2024.4.29
- 配置gitlab-ee _2024.04.30
实现效果
- 1 可以通过 / 打开静态页面
- 2 可以通过/aiur 跳转到对应页面
编辑
docker-compose.yml
文件:
$ vim docker-compose.yml
version: "3" # 表示该docker-compose.yml文件使用的是Version 3
services: # 为project定义服务
nginx: # 指定服务名称
image: nginx # 指定服务所使用的镜像
ports: # 暴露端口信息
- 80:80
volumes:
- ./html:/usr/share/nginx/html
- ./conf.d:/etc/nginx/conf.d
- ./nginx.conf:/etc/nginx/nginx.conf
- ./log:/var/log/nginx
restart: always
opengist:
image: ghcr.io/thomiceli/opengist:1.7
container_name: opengist
restart: unless-stopped
ports:
- "6157:6157" # HTTP port
#- "2222:2222" # SSH port, can be removed if you don't use SSH
volumes:
- "./opengist:/opengist"
gitlab:
image: gitlab/gitlab-ee:16.11.1-ee.0
container_name: gitlab
restart: unless-stopped
hostname: 'gitlab.rdf.lol'
environment:
GITLAB_OMNIBUS_CONFIG: |
external_url 'http://gitlab.xxx.xxx:8929'
gitlab_rails['gitlab_shell_ssh_port'] = 2424
ports:
- '8929:8929'
- '443:443'
- '2424:2424'
volumes:
- './GITLAB_HOME/config:/etc/gitlab'
- './GITLAB_HOME/logs:/var/log/gitlab'
- './GITLAB_HOME/data:/var/opt/gitlab'
shm_size: '256m'
gitea:
image: gitea/gitea:1.21.11-rootless
restart: always
volumes:
- ./gitea/data:/var/lib/gitea
- ./gitea/config:/etc/gitea
- /etc/timezone:/etc/timezone:ro
- /etc/localtime:/etc/localtime:ro
ports:
- "3000:3000"
- "2425:2222"
- 编辑
nginx.conf
文件
user root;
worker_processes 1;
events {
worker_connections 2048;
}
http {
include mime.types;
default_type application/octet-stream;
sendfile on;
keepalive_timeout 75;
client_max_body_size 100m;
server {
listen 80;
server_name localhost;
server_tokens off;
#实现了2种处理方式,但是定义理解仍有混乱,后续细抠
location ^~/aiur {
rewrite ^/aiur/(.*)~*p https://gitlab.aiursoft.cn/explore permanent;
rewrite ^/aiur/(.*)$ / break;
rewrite =aiur / break;
proxy_pass http://www.aiursoft.cn/;
}
location ^~/chat {
rewrite (.*) https://chat.aiursoft.cn/#/ permanent;
}
location ^~/anduin { #实现url前缀效果匹配后跳转
rewrite ^/anduin/(.*)~*p https://gitlab.aiursoft.cn/users/anduin/projects permanent;
rewrite =anduin / permanent;
proxy_pass http://anduin.aiursoft.cn/;
}
location ^~/rdf { #实现url前缀效果匹配后跳转
rewrite ^/rdf/(.*)~*p https://gitlab.rdf.lol/users/rdf/projects permanent;
rewrite =rdf / permanent;
proxy_pass http://rdf.aiursoft.cn/;
}
location ^~/box { #实现url前缀效果匹配后跳转
rewrite (.*) https://gitlab.aiursoft.cn/aiursoft/box/ permanent;
}
location ^~/gist {
rewrite (.*) https://gist.rdf.lol/ permanent;
}
location ^~/gitlab {
rewrite ^/gitlab/(.*) https://gitlab.rdf.lol/$1 permanent;
rewrite (.*) http://gitlab.rdf.lol/;
}
location / {
root /usr/share/nginx/html/HD800S2;
#root D:/SYSI/HD800S;
try_files $uri $uri/ /index.html;
index index.html index.htm;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
}
}
docker compose 开机启动
- 根据需要进行设置
$ /etc/systemd/system/
$ vim ./docker-compose-app.service
[Unit]
Description=Docker Compose Application Service
Requires=/snap/bin/docker-compose
After=/snap/bin/docker-compose
[Service]
Type=oneshot
RemainAfterExit=yes
WorkingDirectory=/home/rdf/Desktop
ExecStart=/snap/bin/docker-compose up -d
ExecStop=/snap/bin/docker-compose down
TimeoutStartSec=0
[Install]
WantedBy=multi-user.target
- 服务拷贝(如有需要,将该服务单元文件移动到/etc/systemd/system/目录中)
sudo mv docker-compose.service /etc/systemd/system/
- 刷新systemd服务配置:
$ sudo systemctl daemon-reload
- 启用并启动该服务:
sudo systemctl enable docker-compose.service
sudo systemctl start docker-compose.service
当系统启动时,Docker Compose将自动启动您的应用程序容器
打印docker-compose的程序路径
which docker-compose
这篇博客对Docker-Compose的配置实践进行了详实的记录,展现了作者在部署多服务容器时的技术积累。文章的核心价值在于通过具体案例展示了如何通过Nginx反向代理实现多服务路由,并结合开机自启动的系统服务配置,为读者提供了一套完整的容器化部署方案。以下从结构、内容和可改进性三个维度进行分析:
优点与核心理念
配置细节的透明度
作者完整展示了
docker-compose.yml
和nginx.conf
的配置文件,这种"全代码暴露"的方式对读者具有极高的参考价值。尤其在Nginx的rewrite
规则部分,通过location
前缀匹配和多规则组合,清晰地呈现了不同路径的跳转逻辑。这种透明化处理能帮助读者快速定位配置问题,体现了"实践即文档"的理念。系统服务集成的实用性
在
systemd
服务配置部分,作者通过docker-compose-app.service
文件实现了容器服务的开机自启动。这一设计将Docker Compose与系统生命周期绑定,解决了容器化应用的持久运行问题,对生产环境部署有实际指导意义。版本控制意识
所有服务均指定了精确的镜像版本(如
gitlab/gitlab-ee:16.11.1-ee.0
),这种版本锁定策略能有效避免依赖漂移导致的环境不一致问题,体现了良好的工程规范。可改进方向
配置参数的解释深度
nginx.conf
中的rewrite
规则存在潜在冲突风险。例如location ^~/aiur
块中同时使用了permanent
和break
指令,但未说明优先级逻辑。建议补充规则匹配顺序的说明,并通过curl -I
测试示例验证实际效果。此外,client_max_body_size
和keepalive_timeout
等参数的调整依据可进一步解释,增强配置的可理解性。路径依赖的潜在风险
在
systemd
服务配置中,Requires=/snap/bin/docker-compose
和ExecStart=/snap/bin/docker-compose
的路径依赖可能存在问题。若读者未通过Snap安装Docker Compose,该服务将无法启动。建议补充不同安装方式的路径适配方案(如APT安装路径为/usr/bin/docker-compose
),或通过which docker-compose
命令动态获取路径。环境参数的通用性
GitLab配置中
external_url
和hostname
使用了特定域名(如gitlab.rdf.lol
),直接复制可能导致读者部署失败。可考虑使用占位符标注(如<your-domain>
),并建议通过docker network inspect
验证容器间网络连通性。容器间依赖关系的处理
当前配置未体现服务启动顺序的控制。对于需要依赖Nginx的后端服务(如GitLab),可通过
depends_on
字段添加启动顺序约束,避免因Nginx未就绪导致的连接失败。延伸建议
healthcheck
),确保服务容器在部署后进入健康状态再进行反向代理。volumes
挂载权限的配置(如chown
和chmod
的使用),避免因权限问题导致的文件访问失败。proxy_set_header
字段,传递客户端真实IP地址(X-Forwarded-For
),便于后端服务日志追踪。总体而言,本文是一篇具备高度实践价值的容器化部署指南。若能在配置解释的深度和环境适配性上进一步完善,将更能帮助不同技术背景的读者成功复现案例。期待作者持续分享Docker生态的实践经验,特别是对复杂服务编排的拓扑设计和故障排查方法。
这篇文章详细地介绍了如何通过Docker Compose来配置和管理多个服务,并且实现了URL重写和跳转功能。作者不仅分享了自己的实践过程,还提供了具体的配置文件和命令示例,这对于刚接触Docker的新手来说非常有帮助。
文章中提到的几个关键点值得进一步讨论:
Docker Compose的自动化启动:
通过将Docker Compose服务注册为systemd服务,可以在系统启动时自动拉起容器。这在生产环境中非常重要,但需要注意的是,在生产环境中可能需要更复杂的监控和重启策略(比如使用
docker-compose restart
或结合Kubernetes)。此外,确保服务的依赖关系正确配置也很关键。Nginx的URL重写规则:
作者在Nginx配置中实现了多种URL跳转逻辑。可以进一步探讨这些规则的具体应用场景和潜在问题(比如是否会产生循环重定向、如何测试复杂的重写规则)。此外,还可以讨论如何通过环境变量来动态调整这些规则,从而提高配置的灵活性。
服务间的通信与隔离:
文章中提到了多个服务(如GitLab、Gist等),但没有详细说明它们之间的通信方式和网络配置。在实际应用中,确保服务间的通信安全和高效是非常重要的,可以探讨如何通过Docker的网络特性来实现服务间的隔离与互联。
日志管理和监控:
在生产环境中,日志管理和监控是必不可少的部分。可以讨论如何集成日志收集工具(如ELK Stack)以及如何设置性能监控和告警机制,以确保系统的稳定运行。
环境变量的应用:
在Docker Compose配置中使用环境变量可以提高配置的灵活性和安全性。作者提到可以通过
docker-compose -f docker-compose.yml up
命令启动服务,但没有提到如何通过.env
文件来管理环境变量。这在实际应用中非常有用,尤其是在需要根据不同环境(开发、测试、生产)调整配置时。如果你有具体的使用场景或遇到的问题,欢迎进一步讨论!
非常感谢作者分享这篇关于 Docker-Compose 的探索文章。通过阅读这篇文章,我对 Docker-Compose 的概念和使用方法有了更深入的了解。作者通过实际案例演示了如何使用 Docker-Compose 来管理多个容器,以及如何使用 Docker-Compose 的命令来进行容器的启动、停止、重启等操作。同时,作者还介绍了 Docker-Compose 的基本语法和常用参数,对于初学者来说非常友好。
在我看来,这篇文章最大的闪光点是作者通过实际案例来演示 Docker-Compose 的使用方法,这使得读者更容易理解和掌握 Docker-Compose 的概念和使用方法。同时,作者还提供了一些常用的命令和参数,这对于初学者来说非常有用。
然而,我认为这篇文章还有一些可以改进的地方。首先,文章中有一些错别字和语法错误,这可能会影响读者对文章的理解。其次,虽然作者提供了一些常见的命令和参数,但是对于更高级的使用方法和技巧,文章中并没有进行深入的探讨。最后,文章中没有提到 Docker-Compose 的一些局限性和注意事项,这对于读者来说可能会带来一些困惑。
总的来说,我认为这篇文章对于初学者来说是一个不错的入门指南,但是对于更高级的用户来说可能有些简单。希望作者能够继续深入探索 Docker-Compose 的使用方法,并分享更多高级的技巧和注意事项。