Alpine

WSL2部署

vmware部署

  • 创建虚拟机
    • 2C1G10GB仿博客服务器
    • vnet0桥接08:00:27:49:D6:EC,继承90IP
  • 启动进live
    • 加载ISO:alpine-standard-3.23.3-x86_64.iso
    • live模式:启动虚拟机自动进live模式
    • 登录:用户root密码无
  • 临时网卡
    • 查看网卡:ip link
    • 激活网卡:ip link set eth0 up
    • 获取IP:udhcpc -i eth0
    • 验证联网:ping www.baidu.com
  • 安装系统
    • 安装向导:setup-alpine
    • 不确定的都直接回车
    • 键盘布局:keyboard layout=cn两次
    • 主机名:hostname=max2alpine
    • 管理员密码:    
    • 包源:清华源=13, 南京=15,自动检测速度最快的源=f
    • 还能创建用户ghost,但是输入ssh无法粘贴,顺带安装openssh
    • 时间同步选 chrony
    • 硬盘用途:use=sys;erase=y(耗时很长,感觉n跳过也行)
    • 完成后reboot重启
  • root用户临时开启密码远程

    vi /etc/ssh/sshd_config
    # PermitRootLogin prohibit-password
    PermitRootLogin yes
    PubkeyAuthentication yes			# 启用公钥认证
    
    # (可选)
    PasswordAuthentication no			# 禁用密码认证
    # 只对 ghost 用户禁用密码,其他用户保留密码登录
    Match User ghost
        PasswordAuthentication no
        PubkeyAuthentication yes
    
    rc-service sshd restart

系统初始化

  • 更新源

    # 注释掉官方源
    sed -i '/community/s/^#//' /etc/apk/repositories
    apk update
    apk add sudo		#后面用到的sodu管理
    # 顺带安装
    apk add jq curl
  • vi支持中文

    # 自带vi 本身就不支持中文字符,安装成类似centos的大vi
    apk add vim
    rm -f /usr/bin/vi;ln -s /usr/bin/vim /usr/bin/vi
  • 标准的时间文件GMT+8

    -------------安装chrony---------------
    sudo apk add chrony					# 安装同步程序
    ls -l /etc/init.d/chronyd			# 确认同步程序
    sudo rc-update add chronyd default	# 开机自启
    sudo rc-service chronyd start		# 启动服务
    -------------偏差跳变----------------
    sudo vi /etc/chrony/chrony.conf
    # 允许在任何时候,只要偏差超过 1 秒,就无限制地立即跳变对时 (重点)
    makestep 1.0 -1
    # 启动时如果偏差大,在前 10 次时钟更新中允许跳变
    initstepslew 10 pool.ntp.org
    # 记录系统时钟增益或损耗的速率
    driftfile /var/lib/chrony/chrony.drift
    # 将系统时钟同步到硬件实时时钟 (RTC)
    rtcsync
    # 关闭命令端口(安全性考虑)
    cmdport 0
    -------------提供标准的时区时间文件,供容器映射---------------
    sudo apk add tzdata
    sudo cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
    echo "Asia/Shanghai" | sudo tee /etc/timezone
  • 系统代理

    vi /etc/profile.d/proxy.sh
    # --------------- 系统代理
    export http_proxy="http://192.168.1.120:7890"
    export https_proxy="http://192.168.1.120:7890"
    # no_proxy 支持 IP 段和域名,用逗号分隔
    export no_proxy="localhost,127.0.0.1,0.0.0.0,::1,.local,.lan,.test,.work,10.0.0.0/8,172.16.0.0/12,192.168.0.0/16,100.64.0.0/10,169.254.0.0/16,.svc,.cluster.local,.cn,.aliyun.com,.aliyuncs.com,.alicdn.com,.tencent.com,.myqcloud.com,.baidu.com,.baidupcs.com,.huaweicloud.com,.jd.com,registry.npmmirror.com,binary.npmmirror.com,gitee.com,codeup.aliyun.com"
    export HTTP_PROXY="$http_proxy"
    export HTTPS_PROXY="$https_proxy"
    export NO_PROXY="$no_proxy"
    
    sudo chmod +x /etc/profile.d/proxy.sh;source /etc/profile.d/proxy.sh

