docker 部署邮局工具Mailcow,自建域名邮箱

0.环境说明:

①VPS:

CPU1GHZ
RAM4GB
Disk20GB
操作系统LINUX_X86-64
端口开放(服务商)25

②一个域名:建议国际域名(首选.COM/.ORG/.NET,下文将以example.com为例)

③Docker环境

④开放端口(TCP)

服务端口
SMTP25
SMTPS465
Submission587
IMAP143
IMAPS993
POP3110
POP3S995
ManageSieve4190
HTTP/HTTPS80/443

如果安装了面板(1Panel/宝塔)可以在系统安全里配置开放端口,否则可以参考:

1.设置DNS解析记录:

(这一步的核心目的就是设置域名正确解析到邮件服务器,以阿里云为例)

假设你的邮箱服务器需要使用域名 mail.example.com,你想搭建 yourname@example.com 的邮箱;

然后你的服务器 IPv4 为 142.251.41.14,IPv6 为 2001:4860:4860::8844,则解析规则如下:

主机记录记录类型记录值备注
mailA142.251.41.14IPV4主记录
mailAAAA2001:4860:4860::8844IPV6主记录
autodiscoverCNAMEmail.example.com别名
autoconfigCNAMEmail.example.com别名
@MXmail.example.com优先级10
_dmarcTXTV=DMARC1;p=reject;rua=mailto:root@example.com root@example.com 是一个真实的地址。

@TXT"v=spf1 mx ~all"SPF 配置
_autodiscover._tcpSRV mail.example.com服务自动发现
权重1,优先级0

具体可以参考下图:

2.安装Mailcow:

①安装Mailcow

apt install git -y
git clone https://github.com/mailcow/mailcow-dockerized
cd mailcow-dockerized

②初始化配置文件

bash generate_config.sh

中间会提醒输入hostname,注意使用 FQDN (比如 mail.example.com) 作为 hostname。

配置时区:UTC-8(北京)

选择稳定版镜像,如下图所示

③启动Docker容器:

docker-compose pull
docker-compose up -d

注:中间可能会发生个别镜像拉取失败的情况,重新拉取几次即可。

3.配置邮箱账户:

①登陆并修改默认管理员密码

镜像启动成功后在浏览器访问:mail.example.com

默认用户名 admin 默认密码 moohoo

②配置mailcow域名

点击添加域名后按需配置:

确认并重启:

④开启 DKIM 并添加 DNS 记录:
(dkim._domainkey)对应内容添加到你的域名解析中增强发信到达率。

主机记录记录类型记录值备注
dkim._domainkeyTXTv=DKIM1;k=rsa;t=s;s=email;p=…(dkim._domainkey)对应内容

⑤添加邮箱

在此页面中点击添加邮箱

⑥测试邮件:

点击应用 – Webmail,即可进入 Webmail,输入⑤中创建的账户密码即可。

然后发一封邮件来测试到达率吧。

访问 https://www.mail-tester.com 发一封测试邮件,可以测试邮件服务评分。

至此, 您的邮局系统已经可以正常使用了。

4.其它

①mailcow升级

cd .../mailcow-dockerized  #定位到你的安装目录
./update.sh

5.参考文献

本文在书写过程中参考了以下文章:

https://u.sb/docker-mailcow

https://blog.iswiftai.com/posts/self-hosted-email

docker-compose/docker 镜像迁移 | 离线镜像包制作

0.环境说明:

①一台能访问docker.io的机器(机器A)

②需要离线部署镜像的机器(机器B)

③Docker环境

1.镜像打包(A机器):

①登陆A机器,拉取镜像,以badapple9/speedtest-x 为例

docker pull badapple9/speedtest-x

②导出镜像为tar

docker save -o speedtest-x.tar badapple9/speedtest-x

③下载speedtest-x.tar到本地

2.离线部署(B机器):

①登陆B机器,上传speedtest-x.tar

②导入镜像

docker load -i speedtest-x.tar

③验证

docker images | grep badapple9/speedtest-x

3.运行(B机器):

①为speed-x 创建目录,创建docker-compose文件,并写入以下内容:

version: '3.3'
services:
speedtest-x:
image: badapple9/speedtest-x
container_name: speedtest-x
ports:
- "9003:80" # 修改此处的宿主机端口
restart: always

②启动docker容器

docker-compose up -d 

③登陆查看:

浏览器访问youid:9003

Docker部署V2ray+nginx反代上网(1PANEL版)

0.环境说明:

①Debian12

②RAM 2G SSD20G

③ROOT 权限

④域名指向(代理域名指向服务器IP地址)

⑤1Panel面板社区版v1.10.34-lts

(已安装OpenResty,即nginx管理器)

⑥Docker环境

注:使用1panel主要是方便,省去了很多部署工作,这几年用了多款面板,包括BT等,目前还是1PANEL更好用一点。

