Go(gin 框架)

Dockerfile

FROM golang:alpine AS builder

LABEL stage=gobuilder

ENV CGO_ENABLED 0
ENV GOPROXY https://goproxy.cn,direct
RUN sed -i 's/dl-cdn.alpinelinux.org/mirrors.aliyun.com/g' /etc/apk/repositories
RUN apk update --no-cache && apk add --no-cache tzdata

WORKDIR /build
ADD go.mod .
ADD go.sum .
RUN go mod download
COPY . .
COPY etc/env.yaml /app/etc/env.yaml
RUN go build -ldflags="-s -w" -o /app/myapp main.go

FROM scratch
COPY --from=builder /etc/ssl/certs/ca-certificates.crt /etc/ssl/certs/ca-certificates.crt
COPY --from=builder /usr/share/zoneinfo/Asia/Shanghai /usr/share/zoneinfo/Asia/Shanghai
ENV TZ Asia/Shanghai

WORKDIR /app
COPY --from=builder /app/myapp /app/myapp
COPY --from=builder /app/etc/env.yaml /app/etc/env.yaml
VOLUME /tmp
CMD ["./myapp"]

docker-compose.yml

version: '2'
services:
  web:
    image: myapp:latest
    volumes:
      - ./logs:/app/logs
    ports:
      - "8080:8080"
    restart: unless-stopped

nginx

version: "2"
services:
  web:
    image: nginx:latest
    ports:
      - 80:80
    volumes:
      - ./html:/usr/share/nginx/html
      - ./conf.d:/etc/nginx/conf.d
    restart: unless-stopped

conf.d/default.conf

server {
    listen 80;
    server_name localhost;

    location /v1/ {
        proxy_pass http://localhost:8080/v1/;
    }

    location / {
        root /usr/share/nginx/html;
        index index.html index.htm;
        try_files $uri $uri/ /index.html;
    }
}

MySQL

version: '3.1'
services:
  db:
    image: mysql
    restart: always
    container_name: mysql
    environment:
      MYSQL_ROOT_PASSWORD: 123456
    command:
      --default-authentication-plugin=mysql_native_password
      --character-set-server=utf8mb4
      --collation-server=utf8mb4_general_ci
      --lower_case_table_names=1
    ports:
      - 3306:3306
    volumes:
      - ./data:/var/lib/mysql
      - ./conf:/etc/mysql/conf.d
      - ./logs:/logs

RabbitMQ

version: "3.7"
services:
  rabbitmq:
    image: rabbitmq:3.11-management-alpine
    container_name: rabbitmq
    ports:
      - 5672:5672
      - 15672:15672
    volumes:
      - rabbitmq_data:/var/lib/rabbitmq/
      - rabbitmq_log:/var/log/rabbitmq/

volumes:
  rabbitmq_data:
  rabbitmq_log:

Redis

注意:需先创建 redis.conf 文件,否则会生成同名目录。

touch redis.conf
version: '3.1'
services:
  redis:
    image: redis:7.0.10
    container_name: redis
    ports:
      - 6379:6379
    volumes:
      - ./redis.conf:/etc/redis/redis.conf
    command: redis-server /etc/redis/redis.conf
    restart: always

PHP(Laravel + sendmail)

Dockerfile

FROM php:8.1.18-cli
RUN pecl install redis-5.3.7 && docker-php-ext-enable redis
COPY . /myapp

WORKDIR /mycomposer
RUN apt-get update && apt-get install -y zip
ENV COMPOSER_HOME /root/composer
RUN curl -sS https://getcomposer.org/installer | php -- --install-dir=/usr/local/bin --filename=composer
ENV PATH $COMPOSER_HOME/vendor/bin:$PATH

WORKDIR /myapp
RUN composer config -g repo.packagist composer https://mirrors.aliyun.com/composer/ \
    && COMPOSER_ALLOW_SUPERUSER=1 composer install
CMD ["php", "/myapp/artisan", "serve", "--host=0.0.0.0", "--port=80"]
version: '2'
services:
  web:
    image: sendmail:1.1
    volumes:
      - ./storage/logs:/myapp/storage/logs
      - ./.env:/myapp/.env
    ports:
      - "80:80"
    restart: unless-stopped

Alist 网盘

version: '3.3'
services:
  alist:
    image: xhofe/alist:latest
    container_name: alist
    restart: always
    ports:
      - '5244:5244'
    environment:
      - PUID=0
      - PGID=0
      - UMASK=022
    volumes:
      - ./data:/opt/alist/data

Gitea 自建代码仓库

version: "3"
networks:
  gitea:
    external: false

services:
  server:
    image: gitea/gitea:1.19.0
    container_name: gitea
    restart: always
    networks:
      - gitea
    environment:
      - USER_UID=1000
      - USER_GID=1000
      - GITEA__database__DB_TYPE=mysql
      - GITEA__database__HOST=db:3306
      - GITEA__database__NAME=gitea
      - GITEA__database__USER=gitea
      - GITEA__database__PASSWD=gitea
    volumes:
      - /home/git/.ssh/:/data/git/.ssh
      - ./gitea:/data
      - /etc/localtime:/etc/localtime:ro
    ports:
      - "3000:3000"
      - "22:22"
    depends_on:
      - db

  db:
    image: mysql:8
    restart: always
    networks:
      - gitea
    environment:
      - MYSQL_ROOT_PASSWORD=gitea
      - MYSQL_USER=gitea
      - MYSQL_PASSWORD=gitea
      - MYSQL_DATABASE=gitea
    volumes:
      - ./mysql:/var/lib/mysql

ChatGPT Next Web

version: '3.3'
services:
  chat:
    image: yidadaa/chatgpt-next-web:latest
    container_name: chat
    restart: always
    ports:
      - '3000:3000'
    environment:
      - OPENAI_API_KEY=sk-XXXXXXXXXXXXXXXXXXXXXXXXX
      - CODE=yourpassword

RustDesk 远程控制服务端

version: '3'
networks:
  rustdesk-net:
    external: false

services:
  hbbs:
    container_name: hbbs
    image: rustdesk/rustdesk-server:latest
    command: hbbs -r <你的域名>:21117
    ports:
      - 21115:21115
      - 21116:21116
      - 21116:21116/udp
    volumes:
      - ./data:/root
    networks:
      - rustdesk-net
    depends_on:
      - hbbr
    restart: unless-stopped

  hbbr:
    container_name: hbbr
    image: rustdesk/rustdesk-server:latest
    command: hbbr
    ports:
      - 21117:21117
    volumes:
      - ./data:/root
    networks:
      - rustdesk-net
    restart: unless-stopped