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 curlvi支持中文
# 自带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 restartdocker配代理 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'" >> ~/.bashrc用户提权
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