1.部署站点 :

①假设站点地址为vpn.example.com(如0.④)

在1panel创建NGINX站点:

②注册SSL

在1panel证书里面选择①创建的网站,并选择对应的DNS和ACME账户

这个让它去申请,去完成接下去的步骤

当“申请中”变成正常时,则SSL证书可用

2.NGINX反代配置 :

进入vpn.example.com反向代理目录,

修改……/proxy/文件:

location / {
	proxy_pass https://vpn.example.com/;  
	proxy_redirect off;
	proxy_ssl_server_name on;
	sub_filter_once off;
	sub_filter "vpn.example.com" $server_name;
	proxy_set_header Host "vpn.example.com";
	proxy_set_header Referer $http_referer;
	proxy_set_header X-Real-IP $remote_addr;
	proxy_set_header User-Agent $http_user_agent;
	proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
	proxy_set_header X-Forwarded-Proto https;
	proxy_set_header Accept-Encoding "";
	proxy_set_header Accept-Language "zh-CN";
}

# 分流反向代理
location /v2ray{
	proxy_redirect off;
	proxy_pass http://127.0.0.1:10086;  # 本地入站端口
	proxy_http_version 1.1;
	proxy_set_header Upgrade $http_upgrade;
	proxy_set_header Connection "upgrade";
	proxy_set_header Host $host;
	proxy_set_header X-Real-IP $remote_addr;
	proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}

3.安装V2ray(Docker版):

①创建 …/1panel/apps/v2ry 路径

②并在此目录下创建docker-compose.yml文件,并写入以下内容:

version: '3.0'

services:
  v2ray:
    image: v2fly/v2fly-core:latest
    container_name: v2ray
    command: ["run", "-config", "/etc/v2ray/config.json"]
    restart: always
    volumes:
      - ./config.json:/etc/v2ray/config.json
    ports:
      - 127.0.0.1:10086:10086 #2中反代配置端口
    networks:
      - 1panel-network

networks:
    1panel-network:
        external: true

③在终端输入:

cat /proc/sys/kernel/random/uuid

获取到UUID

④同时在当前目录创建config.json文件:

{
  "log": {
    "loglevel": "info",
    "access": "/var/log/v2ray/access.log",
    "error": "/var/log/v2ray/error.log"
  },
  "inbounds": [
    {
      "port": 10086,
      "protocol": "vmess",
      "settings": {
        "clients": [
          {
            "id": "",#③获取到的ID
            "level": 0,
            "alterId": 0
          }
        ]
      },
      "streamSettings": {
        "network": "ws",
        "wsSettings": {
          "path": "/v2ray"
        }
      }
    }
  ],
  "outbounds": [
    {
      "protocol": "freedom",
      "settings": {}
    }
  ]
}

⑤终端进入v2ry目录

启动docker镜像

docker-compose up -d

6.为伪装站点绑定证书 :

选择1中创建的站点,绑定证书

7.开启防火墙

在1panel面板→系统→防火墙处添加规则,添加:80、443、其它你的代理端口

8.客户端配置:

①以V2RAY windows版为例:

②输入具体配置信息

其它:

PVE添加lvm-thin-pool创建lvm-thin存储

0.环境说明:

①操作系统:PVE 8.1.3

②硬件配置:空闲磁盘数量大于1

③PVE存储格式说明(引用佛西博客):https://foxi.buduanwang.vip/linux/2044.html/

1.创建LVM-THIN-POOL:

lsblk #列出所有可用块设备
pvcreate /dev/sda  #创建物理卷 
vgcreate thin-pool /dev/sda #创建逻辑卷组 thin-pool 
#若要将多个物理卷加入卷组,则后跟多个物理卷  vgcreate thin-pool /dev/sda /dev/sdb
lvcreate -T thin-pool/data -l +100%FREE #创建逻辑卷,分配卷组空间给逻辑卷

2.在PVE添加LVM-THIN存储:

注意填写存储ID和节点名称

ChatGPT无法访问的解决方法

0.说明

适用于V2ray等工具、软路由

本文只讲方法,不讲原理,原理都可以搜到,不再赘述

1.线路问题

首先在服务端检查能否访问chatgpt

bash <(curl -L -s check.unlock.media)

可以运行如上开源脚本,看到Chatgpt YES ,则确定服务端支持

线路问题则 尝试更换线路,避免使用香港、日本等亚洲节点。

2.浏览器配置问题

关闭 WebRTC  和 QUIC.

这里以 chrome浏览器为例:
访问chrome://flags/

将:

Experimental QUIC protocol

Anonymize local IPs exposed by WebRTC.

两个选项置为disabled

relunch

清除浏览器缓存

3.禁用IPV6(WIN)

(此方法用于PING chatgpt.com 显示地址为IPV6的情况)

