在 Ubuntu 上部署 Docker 并安装 Portainer 进行管理
安装 Nginx
安装 Nginx UI 安装 1 bash -c "$(curl -L https://cloud.nginxui.com/install.sh) " @ install
删除(配置,数据库除外) 1 bash -c "$(curl -L https://cloud.nginxui.com/install.sh) " @ remove
帮助 1 bash -c "$(curl -L https://cloud.nginxui.com/install.sh) " @ help
启用 Stream 1 2 3 4 5 6 7 8 9 10 apt install libnginx-mod-stream mkdir -p /etc/nginx/streams-availablemkdir -p /etc/nginx/streams-enablednginx -t systemctl reload nginx systemctl restart nginx-ui
进入 Nginx UI 后会提示修复 Streams 目录,点击修复
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 ```nginx server { listen 80; listen [::]:80; server_name <your_server_name>; rewrite ^(.*)$ https://$host$1 permanent; } map $http_upgrade $connection_upgrade { default upgrade; '' close; } server { listen 443 ssl; listen [::]:443 ssl; http2 on; server_name <your_server_name>; ssl_certificate /path/to/ssl_cert; ssl_certificate_key /path/to/ssl_cert_key; location / { proxy_set_header Host $host ; proxy_set_header X-Real-IP $remote_addr ; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for ; proxy_set_header X-Forwarded-Proto $scheme ; proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade ; proxy_set_header Connection $connection_upgrade ; proxy_pass http://127.0.0.1:9000/; } }
部署 Docker 并安装 Portainer 系统准备 1 2 sudo apt update && sudo apt upgrade -ysudo apt install -y ca-certificates curl gnupg lsb-release
添加 Docker 官方仓库 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 sudo install -m 0755 -d /etc/apt/keyringssudo curl -fsSL https://download.docker.com/linux/ubuntu/gpg \ -o /etc/apt/keyrings/docker.asc sudo chmod a+r /etc/apt/keyrings/docker.ascecho \ "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.asc] \ https://download.docker.com/linux/ubuntu \ $(. /etc/os-release && echo "$VERSION_CODENAME " ) stable" | \ sudo tee /etc/apt/sources.list.d/docker.list > /dev/null echo \ "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] \ https://mirrors.nju.edu.cn/docker-ce/linux/debian \ $(. /etc/os-release && echo "$VERSION_CODENAME " ) stable" \ | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null sudo apt update
安装 Docker Engine 1 2 sudo apt install -y docker-ce docker-ce-cli containerd.io \ docker-buildx-plugin docker-compose-plugin
验证安装:
1 2 docker --version sudo docker run hello-world
启动服务 & 配置免 sudo 权限 1 2 3 sudo systemctl enable dockersudo systemctl start docker
创建 Portainer 数据卷 1 docker volume create portainer_data
运行 Portainer 容器 1 2 3 4 5 6 7 8 docker run -d \ --name portainer \ --restart=always \ -p 8000:8000 \ -p 9443:9443 \ -v /var/run/docker.sock:/var/run/docker.sock \ -v portainer_data:/data \ portainer/portainer-ce:latest
访问 Portainer Web 界面
常用管理命令 1 2 3 4 5 docker stop portainer docker start portainer docker logs portainer docker pull portainer/portainer-ce:latest && \ docker stop portainer && docker rm portainer
升级 Portainer 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 docker pull portainer/portainer-ce:latest docker stop portainer docker rm portainer docker run -d \ --name portainer \ --restart=always \ -p 8000:8000 \ -p 9443:9443 \ -v /var/run/docker.sock:/var/run/docker.sock \ -v portainer_data:/data \ portainer/portainer-ce:latest
安装 Webmin 1 2 3 4 5 6 7 8 9 10 11 curl -o setup-repos.sh https://raw.githubusercontent.com/webmin/webmin/master/setup-repos.sh sh setup-repos.sh apt install -y webmin systemctl restart webmin https://IP:10000
安装 ufw 1 2 apt install -y ufw ufw enable
UFW 常用命令对比 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 ufw version ufw enable ufw disable ufw reload ufw reset ufw verbose ufw default allow outgoing ufw deault deny incoming ufw allow 9000:9002/tcp ufw allow 9000:9002/udp ufw allow from 192.168.29.36 ufw deny from 192.168.29.36 ufw allow from 192.168.1.0/24 ufw deny from 192.168.1.0/24 ufw allow from 192.168.29.36 to any port 80 ufw deny from 192.168.29.36 to any port 80 ufw allow from 192.168.29.36 to any port 80 proto tcp ufw allow from 192.168.29.36 to any port 80 proto udp ufw deny from 192.168.29.36 to any port 80 proto tcp ufw deny from 192.168.29.36 to any port 80 proto udp ufw status verbose ufw allow 443/tcp ufw deny 80/tcp ufw status numbered ufw delete 2 ufw delete allow 80/tcp
问题:无论怎样设置都无法使用 ACME 自动更新证书 解决方案: 使用 acme.sh 安装 acme.sh 1 2 3 4 5 6 7 8 curl https://get.acme.sh | sh -s email=solin.zhan@gmail.com source ~/.bashrcacme.sh --version
修改站点配置,添加以下内容: 1 2 3 4 5 6 7 8 9 server { listen 80 ; server_name blog.120528 .xyz; location /.well-known/acme-challenge/ { root /var/www/html; try_files $uri =404 ; } }
1 2 3 systemctl restart nginx-ui ls ~/.acme.sh/acme.sh
申请证书 1 acme.sh --issue -d blog.120528.xyz --webroot /var/www/html --server letsencrypt
安装证书并设置自动更新 1 2 3 mkdir /etc/nginx/ssl/blog.120528.xyzacme.sh --install-cert -d blog.120528.xyz --fullchain-file /etc/nginx/ssl/blog.120528.xyz/fullchain.pem --key-file /etc/nginx/ssl/blog.120528.xyz/key.pem --reloadcmd "systemctl reload nginx"