Docker项目脚本
1. docker 操作命令
安装 docker-compose```bash sudo apt install -y docker-compose ``` 或者 ```bash wget -qO- get.docker.com | bash ``` 系统默认开机启动 ```bash systemctl start docker ``` 杀死运行的容器: ```bash docker kill $(docker ps -a -q) ``` 删除所有容器: ```bash docker rm $(docker ps -a -q) ``` 强制删除所有镜像: ```bash docker rmi -f $(docker images -q) ``` 一条命令实现停用并删除容器: ```bash docker stop $(docker ps -q) & docker rm $(docker ps -aq) ```" 退出docker容器 " Ctrl+P+ Q
2. Docker面板管理
- Docker面板添加多台主机容器
bashmkdir -p /datadisk/DockerProjects/DockerPortainerPanel && cd /datadisk/DockerProjects/DockerPortainerPanel 创建项目相关文件夹👆bashdocker run -d -p 8000:8000 -p 9000:9000 --name DockerPortainerPanel --restart=always -v /var/run/docker.sock:/var/run/docker.sock -v /datadisk/DockerProjects/DockerPortainerPanel/data:/data portainer/portainer-ce:latest 创建docker容器👆详细操作
1. 添加端口
vim /usr/lib/systemd/system/docker.service
ExecStart=/usr/bin/dockerd -H tcp://0.0.0.0:2375 -H fd:// --containerd=/run/containerd/containerd.sock
2. 修改完之后保存文件,然后重启docker服务
bashsystemctl daemon-reload systemctl restart docker3. 路径:
Environments → Add Environments → Docker → Start → API → "nginx.soloasural.ml:2375"
3. Mysql
- 详细操作
- 创建文件夹
bashmkdir -p /datadisk/DockerProjects/Mysql && chmod -R 755 /datadisk/DockerProjects/Mysql && cd /datadisk/DockerProjects/Mysql- 创建容器
bashdocker run -itd --restart=always --name Mysql -p 3306:3306 -v $PWD/mysqld/:/var/run/mysqld/ -v $PWD/conf:/etc/mysql/conf.d -v $PWD/logs:/logs -v $PWD/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=6d74a206 -d mysql- 进入容器
bashdocker exec -it Mysql /bin/bash
- mysql -u root -p
- ALTER USER 'root'@'localhost' IDENTIFIED BY '6d74a206' PASSWORD EXPIRE NEVER;
- ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY '6d74a206';
- flush privileges;
4. Redis
- 详细操作
- 创建标准配置文件并上传到项目根目录 (redis.conf) 里面也需要配置密码
bash# bind 192.168.1.100 10.0.0.1 # bind 127.0.0.1 ::1 # bind 127.0.0.1 protected-mode no port 6379 tcp-backlog 511 requirepass 6d74a206 timeout 0 tcp-keepalive 300 daemonize no supervised no pidfile /var/run/redis_6379.pid loglevel notice logfile "" databases 30 always-show-logo yes save 900 1 save 300 10 save 60 10000 stop-writes-on-bgsave-error yes rdbcompression yes rdbchecksum yes dbfilename dump.rdb dir ./ replica-serve-stale-data yes replica-read-only yes repl-diskless-sync no repl-disable-tcp-nodelay no replica-priority 100 lazyfree-lazy-eviction no lazyfree-lazy-expire no lazyfree-lazy-server-del no replica-lazy-flush no appendonly yes appendfilename "appendonly.aof" no-appendfsync-on-rewrite no auto-aof-rewrite-percentage 100 auto-aof-rewrite-min-size 64mb aof-load-truncated yes aof-use-rdb-preamble yes lua-time-limit 5000 slowlog-max-len 128 notify-keyspace-events "" hash-max-ziplist-entries 512 hash-max-ziplist-value 64 list-max-ziplist-size -2 list-compress-depth 0 set-max-intset-entries 512 zset-max-ziplist-entries 128 zset-max-ziplist-value 64 hll-sparse-max-bytes 3000 stream-node-max-bytes 4096 stream-node-max-entries 100 activerehashing yes hz 10 dynamic-hz yes aof-rewrite-incremental-fsync yes rdb-save-incremental-fsync yes
- 创建文件夹
bashmkdir -p /datadisk/DockerProjects/Redis && chmod -R 755 /datadisk/DockerProjects/Redis && cd /datadisk/DockerProjects/Redis- 创建容器
bashdocker run --restart=always --log-opt max-size=100m --log-opt max-file=2 -p 6379:6379 --name Redis -v $PWD/redis.conf:/etc/redis/redis.conf -v $PWD/data:/data -d redis redis-server /etc/redis/redis.conf --appendonly yes --requirepass 6d74a206- 进入容器
bashdocker exec -it Redis /bin/bash
- 测试
- 通过docker ps指令查看启动状态
bashdocker ps -a |grep myredis- 查看容器运行日志 -- 30分钟内的
bashdocker logs --since 30m Redis- 容器内部连接进行测试
bashdocker exec -it Redis redis-cli- 验证密码
bashauth 密码- 查看当前redis有没有设置密码
bashconfig get < timeout-字段 >
5. Nginx Proxy Manager. (前提:不能安装nginx)
- 详细操作
bashmkdir -p /datadisk/DockerProjects/NginxProxyManager && chmod -R 755 /datadisk/DockerProjects/NginxProxyManager && cd /datadisk/DockerProjects/NginxProxyManagerbashvim docker-compose.ymlbashversion: "3" services: app: image: 'jc21/nginx-proxy-manager:latest' restart: unless-stopped hostname: NginxProxyManager container_name: NginxProxyManager ports: # These ports are in format <host-port>:<container-port> - '80:80' # Public HTTP Port - '443:443' # Public HTTPS Port - '81:81' # Admin Web Port # Add any other Stream port you want to expose # - '21:21' # FTP environment: DB_MYSQL_HOST: "db" DB_MYSQL_PORT: 3306 DB_MYSQL_USER: "npm" DB_MYSQL_PASSWORD: "npm" DB_MYSQL_NAME: "npm" # Uncomment this if IPv6 is not enabled on your host # DISABLE_IPV6: 'true' volumes: - ./data:/data - ./letsencrypt:/etc/letsencrypt depends_on: - db db: image: 'jc21/mariadb-aria:latest' restart: unless-stopped hostname: Nginx-Mariadb container_name: Nginx-Mariadb environment: MYSQL_ROOT_PASSWORD: 'npm' MYSQL_DATABASE: 'npm' MYSQL_USER: 'npm' MYSQL_PASSWORD: 'npm' volumes: - ./data/mysql:/var/lib/mysqlbashdocker-compose up -dbashhttp://[2603:c022:8004:7900:3c0a:3efc:233:6e8a]:81/login admin@example.com changeme SoloAsural@163.com 94591026LoVe 登录
5. 自搭建 ChatGPT
- 详细操作
- 创建目录
bashmkdir -p /datadisk/WebSites/ChatGPT/ && chmod -R 755 /datadisk/WebSites/ChatGPT/ && cd /datadisk/WebSites/ChatGPT/- 创建脚本
bashvim docker-compose.ymlbashversion: '3' services: app: image: chenzhaoyu94/chatgpt-web:main restart: unless-stopped hostname: ChatGPT container_name: ChatGPT ports: - 3002:3002 environment: OPENAI_API_KEY: [api]- 启动docker
bashdocker-compose up -d- 配置域名
bashservice nginx stop mkdir -p /etc/nginx/cert/chat.soloasural.eu.org && chmod -R 755 /etc/nginx/cert/chat.soloasural.eu.org ~/.acme.sh/acme.sh --register-account -m SoloAsural@gmail.com ~/.acme.sh/acme.sh --issue -d chat.soloasural.eu.org --standalone ~/.acme.sh/acme.sh --installcert -d chat.soloasural.eu.org --key-file /etc/nginx/cert/chat.soloasural.eu.org/key.pem --fullchain-file /etc/nginx/cert/chat.soloasural.eu.org/cert.pem- nginx反代
bashvim /etc/nginx/nginxConFiles/chat.soloasural.eu.org.confbashserver { listen 80; server_name chat.soloasural.eu.org; return 301 https://$host$request_uri; } server { listen 443 ssl http2; server_name chat.soloasural.eu.org; ssl_certificate /etc/nginx/cert/chat.soloasural.eu.org/cert.pem; ssl_certificate_key /etc/nginx/cert/chat.soloasural.eu.org/key.pem; location / { proxy_pass http://127.0.0.1:3002; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; } }
6. 10分钟搭建一个轻量、快速、美观的个人导航页面——Flare (GitHub)
- 详细操作
- 创建文件
bashmkdir -p /datadisk/DockerProjects/Flare && chmod -R 755 /datadisk/DockerProjects/Flare && cd /datadisk/DockerProjects/Flare- 创建脚本
bashvim docker-compose.yml- 编写文件
bashversion: '3.6' services: flare: image: soulteary/flare restart: always hostname: Flare container_name: Flare # 默认无需添加任何参数,如有特殊需求 # 可阅读文档 https://github.com/soulteary/docker-flare/blob/main/docs/advanced-startup.md command: flare # 启用账号登陆模式 command: flare --nologin=0 environment: # 如需开启用户登陆模式,需要先设置 `nologin` 启动参数为 `0` # 如开启 `nologin`,未设置 FLARE_USER,则默认用户为 `flare` - FLARE_USER=SoloAsural # 指定你自己的账号密码,如未设置 `FLARE_USER`,则会默认生成密码并展示在应用启动日志中 - FLARE_PASS=94591026LoVe # 是否开启“使用向导”,访问 `/guide` - FLARE_GUIDE=1 ports: - 3020:5005 volumes: - ./app:/app- 启动docker
bashdocker-compose up -d- 配置域名
bashservice nginx stop mkdir -p /etc/nginx/cert/tag.soloasural.eu.org && chmod -R 755 /etc/nginx/cert/tag.soloasural.eu.org ~/.acme.sh/acme.sh --register-account -m SoloAsural@gmail.com ~/.acme.sh/acme.sh --issue -d tag.soloasural.eu.org --standalone ~/.acme.sh/acme.sh --installcert -d tag.soloasural.eu.org --key-file /etc/nginx/cert/tag.soloasural.eu.org/key.pem --fullchain-file /etc/nginx/cert/tag.soloasural.eu.org/cert.pem- nginx反代
bashvim /etc/nginx/nginxConFiles/tag.soloasural.eu.org.confbashserver { listen 80; server_name tag.soloasural.eu.org; return 301 https://$host$request_uri; } server { listen 443 ssl http2; server_name tag.soloasural.eu.org; ssl_certificate /etc/nginx/cert/tag.soloasural.eu.org/cert.pem; ssl_certificate_key /etc/nginx/cert/tag.soloasural.eu.org/key.pem; location / { proxy_pass http://127.0.0.1:3020; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; } }- 更新Flare
bashcd /datadisk/DockerProjects/Flare docker-compose down # 万事先备份,以防万一 cp -r /datadisk/DockerProjects/Flare /datadisk/DockerProjects/Flare.archive docker-compose pull # 请不要使用 docker-compose stop 来停止容器,因为这么做需要额外的时间等待容器停止;docker-compose up -d 直接升级容器时会自动停止并立刻重建新的容器,完全没有必要浪费那些时间。 docker-compose up -d # prune 命令用来删除不再使用的 docker 对象。删除所有未被 tag 标记和未被容器使用的镜像 docker image prune
7. Freenom域名自动续期
- 详细操作
- 创建目录
bashmkdir /datadisk/DockerProjects/FreenomAutomatic/ && chmod -R 755 /datadisk/DockerProjects/FreenomAutomatic/ && cd /datadisk/DockerProjects/FreenomAutomatic/- 部署域名续期脚本
bashdocker run -d --name FreenomAutomatic --restart always -v $(pwd):/conf -v $(pwd)/logs:/app/logs luolongfei/freenom添加域名nameserver (这里不使用)bashRYLEIGH.NS.CLOUDFLARE.COM SERGI.NS.CLOUDFLARE.COM- 配置分解【参考】
- 分解详情
- Freenom 账户 / 密码 → 官网
bash###################### 账户配置 Account config ######################### # Freenom 账户 Freenom Account FREENOM_USERNAME='boudagrigrz@gmail.com' # Freenom 密码 Freenom password FREENOM_PASSWORD='n3u9_tH3j@SU8Vr' # 【可选】 Freenom 代理 [Optional] Freenom proxy e.g. http://127.0.0.1:1081 or socks5://127.0.0.1:1080 FREENOM_PROXY='' ###################### end 账户配置 #########################- 通知邮件配置 Email config
bash###################### 通知邮件配置 Email config ######################### # 机器人邮箱账户 Email of robot MAIL_USERNAME='iAsural@163.com' # 机器人邮箱密码(Gmail填密码,QQ邮箱或163邮箱填授权码) Password of the robot email MAIL_PASSWORD='VIFNWKBJGEOOQYYH' # 用于接收通知的邮箱 Email address used to receive notifications TO='iAsural@163.com' # 是否启用邮件推送功能 1:启用 0:不启用 Whether to enable email push features 1: enabled 0: not enabled MAIL_ENABLE=1 # 【可选】 SMTP 服务器 [Optional] SMTP server e.g. smtp.gmail.com MAIL_HOST='smtp.163.com' # 【可选】 SMTP 端口号,一般是 587 或者 465 [Optional] SMTP port number, usually 587 or 465 MAIL_PORT='25' # 【可选】 邮件加密方式,一般是 tls 或者 ssl 或者 starttls [Optional] Mail encryption method, usually tls or ssl or starttls MAIL_ENCRYPTION='tls' # end 自定义邮箱配置 end of custom email config ###################### end 通知邮件配置 #########################- Telegram bot 发送通知消息
bash###################### Telegram bot ######################### # 通过 Telegram bot 发送通知消息 Send messages via Telegram bot # 你的 chat_id,通过发送“/start”给 @userinfobot 可以获取自己的 id Your chat_id, you can get your own id by sending "/start" to @userinfobot TELEGRAM_CHAT_ID='6093257014' # 你的 Telegram bot 的 token Token for your Telegram bot TELEGRAM_BOT_TOKEN='5765903614:AAEaE-22rryCe5by2PKT1ts3u6KxfMahUgE' # 【可选】 自建 Telegram 反向代理地址,不明白则请忽略此配置项,保持默认即可 [Optional] Please do not modify this item # 参考:https://web.archive.org/web/20220221035315/https://hostloc.com/thread-805441-1-1.html # 只要是一个合法的网址即可,程式会自动提取网址的主机部分。例如 https://xxx.xx.workers.dev/ or xxx.xx.xx CUSTOM_TELEGRAM_HOST='api.telegram.org' # 是否启用 Telegram Bot 功能 1:启用 0:不启用 Whether to enable Telegram Bot features 1: enabled 0: not enabled TELEGRAM_BOT_ENABLE=1 ###################### end Telegram bot #########################- 企业微信
bash###################### 企业微信 ######################### # 企业 ID Corporate ID WECHAT_CORP_ID='ww6cb30c14c584c0de' # 应用的凭证密钥 Credential keys for enterprise WeChat applications WECHAT_CORP_SECRET='DleWVHZ_bg4YoqpSORSu8WlbaHnIgNAPwY8nXbCjGkg' # 应用 ID WECHAT_AGENT_ID='1000002' # 是否启用企业微信送信功能 1:启用 0:不启用 Whether to enable the enterprise WeChat message push function 1: Enable 0: Do not enable WECHAT_ENABLE=1 ###################### end 企业微信 #########################- 完整配置
bashvim .envbash##################################################################### # 注意事项 # # - 环境变量的格式为“键=值”,顶格写,注意等号两边不能有空格,值可以用单引号或者双引号引起来,不引也行(下面的特殊情况必须引起来) # - 因为环境变量中“#”代表注释,若密码中存在“#”字符的,一定要使用单引号将整个密码引起来,否则解析会在“#”字符前截止,如果密码中存在单双引号的, # 需要在单双引号前加“\”转义 # - 配置多账户不可省略单引号,且多个账户和密码的格式必须是“<账户1>@<密码1>|<账户2>@<密码2>|<账户3>@<密码3>”,不要有空格,就算有程序也会给你干掉 # e.g. MULTIPLE_ACCOUNTS='<账户1>@<密码1>|<账户2>@<密码2>|<账户3>@<密码3>' # 注意不要省略“<>”符号,否则无法正确匹配 # - 若你只有单个账户,只配置 FREENOM_USERNAME 和FREENOM_PASSWORD 就够了 # - 单账户和多账户的配置会被合并在一起读取并去重 ##################################################################### # .env 文件版本 ENV_FILE_VERSION='v2.4' ###################### 账户配置 Account config ######################### # Freenom 账户 Freenom Account FREENOM_USERNAME='boudagrigrz@gmail.com' # Freenom 密码 Freenom password FREENOM_PASSWORD='n3u9_tH3j@SU8Vr' ###################### end 账户配置 ######################### ###################### 通知邮件配置 Email config ######################### # 机器人邮箱账户 Email of robot MAIL_USERNAME='iAsural@163.com' # 机器人邮箱密码(Gmail填密码,QQ邮箱或163邮箱填授权码) Password of the robot email MAIL_PASSWORD='VIFNWKBJGEOOQYYH' # 用于接收通知的邮箱 Email address used to receive notifications TO='iAsural@163.com' # 是否启用邮件推送功能 1:启用 0:不启用 Whether to enable email push features 1: enabled 0: not enabled MAIL_ENABLE=1 # 【可选】 SMTP 服务器 [Optional] SMTP server e.g. smtp.gmail.com MAIL_HOST='smtp.163.com' # 【可选】 SMTP 端口号,一般是 587 或者 465 [Optional] SMTP port number, usually 587 or 465 MAIL_PORT='25' # 【可选】 邮件加密方式,一般是 tls 或者 ssl 或者 starttls [Optional] Mail encryption method, usually tls or ssl or starttls MAIL_ENCRYPTION='tls' ###################### end 通知邮件配置 ######################### ###################### Telegram bot ######################### # 通过 Telegram bot 发送通知消息 Send messages via Telegram bot # 你的 chat_id,通过发送“/start”给 @userinfobot 可以获取自己的 id Your chat_id, you can get your own id by sending "/start" to @userinfobot TELEGRAM_CHAT_ID='6093257014' # 你的 Telegram bot 的 token Token for your Telegram bot TELEGRAM_BOT_TOKEN='5765903614:AAEaE-22rryCe5by2PKT1ts3u6KxfMahUgE' # 【可选】 自建 Telegram 反向代理地址,不明白则请忽略此配置项,保持默认即可 [Optional] Please do not modify this item # 参考:https://web.archive.org/web/20220221035315/https://hostloc.com/thread-805441-1-1.html # 只要是一个合法的网址即可,程式会自动提取网址的主机部分。例如 https://xxx.xx.workers.dev/ or xxx.xx.xx CUSTOM_TELEGRAM_HOST='api.telegram.org' # 是否启用 Telegram Bot 功能 1:启用 0:不启用 Whether to enable Telegram Bot features 1: enabled 0: not enabled TELEGRAM_BOT_ENABLE=1 ###################### end Telegram bot ######################### ###################### 企业微信 ######################### # 企业 ID Corporate ID WECHAT_CORP_ID='ww6cb30c14c584c0de' # 应用的凭证密钥 Credential keys for enterprise WeChat applications WECHAT_CORP_SECRET='DleWVHZ_bg4YoqpSORSu8WlbaHnIgNAPwY8nXbCjGkg' # 应用 ID WECHAT_AGENT_ID='1000002' # 是否启用企业微信送信功能 1:启用 0:不启用 Whether to enable the enterprise WeChat message push function 1: Enable 0: Do not enable WECHAT_ENABLE=1 ###################### end 企业微信 ######################### # 通知频率 0:仅当有续期操作的时候 1:每次执行 Notification frequency 0: Only when there is a renewal operation 1: Each execution NOTICE_FREQ=1 # 是否验证服务器证书 1:验证 0:不验证 Whether to verify the server certificate 1: verify 0: no verification VERIFY_SSL=0 # 是否开启 Debug 模式 1:开启 0:关闭 Whether to turn on Debug mode 1: On 0: Off DEBUG=0 # 检测是否有新版本可用,发现新版本时推送消息通知 1:开启 0:关闭 Automatically detects if a new version is available and pushes a message notification when a new version is found 1: On 0: Off NEW_VERSION_DETECTION=1 # 应用语言配置 Application language configuration, the supported values are zh or en, zh means Chinese, en means English LANGUAGE=zh # 送信时是否显示服务器信息 1:显示 0:不显示 Whether to display server information when sending messages 1: Display 0: Do not display SHOW_SERVER_INFO=1- 重启容器执行
bashdocker restart FreenomAutomatic- 部署域名续期脚本
bashdocker logs FreenomAutomatic