在WIN网络适配器中,找到当前链接的IPV6,取消勾选即可

迷你主机安装PVE8.1,开启网络唤醒

0.环境说明:

①操作系统:空,PVE官网下载(直达链接

②硬件配置:AMD 5800H + DDR4 2666 16G *2 + 1T NVME PCIE3.0

③写入工具:rufus 4.4.2013

1.U盘写入:

选择镜像后点击开始,此版本刷PVE会强制使用DD模式,完成后拔出U盘插入主机

2.启动安装:

选择 Install Proxmox (Graphical)

先会在黑屏阶段运行一段时间

后续配置语言、安装位置、网络IP信息等后结束重启

3.开启网络唤醒:

网络唤醒的可以在进入主板时按Del键,将NetStack 置为 Enable

进入系统,输入下面的命令查看ethtool的位置

whereis ethtool 

我这里的位置是/usr/sbin/ethtool

修改/etc/rc.local

/etc/rc.local

为如下内容:

#!/bin/bash
/usr/sbin/ethtool -s enp1s0 wol g
exit 0

其中 /usr/sbin/ethtool 为ethtool地址 , enp1s0 为网卡名称

保存后退出,重启系统

reboot

进入系统后,查看网卡状态

ethtool enp1s0

其中Wake-on: g ,则为开启成功

4.去除订阅提醒:

先删除企业源

rm /etc/apt/sources.list.d/pve-enterprise.list
rm /etc/apt/sources.list.d/ceph.list

安装pvetools

apt dist-upgrade -y 
apt-get update
export LC_ALL=en_US.UTF-8 apt update && apt -y install git && git clone https://github.com/ivanhao/pvetools.git

打开pvetools

cd pvetools/ && ./pvetools.sh 

如图所示,硬件直通,换源,去除订阅都可以在此配置

PVE导入virtualbox镜像

0.环境说明:

①操作系统:PVE7.2-3

②ROOT 权限

③OVA文件

1.上传OVA镜像文件

从网上下载,或者从virtual box 下载到的ova文件

登陆SSH,把下载的ova文件上传PVE,如图test.ova

解压该ova文件

tar -xvf test.ova

2.PVE建立虚拟机

VIMID 为 123 (注意不要和之前的ID冲突即可),操作系统→不使用任何介质,磁盘保持默认即可,CPU、内存和网络根据实际情况进行选择。

3.分离和导入硬盘

在PVE面板选择刚刚创建的虚拟机(123),在硬件选项卡选择硬盘,然后点击分离,然后删除未使用的磁盘。

接下来导入解压后的磁盘。

qm importdisk 123 test-disk001.vmdk local-lvm -format qcow2

其中 123是节点号,test-disk001.vmdk 是 解压后的磁盘名 ,local-lvm 是pve的存储空间名称。

Centos 7 挂载本地iso镜像源(yum)挂载SMB文件夹

0.环境说明:

①操作系统:centos7.9.2009

②ROOT 权限

1.挂载镜像:

mkdir -p /data/iso   #建立镜像上载目录
mkdir -p /mnt/cdrom #建立镜像挂载目录

下载镜像源iso,并上传到上载目录

mount -o loop /data/iso/CentOS-7-x86_64-Everything-2009.iso data/yum/local #临时挂载
vi /etc/fstab #永久挂载,写入下行内容
/data/iso/CentOS-7-x86_64-Everything-2009.iso /mnt/cdrom iso9660 defaults 0 0
vi /etc/yum.repos.d/local.repo  #创建镜像源文件,写入如下内容
#local.repo文件内容
[local]
name=local
baseurl=file:////mnt/cdrom #挂载路径
enabled=1 #启用该yum源
gpgcheck=0#本地挂载不涉及数字签名问题,将gpgcheck值设置为0,表示不检查数字签名
gpgkey=file:///mnt/cdrom/RPM-GPG-KEY-CentOS-7# 在挂载路径下查看

2.切换到本地源:

备份在线源文件

mkdir /etc/yum.repos.d/bak
cd /etc/yum.repos.d/
mv CentOS-Base.repo CentOS-CR.repo CentOS-Debuginfo.repo CentOS-fasttrack.repo CentOS-Media.repo CentOS-Sources.repo CentOS-Vault.repo –t bak

测试源是否可用

yum clean all
yum makecache

3.安装SMB服务:

yum install -y cifs-utils
 mkdir -p /data/smb 
mount -t cifs -o dir_mode=0755,file_mode=0755,username="username",password="your password" //smbip/share/ /data/smb

永久挂载方式,修改/etc/fstab文件

//smbip/share /data cifs defaults,username='username',password='your password'     0 0 

centos7.4 安装jenkins集成工具

0.环境说明:

①操作系统:centos7.4

②ROOT 权限

官网地址:https://www.jenkins.io/

1.安装Jenkins依赖:

更新

yum install -y ca-certificates   #更新证书,否则无法进行下一步
sudo wget -O /etc/yum.repos.d/jenkins.repo \
    https://pkg.jenkins.io/redhat-stable/jenkins.repo
sudo rpm --import https://pkg.jenkins.io/redhat-stable/jenkins.io-2023.key
sudo yum upgrade
# Add required dependencies for the jenkins package
sudo yum install java-17-openjdk #此处安装失败后则需要单独安装jdk 17
sudo yum install jenkins
sudo systemctl daemon-reload

安装openjdk-17

wget https://download.oracle.com/java/17/archive/jdk-17.0.8_linux-x64_bin.tar.gz 
tar -xvf jdk*.gz
mv jdk-17.0.8 /usr/java
ln -s /usr/java/bin/java /usr/bin/java
sudo yum reinstall jenkins

配置环境变量,在/etc/profile最后加入

export JAVA_HOME=/usr/java
export CLASSPATH=$JAVA_HOME/lib:$JRE_HOME/lib:$CLASSPATH
export PATH=$JAVA_HOME/bin:$JRE_HOME/bin:$PATH

使环境变量生效:

source /etc/profile
java -version    #查看当前JDK版本

2.启动Jenkins:

sudo systemctl enable jenkins #开机启动
sudo systemctl start jenkins #启动jenkins
sudo systemctl status jenkins #查看jenkins状态

初始化jenkins

cat /var/lib/jenkins/secrets/initialAdminPassword #访问时输入

访问方式

localhost:8080

更多:

防火墙配置参考:

jenkins 其它配置:

修改操作用户为root 修改 /etc/sysconfig/jenkins

JENKINS_USER="jenkins"  #jenkins修改为root

赋予目录权限

chown -R root /var/log/jenkins
chgrp -R root /var/log/jenkins
chown -R root /var/lib/jenkins
chgrp -R root /var/lib/jenkins
chown -R root /var/cache/jenkins
chgrp -R root /var/cache/jenkins

3.Jenkinsj节点配置问题:

在建立除master节点以外的其它节点,首先要保证两端的JAVA版本一致

遇到问题:“lib/jenkins/.ssh/known_hosts [SSH] No Known Hosts file was found at /var/lib/jenkins/.ssh/known_hosts.”

在节点管理页面修改认证机制:

Docker 安装penpot原型图设计工具

0.环境说明:

①操作系统:truenas

②ROOT 权限

③vDocker version 20.10.12, build e91ed57

Penpot是一款类似于Figma的原型图设计工具,是一款免费开源的软件,并支持本地化部署

官方指导手册

1.安装docker-compose:

su -
wget https://github.com/docker/compose/releases/download/v2.5.0/docker-compose-linux-x86_64
mv docker-compose-linux-x86_64 docker-compose
mv docker-compose /bin
chmod +x docker-compose
docker-compose --version #显示docker版本

2.配置yaml文件:

wget https://raw.githubusercontent.com/penpot/penpot/main/docker/images/docker-compose.yaml
vi docker-compose.yaml

根据需要修改yaml文件:

 - PENPOT_PUBLIC_URI= #填入外部访问的域名地址

修改前端访问端口:

  penpot-frontend:
    image: "penpotapp/frontend:latest"
    restart: always
    ports:
      - 8000:80 #修改8000为你想要的端口

    volumes:
      - penpot_assets:/opt/data/assets

    depends_on:
      - penpot-backend
      - penpot-exporter

    networks:
      - penpot

    labels:
      - "traefik.enable=true"

修改postgres端口:

  penpot-postgres: 
    image: "postgres:15" 
    restart: always 
    stop_signal: SIGINT 
    ports: 
      - 8000:5432  #修改8000为宿主机可用端口
    volumes: 
      - penpot_postgres_v15:/var/lib/postgresql/data

修改注册信息:

- PENPOT_FLAGS=enable-registration enable-login-with-password disable-email-verification enable-smtp enable-prepl-server

修改注册邮箱:

      - PENPOT_SMTP_DEFAULT_FROM=service@wolfmark.org #你的邮箱
      - PENPOT_SMTP_DEFAULT_REPLY_TO=service@wolfmark.org #你的邮箱
      - PENPOT_SMTP_HOST= mail.wolfmark.org #邮箱服务器地址
      - PENPOT_SMTP_PORT=  #此处填写smtp端口
      - PENPOT_SMTP_USERNAME=service@wolfmark.org #你的邮箱
      - PENPOT_SMTP_PASSWORD= #smtp验证
      - PENPOT_SMTP_TLS=false 
      - PENPOT_SMTP_SSL=false

3.拉取镜像:

docker-compose -p penpot -f docker-compose.yaml up -d #启动
拉取完成

最后访问前端页面,安装完成

docker-compose -p penpot -f docker-compose.yaml down #关闭 docker镜像