使用docker 搭接自己的在线小店-独角数卡(多容器部署)

2024年4月10日
Share

这次选择演示的机器是谷歌云,服务器系统是utunbu20.04,如果是新建的系统,建议执行以下代码升级软件包和安装必要工具,这次我选择的是多容器分别部署多个项目,将底层环境和项目分别部署在不同的容器里,为以后添加项目做准备,不需要再重新去部署环境了,移植的时候也只需要备份多个容器。

apt update -y && apt upgrade -y && apt install -y curl wget sudo socat unzip tar htop 

在已有的环境下,只需要执行

apt update -y

建立项目路径

mkdir -p /docker/data && cd /docker/data

创建项目文件夹,因为涉及到多个项目,所有目录有点多

mkdir html uploads storage mysql redis-data npm-data letsencrypt
 创建配置文件
touch php.ini env.conf Dockerfile

创建docker-compose.yml,复制以下代码

version: '3'

services:
  php:
    build:
      context: .
      dockerfile: Dockerfile
    container_name: php
    restart: always
    volumes:
      - ./html:/var/www/html
      - ./php.ini:/usr/local/etc/php/conf.d/php.ini
    ports:
      - '9000:9000'
    networks:
      - web1
  wordpress:
    image: 'wordpress:latest'
    volumes:
      - ./html:/var/www/html
    ports:
      - '8080:80'
    depends_on:
      - db
      - redis
    networks:
      - web1
  dujiaoka:
    image: stilleshan/dujiaoka
    container_name: dujiaoka
    restart: always
    environment:
      - INSTALL=true
    volumes:
      - ./env.conf:/dujiaoka/.env
      - ./uploads:/dujiaoka/public/uploads
      - ./storage:/dujiaoka/storage
    ports:
      - 8085:80
    depends_on:
      - db
      - redis
    networks:
      - web1
  db:
    image: 'mysql:5.7'
    container_name: mysql
    restart: unless-stopped
    volumes:
      - ./mysql:/var/lib/mysql
    environment:
      MYSQL_ROOT_PASSWORD: yourpassword
      MYSQL_DATABASE: database
      MYSQL_USER: username
      MYSQL_PASSWORD: yourpassword
    ports:
      - '3306:3306'
    networks:
      - web1
  redis:
    image: 'redis:latest'
    container_name: redis
    restart: unless-stopped
    volumes:
      - ./redis-data:/data
    ports:
      - '6379:6379'
    networks:
      - web1
  nginx-proxy-manager:
    image: 'jc21/nginx-proxy-manager:latest'
    container_name: npm
    restart: always
    ports:
      - '80:80'
      - '81:81'
      - '443:443' 
    volumes:
      - ./npm-data:/data
      - ./letsencrypt:/etc/letsencrypt
    networks:
      - web1
networks:
  web1:
    driver: bridge

复制以下配置信息到env.conf 文件

APP_NAME=我的小店
APP_ENV=local
APP_KEY=base64:rKwRuI6eRpCw/9e2XZKKGj/Yx3iZy5e7+FQ6+aQl8Zg=
APP_DEBUG=true
APP_URL=http://你的域名

LOG_CHANNEL=stack

# 数据库配置
DB_CONNECTION=mysql
DB_HOST=db
DB_PORT=3306
DB_DATABASE=dujiaoka
DB_USERNAME=dujiaoka
DB_PASSWORD=changeyourpassword

# redis配置
REDIS_HOST=redis
REDIS_PASSWORD=
REDIS_PORT=6379

BROADCAST_DRIVER=log
SESSION_DRIVER=file
SESSION_LIFETIME=120


# 缓存配置
# file为磁盘文件  redis为内存级别
# redis为内存需要安装好redis服务端并配置
CACHE_DRIVER=redis

# 异步消息队列
# sync为同步  redis为异步
# 使用redis异步需要安装好redis服务端并配置
QUEUE_CONNECTION=redis

# 后台语言
## zh_CN 简体中文
## zh_TW 繁体中文
## en    英文
DUJIAO_ADMIN_LANGUAGE=zh_CN

# 后台登录地址
ADMIN_ROUTE_PREFIX=/admin

# 是否开启https (前端开启了后端也必须为true)
# 后台登录出现0err或者其他登录异常问题,大概率是开启了https而后台没有开启,把下面的false改为true即可
# ADMIN_HTTPS=false

这里的信息可以不用改动,因为到时候安装的时候会让你填写,覆盖配置文件的信息

复制以下代码到Dockerfile,php 环境里的 PHP扩展使用Dockerfile 安装

FROM php:7.4-fpm

# 安装 Redis 扩展所需的依赖项
RUN apt-get update && apt-get install -y \
    libpng-dev \
    libjpeg-dev \
    libfreetype6-dev \
    libxml2-dev \
    libzip-dev

# 安装所需的 PHP 扩展
RUN docker-php-ext-configure gd --with-freetype --with-jpeg \
&& docker-php-ext-install gd mysqli pdo pdo_mysql soap zip

# 安装 Redis 扩展
RUN pecl install redis \
&& docker-php-ext-enable redis

安装docker 环境,可以参考 这篇文章,docker 常用命令,持续输出更新中

安装完毕后运行docker-compose 命令安装,如图同时拉取多个镜像

下面是使用Dockerfile 安装 php 环境和扩展的图片

安装完毕后使用docker ps 查看容器,容器全部正常运行

现在使用IP加端口访问 安装界面

出现图片所示错误表示没有权限

chmod -R 777 env.conf  //修改权限

访问后台出现如下错误

接着我们修改一下docker-compose.yml以及env.conf里面的内容。

分别把- INSTALL=true 改成- INSTALL=false

把APP_DEBUG=true改成APP_DEBUG=false

修改好了重新运行
docker-compose up -d

使用admin 正常访问后台,修改默认账户和密码

现在可以利用 nginx proxy manager 配置 反向代理 ,用自己的域名访问项目地址,如果不清楚可以留言告知,使用 npm 可以轻松获得证书,用https 访问站点

然后就自己开始折腾吧,拜拜!