docker

  • 安装docker

    apk add docker				# 安装 Docker 依赖与引擎
    rc-update add docker boot	# 启动 Docker 服务并设置开机自启
    dockerd  					# 验证 Docker 是否安装成功
    rc-service docker zap		# Alpine 的 OpenRC需要手动处理
    rc-update add cgroups boot	# Alpine 需要手动挂载必要的 cgroups
    service cgroups start
    service docker start
    service docker status		# 确认服务状态
  • docker国内镜像

    sudo mkdir -p /etc/docker
    sudo tee /etc/docker/daemon.json <<EOF
    {
      "registry-mirrors": [
        "https://docker.1ms.run",
        "https://dockerproxy.net",
        "https://proxy.vvvv.ee",
        "https://dockerproxy.link"
      ]
    }
    EOF
    
    # alpine
    sudo rc-service docker restart
  • docker配代理 Docker应用

    mkdir -p ~/.docker
    vi ~/.docker/config.json
    {
     "proxies": {
       "default": {
         "httpProxy": "http://192.168.1.120:7890",
         "httpsProxy": "http://192.168.1.120:7890",
         "noProxy": "localhost,127.0.0.1,0.0.0.0,::1,.local,.lan,.test,.work,10.0.0.0/8,172.16.0.0/12,192.168.0.0/16,100.64.0.0/10,169.254.0.0/16,.svc,.cluster.local,.cn,.aliyun.com,.aliyuncs.com,.alicdn.com,.tencent.com,.myqcloud.com,.baidu.com,.baidupcs.com,.huaweicloud.com,.jd.com,registry.npmmirror.com,binary.npmmirror.com,gitee.com,codeup.aliyun.com"
       }
     }
    }
    
    sudo rc-service docker restart	# 生效
    docker info | grep -i proxy		# 验证
  • 安装docker-compose

    # 自动安装
    apk add docker-compose
    
    # 手动安装:加代理的一句话安装 + 执行权限
    COMPOSE_VERSION=$(curl -s --socks5 192.168.1.120:7890 https://api.github.com/repos/docker/compose/releases/latest | grep tag_name | cut -d '"' -f4) && curl -L --socks5 192.168.1.120:7890 "https://github.com/docker/compose/releases/download/${COMPOSE_VERSION}/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose && chmod +x /usr/local/bin/docker-compose
    
    # 验证
    docker-compose --version
  • 快捷命令

    cat >> ~/.profile << 'EOF'
    
    # Docker Compose 快捷命令
    alias down='docker-compose down'
    alias up='docker-compose up -d'
    alias start='docker-compose restart'
    alias stop='docker-compose stop'
    alias reload='docker exec nginx nginx -s reload'
    
    # 智能日志函数
    log_func() {
        # 如果没有参数,默认查看最后 10 行并持续追踪
        if [ -z "$1" ]; then
            docker-compose logs -f --tail=10
        # 如果参数是 0,则不限定行数(查看全部日志并持续追踪)
        elif [ "$1" -eq 0 ] 2>/dev/null; then
            docker-compose logs -f
        # 如果参数是大于 0 的数字,则 tail 指定行数
        else
            docker-compose logs -f --tail="$1"
        fi
    }
    
    # 绑定别名
    alias log='log_func'
    EOF
    
    source ~/.profile

系统其它

  • 配置用户和ssh

    su - ghost
    mkdir -p ~/.ssh
    chmod 700 ~/.ssh  					# 必须700,权限太宽会被SSH拒绝
    vi ~/.ssh/authorized_keys 			# 粘贴公钥
    chmod 600 ~/.ssh/authorized_keys  	# 必须600
    chown -R ghost:ghost ~/.ssh  		# 确保归属ghost用户
  • ll命令支持

    # root用户执行
    echo "alias ll='ls -l'" >> /etc/profile
    # ghost用户执行
    echo "alias ll='ls -l'" >> ~/.profile
  • 用户提权

    su -
    visudo # 修改sodu配置
    
    # 输入密码可执行sudo
    ghost ALL=(ALL:ALL) ALL
    # 免密sudo的权限
    ghost ALL=(ALL) NOPASSWD: /bin/rm -rf /www/*, /bin/rm -f /www/*, /bin/mkdir -p /www/*, /bin/mkdir /www/*, /bin/find /www/*, /bin/tar -* /www/*, /bin/tar -* -C /, /sbin/apk, /home/ghost/backupGhost.sh, /bin/rm -rf /home/ghost/*, /bin/rm -f /home/ghost/*
    
    adduser ghost docker
    service docker restart
    重新连接ssh,才会生效
  • 时间同步

    # 安装NTP时间同步服务
    apk add chrony
    
    # 启动并设置开机自启
    rc-service chronyd start
    rc-update add chronyd default
    
    # 手动同步时间(立即生效)
    chronyc makestep
  • 修改网络名

    echo "vm-alpine" > /etc/hostname
    hostname -F /etc/hostname

恢复应用

  • docker net

    docker network create ghost_net
  • 上传并解压www

    sudo tar -xzvpf ghost20250701090751.tar.gz -C /
    sudo chown -R 1000:1000 /www # 递归修改 镜像内部 UID 通常是 1000
  • 启动应用

    docker-compose -f /www/mariadb/docker-compose.yml up -d
    docker-compose -f /www/nginx/docker-compose.yml up -d