三角洲辅助卡盟新版上线,应有尽有
当前位置:首页 > 游戏攻略> 正文

创世之书攻略8

发布时间:06/21 11:07:15
创世之书攻略8:手把手实现Docker容器化部署与反向代理

一、基础环境准备与依赖安装

在开始部署创世之书项目之前,必须确保服务器环境已经安装了Docker及Docker Compose工具。本指南基于CentOS 7.x/8.x或Ubuntu 20.04及以上版本编写,请严格按照以下命令执行环境初始化。

执行以下命令卸载系统可能残留的旧版本Docker,避免冲突:

```bash sudo yum remove docker \ docker-client \ docker-client-latest \ docker-common \ docker-latest \ docker-latest-logrotate \ docker-logrotate \ docker-engine ```

接下来,使用阿里云镜像源安装Docker Engine,这能显著提高国内环境的下载速度。执行以下安装脚本:

```bash sudo yum install -y yum-utils sudo yum-config-manager \ --add-repo \ https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo sudo yum install -y docker-ce docker-ce-cli containerd.io ```

安装完成后,启动Docker服务并设置开机自启:

```bash sudo systemctl start docker sudo systemctl enable docker ```

为了方便管理多容器应用,我们需要安装Docker Compose。直接下载二进制文件到/usr/local/bin目录并赋予执行权限:

```bash sudo curl -L "https://github.com/docker/compose/releases/download/v2.20.0/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose sudo chmod +x /usr/local/bin/docker-compose ```

验证安装是否成功,输入以下命令,若输出版本号则说明环境就绪:

```bash docker --version docker-compose --version ```

二、构建项目目录结构

为了保持部署的规范性,我们需要在服务器上创建一个标准的项目目录。假设我们将项目部署在/data/genesis-deploy目录下,执行以下命令创建目录结构:

```bash mkdir -p /data/genesis-deploy/{app,nginx,logs} cd /data/genesis-deploy ```

目录用途说明如下:

  • app:存放应用程序的源代码或编译后的包。
  • nginx:存放Nginx配置文件。
  • logs:映射容器内部日志,防止日志充满容器磁盘。

三、编写Dockerfile应用镜像文件

进入app目录,创建Dockerfile文件。这里假设“创世之书”是一个基于Python Flask开发的Web应用。如果是其他语言,请对应调整基础镜像和启动命令。

```bash cd /data/genesis-deploy/app vim Dockerfile ```

在文件中输入以下完整配置内容。该配置定义了镜像的构建过程,从官方Python镜像起步,安装依赖并设置启动参数:

```dockerfile 使用官方Python 3.9 slim版本作为基础镜像,体积更小 FROM python:3.9-slim 设置镜像内的工作目录 WORKDIR /app 设置环境变量,禁止Python生成.pyc文件,并让日志直接输出到控制台 ENV PYTHONDONTWRITEBYTECODE 1 ENV PYTHONUNBUFFERED 1 安装系统依赖(如果项目需要编译某些C扩展,此处需安装gcc等) RUN apt-get update && apt-get install -y \ gcc \ && rm -rf /var/lib/apt/lists/ 复制项目依赖文件到镜像中 COPY requirements.txt . 安装Python依赖包,使用国内清华源加速 RUN pip install --no-cache-dir -i https://pypi.tuna.tsinghua.edu.cn/simple -r requirements.txt 复制项目源代码到工作目录 COPY . . 暴露应用运行的端口(假设应用内部运行在5000端口) EXPOSE 5000 定义容器启动时执行的命令 CMD ["gunicorn", "-w", "4", "-b", "0.0.0.0:5000", "app:app"] ```

注意:请确保app目录下存在requirements.txt文件和app.py入口文件。如果没有真实代码,可以创建一个极简的app.py用于测试:

```python from flask import Flask app = Flask(__name__) @app.route('/') def hello(): return "Genesis Book Deployed Successfully" if __name__ == '__main__': app.run() ```

四、配置Nginx反向代理

为了实现域名访问、SSL加密(HTTPS)以及负载均衡,我们需要在宿主机配置Nginx,并使用反向代理将流量转发给容器内的应用。

进入nginx目录创建配置文件:

```bash cd /data/genesis-deploy/nginx vim genesis.conf ```

输入以下完整的Nginx配置。该配置定义了上游服务器,处理了静态文件缓存,并设置了关键的代理头信息:

```nginx upstream genesis_backend { 指向Docker容器内部的应用端口,这里对应docker-compose中定义的服务名 server genesis-app:5000; } server { listen 80; server_name your-domain.com; 请替换为您的实际域名或服务器IP 访问日志路径 access_log /var/log/nginx/genesis_access.log; error_log /var/log/nginx/genesis_error.log; 客户端上传文件大小限制 client_max_body_size 20M; location / { proxy_pass http://genesis_backend; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; WebSocket支持(如果项目需要实时通讯) proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection "upgrade"; 超时设置 proxy_connect_timeout 60s; proxy_send_timeout 60s; proxy_read_timeout 60s; } } ```

五、编写Docker Compose编排文件

回到项目根目录,创建docker-compose.yml文件。这是整个部署的核心,它将Web应用和Nginx容器组合在一个网络中。

```bash cd /data/genesis-deploy vim docker-compose.yml ```

输入以下完整编排配置。注意配置了restart: always以确保服务崩溃自动重启,并通过volumes实现了配置文件和日志的持久化映射:

```yaml version: '3.8' services: 定义Web应用服务 genesis-app: build: ./app container_name: genesis-app restart: always networks: - genesis-net volumes: - ./app:/app - ./logs:/var/log environment: - TZ=Asia/Shanghai 定义Nginx反向代理服务 genesis-nginx: image: nginx:latest container_name: genesis-nginx restart: always ports: - "80:80" - "443:443" networks: - genesis-net volumes: - ./nginx/genesis.conf:/etc/nginx/conf.d/genesis.conf - ./logs:/var/log/nginx depends_on: - genesis-app 定义自定义网络,保证容器间可以通过服务名互相访问 networks: genesis-net: driver: bridge ```

六、启动服务与功能验证

所有配置文件已就绪,现在执行构建和启动命令。在/data/genesis-deploy目录下执行:

```bash docker-compose up -d --build ```

参数解释:-d表示后台运行,--build表示强制重新构建镜像。如果看到“Creating genesis-app ... done”等字样,说明启动成功。

检查容器运行状态,确保两个容器都是“Up”状态:

```bash docker-compose ps ```

检查应用日志,确认没有Python报错信息:

```bash docker-compose logs -f genesis-app ```

进行功能验证。在浏览器或使用curl命令访问服务器IP:

```bash curl http://localhost ```

如果返回“Genesis Book Deployed Successfully”或您的应用实际页面,说明部署完全成功。如果遇到502 Bad Gateway错误,请使用docker-compose logs genesis-nginx检查Nginx日志,通常是由于nginx.conf中的upstream地址与docker-compose中的服务名不一致导致的。

版权保护: 本文由 741卡盟 原创,转载请保留链接: http://741ka.com/gamenews/23629.html