2000字范文,分享全网优秀范文,学习好帮手!
2000字范文 > docker安装halo+mysql+nginx搭建个人博客

docker安装halo+mysql+nginx搭建个人博客

时间:2023-05-19 12:20:34

相关推荐

docker安装halo+mysql+nginx搭建个人博客

docker 安装halo+mysql+nginx搭建个人博客(debian or ubuntu)

1 简介

本文主要介绍debian和国内腾讯云ubuntu下安装docker,使用docker安装halo+mysql+nginx,nginx代理,以及ufw-docker防火墙的开启。

最后实现一个使用域名访问的个人博客网站,禁用ip访问,禁用8090端口。

全文:13059 字

本文其他地址

博客站点:/archives/dockerhalo

/p/477859981

1.1 halo

一款现代化的开源博客/CMS系统。学习地址:https://halo.run/

1.2 mysql

MySQL 是流行的关系型数据库管理系统。学习地址: /mysql/mysql-tutorial.html

1.3 nginx

Nginx是高性能的 Web和反向代理服务器。

学习地址:/linux/nginx-install-setup.html ; /ysocean/p/9392908.html

1.4 docker

Docker 是一个开源的应用容器引擎。学习地址:/docker/docker-tutorial.html

2 搭建准备

服务器一台,带宽尽量大,腾讯云有8M的轻量型还不错。

其他云 Debian 11 X86 64 -->下转3

腾讯云 Ubuntu 20.04.3 LTS -->下转4

若需要域名访问,则同时准备 购买域名+ssl证书(阿里云免费)+域名备案!见后文参考链接

3 Debian 11搭建

3.1 系统初始配置 选择使用

# 开启bbrecho "net.core.default_qdisc=fq" >> /etc/sysctl.conf && echo "net.ipv4.tcp_congestion_control=bbr" >> /etc/sysctl.conf && sysctl -p # 软件列表升级以及预装软件apt update && apt upgrade -y &&apt install vim sudo tmux ufw git curl wget zip net-tools -y# 设置lsecho "export LS_OPTIONS='--color=auto'" >> ~/.bashrc && echo "eval \"\$(dircolors)\"" >> ~/.bashrc && echo "alias ls='ls $LS_OPTIONS'" >> ~/.bashrc && echo "alias ll='ls $LS_OPTIONS -l'" >> ~/.bashrc && echo "alias l='ls $LS_OPTIONS -lA'" >> ~/.bashrc && source .bashrc# 时区timedatectl set-timezone Asia/Shanghai # 设置ssh免密登录"xxxxxxxxxxxxxxx" 为你本地电脑的id_rsa.pubmkdir -p ~/.ssh && chmod 700 ~/.ssh/ && touch ~/.ssh/authorized_keys && chmod 600 ~/.ssh/authorized_keys && echo "xxxxxxxxxxxxxxx" >> ~/.ssh/authorized_keys# 重启reboot

3.2 Debian 一键安装docker

sudo apt-get update && sudo apt-get install ca-certificates curl gnupg lsb-release -y && curl -fsSL /linux/debian/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg && echo \"deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] /linux/debian \$(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null && sudo apt-get update && sudo apt-get install docker-ce docker-ce-cli containerd.io -y && sudo systemctl enable docker && sudo systemctl start docker && sudo docker run hello-world && docker rm -f $(docker ps -aq) && docker rmi -f $(docker images -aq) && echo > /root/.bash_history && echo finish!

发现最后输出finish! 即为成功。不同系统安装命令不同,参考/engine/install/debian/

3.3 docker安装mysql

# 创建 Docker 自定义桥接网络docker network create halo-mysql-nginx-net # 拉取 MySQL 镜像docker pull mysql:8.0.27# 创建文件夹mkdir -p ~/.halo/mysql# 启动 MySQL 实例 xxxxxxxxx为你自己设置的密码docker run --name halo-mysql -v ~/.halo/mysql:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=xxxxxxxx --net halo-mysql-nginx-net --restart=unless-stopped -d mysql:8.0.27# 进入 MySQL 容器中登录 MySQL 并创建 Halo 需要的数据库docker exec -it halo-mysql /bin/bash# 登录 MySQLmysql -u root -p# 输入 MySQL 数据库密码# 创建数据库create database halodb character set utf8mb4 collate utf8mb4_bin;# 使用 exit 退出MySQL # 使用 exit 退出容器 因为之前设置了--restart=unless-stopped 不用担心容器停止

docker安装mysql命令解释

--name halo-mysql # 设置容器名字-v ~/.halo/mysql:/var/lib/mysql # 卷挂载。 本地地址:容器内部地址-e MYSQL_ROOT_PASSWORD=xxxxxxxx # 设置mysql密码--net halo-mysql-nginx-net # 挂载网络--restart=unless-stopped # 除非手动停止否则自动重启-d # 后台运行mysql:8.0.27 # mysql版本

3.4 docker安装halo

# 创建 Halo 工作目录mkdir -p ~/.halo/halo && cd ~/.halo/halo# 下载示例配置文件到工作目录wget https://dl.halo.run/config/application-template.yaml -O ./application.yaml# vim编辑配置文件 vim application.yaml

# 你需要做如下几个步骤:# 注释 H2 database configuration.部分# 启用 MySQL database configuration.部分# 修改 datasource 下的 url 中的 ip 地址部分为容器名称并修改密码为您设定的 MySQL 密码# 可以进入vim 后 ggdG 删除所有内容,再复制以下内容 粘贴# 修改后的application.yaml文件内容如下:server:port: 8090# Response data pression:enabled: falsespring:datasource:# H2 database configuration.#driver-class-name: org.h2.Driver#url: jdbc:h2:file:~/.halo/db/halo#username: admin#password: 123456# MySQL database configuration.driver-class-name: com.mysql.cj.jdbc.Driverurl: jdbc:mysql://halo-mysql:3306/halodb?characterEncoding=utf8&useSSL=false&serverTimezone=Asia/Shanghai&allowPublicKeyRetrieval=trueusername: rootpassword: xxxxxxxx# H2 database console configuration.h2:console:settings:web-allow-others: falsepath: /h2-consoleenabled: falsehalo:# Your admin client path is https://your-domain/{admin-path}admin-path: admin# memory or levelcache: memory

启用halo

# 启用docker run -it -d --name halo -p 8090:8090 -v ~/.halo/halo:/root/.halo --net halo-mysql-nginx-net --restart=unless-stopped halohub/halo:1.4.17

docker安装halo命令解释

-it -d # 运行方式--name halo # 设置容器名字-p 8090:8090 # 端口设置-v ~/.halo/halo:/root/.halo # 卷挂载。 本地地址:容器内部地址--net halo-mysql-nginx-net # 挂载网络--restart=unless-stopped # 除非手动停止否则自动重启halohub/halo:1.4.17# halo版本

到这里就可以去浏览器 使用ip:8090打开个人博客网站。会看到 Halo 安装向导

以下是配置nginx代理,需要自己拥有一个域名(哪里便宜买哪里),ssl证书(这里用的是阿里云证书因为个人免费)。

一定要配置好域名解析和放好证书的位置!!!!

域名解析参考:/help/zh/doc-detail/39903.htm

阿里云证书申请参考:/document_detail/156645.html

同时,域名解析到国内服务器需要进行备案!!不备案不能用80和443!

域名备案:/product/ba

# 下载好证书,获得_nginx.zip# 将其传到服务器内 这里使用win下的scp 也可使用其他服务器文件传输工具直接拖scp _nginx.zip root@你的服务器ip:/root/.halo/nginx/certificate# 服务器上解压unzip _nginx.zip # 往容器内传文件docker cp .key halo-nginx:/etc/nginx/certsdocker cp .pem halo-nginx:/etc/nginx/certs

3.5 docker安装nginx

# 先运行一个nginx容器testdocker run --name test -p 81:80 -d nginx# 建立服务器本地的文件夹mkdir -p ~/.halo/nginx/data/nginx/conf ~/.halo/nginx/data/nginx/conf.d ~/.halo/nginx/data/nginx# 从容器拷贝文件到本地方便之后挂载testdocker cp test:/etc/nginx/nginx.conf ~/.halo/nginx/data/nginx/conf && docker cp test:/etc/nginx/conf.d/default.conf ~/.halo/nginx/data/nginx/conf.d && docker cp test:/usr/share/nginx/html ~/.halo/nginx/data/nginx# 删除这个测试容器docker rm test -f# 再安装需要的nginx容器docker run \--name halo-nginx \-p 80:80 \-p 443:443 \-v ~/.halo/nginx/data/nginx/conf/nginx.conf:/etc/nginx/nginx.conf \-v ~/.halo/nginx/data/nginx/conf.d/default.conf:/etc/nginx/conf.d/default.conf \-v ~/.halo/nginx/data/nginx/html:/usr/share/nginx/html \-v ~/.halo/nginx/data/nginx/log:/var/log/nginx \-v ~/.halo/nginx/data/nginx/certs:/etc/nginx/certs \--network halo-mysql-nginx-net \--restart=unless-stopped \-d \nginx

此时访问服务器ip地址 看到Welcome to nginx! 即为成功

docker安装nginx参数说明

--name halo-nginx # 给容器取名为halo-nginx-p 80:80# 容器80端口映射到宿主机80端口,HTTP-p 443:443 # 容器443端口映射到宿主机443端口,HTTPS-v ~/.halo/nginx/data/nginx/conf/nginx.conf:/etc/nginx/nginx.conf# nginx.conf可以配置反向代理-v ~/.halo/nginx/data/nginx/conf.d/default.conf:/etc/nginx/conf.d/default.conf # default.conf可以配置反向代理-v ~/.halo/nginx/data/nginx/html:/usr/share/nginx/html # 挂载html目录,存放静态网页-v ~/.halo/nginx/data/nginx/log:/var/log/nginx# 挂载log目录,存放日志-v ~/.halo/nginx/data/nginx/certs:/etc/nginx/certs# 挂载certs目录,存放ssl证书--network halo-net# 将Nginx容器加入与Halo容器同一网络。--restart=unless-stopped# Docker启动时自动启动这个容器-d # 设置后台容器运行

修改本地nginx配置文件default.conf ,之后容器restart即可同步进去容器的配置

vim /root/.halo/nginx/data/nginx/conf.d/default.conf

删除原有全部内容 并修改如下:

每个server功能:第一个 禁用ip访问;第二个 强制跳转https;第三个禁用https的ip访问 ; 第四个只允许https的域名访问

域名和证书要改成你自己的!!!!!!!!!!

return 400 404 444 看自己选择

server {listen 80 default_server;listen [::]:80 default_server;server_name _;return 404;}server {listen80;server_name ;return 301 https://$host$request_uri;}server {listen 443 ssl default_server;listen [::]:443 ssl default_server;ssl_certificate/etc/nginx/certs/.pem;ssl_certificate_key /etc/nginx/certs/.key;server_name _;return 404;}server {listen 443 ssl;server_name ;ssl_certificate/etc/nginx/certs/.pem;ssl_certificate_key /etc/nginx/certs/.key;ssl_session_timeout 5m;ssl_protocols TLSv1 TLSv1.1 TLSv1.2;ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:HIGH:!aNULL:!MD5:!RC4:!DHE;ssl_prefer_server_ciphers on;client_max_body_size 1024m;location / {proxy_pass http://halo:8090;proxy_set_header HOST $host;proxy_set_header X-Forwarded-Proto $scheme;proxy_set_header X-Real-IP $remote_addr;proxy_set_header X-Forwarded-For$proxy_add_x_forwarded_for;}}

# 重启nginx 服务docker restart halo-nginx

3.6 docker禁用8090端口访问

缘由:原文:/chaifeng/ufw-docker

UFW 是 Ubuntu 上很流行的一个 iptables 前端,可以非常方便的管理防火墙的规则。但是当安装了 Docker,UFW 无法管理 Docker 发布出来的端口了。

具体现象是:

在一个对外提供服务的服务器上启用了 UFW,并且默认阻止所有未被允许的传入连接。运行了一个 Docker 容器,并且使用-p选项来把该容器的某个端口发布到服务器的所有 IP 地址上。比如:docker run -d --name httpd -p 0.0.0.0:8080:80 httpd:alpine将会运行一个 httpd 服务,并且将容器的80端口发布到服务器的8080端口上。UFW 将不会阻止所有对8080端口访问的请求,用命令ufw deny 8080也无法阻止外部访问这个端口。

这个问题其实挺严重的,这意味着本来只是为了在内部提供服务的一个端口被暴露在公共网络上。

以下是具体使用:

# 获取文件 替换git链接 参考/zh-cn/guide.htmlsudo wget -O /usr/local/bin/ufw-docker \https://hub.fastgit.xyz/chaifeng/ufw-docker/raw/master/ufw-docker# 基于权限chmod +x /usr/local/bin/ufw-docker# 重启ufw sudo systemctl restart ufw# 把 UFW 和 Docker 的相关规则添加到文件 `after.rules` 的末尾ufw-docker install# 开启443 https端口ufw route allow proto tcp from any to any port 443# 此时访问博客唯一方式是域名访问

4 腾讯云ubuntu搭建

4.1 系统初始配置 选择使用

# 开启bbrecho "net.core.default_qdisc=fq" >> /etc/sysctl.conf && echo "net.ipv4.tcp_congestion_control=bbr" >> /etc/sysctl.conf && sysctl -p # 软件列表升级以及预装软件apt update && apt upgrade -y &&apt install vim sudo tmux ufw git curl wget zip net-tools -y# 设置ssh免密登录"xxxxxxxxxxxxxxx" 为你本地电脑的id_rsa.pubmkdir -p ~/.ssh && chmod 700 ~/.ssh/ && touch ~/.ssh/authorized_keys && chmod 600 ~/.ssh/authorized_keys && echo "xxxxxxxxxxxxxxx" >> ~/.ssh/authorized_keys# 重启reboot

4.2 腾讯云ubuntu一键安装docker 注意使用腾讯云服务器

sudo apt-get update && sudo apt-get install ca-certificates curl gnupg lsb-release -y && curl -fsSL https://mirrors./docker-ce/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg && echo \"deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://mirrors./docker-ce/linux/ubuntu/ \$(lsb_release -cs) stable " | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null && sudo apt-get update && sudo apt-get install docker-ce docker-ce-cli containerd.io -y && sudo systemctl enable docker && sudo systemctl start docker && sudo docker run hello-world && docker rm -f $(docker ps -aq) && docker rmi -f $(docker images -aq) && echo > /root/.bash_history && echo finish!

发现最后输出finish! 即为成功。不同系统安装命令不同,参考/engine/install/

其实不同厂Ubuntu不同的原因如下,为了安装连接的稳定性需要更换一些链接。

1为了确认所下载软件包的合法性,需要添加软件源的 GPG 密钥

curl -fsSL </linux/ubuntu/gpg> | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg# 阿里云:curl -fsSL </docker-ce/linux/ubuntu/gpg> | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg# 腾讯云curl -fsSL <https://mirrors./docker-ce/linux/ubuntu/gpg> | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg

2向 sources.list 中添加 Docker 软件源

echo \\"deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] </linux/ubuntu> \\$(lsb_release -cs) stable "| sudo tee /etc/apt/sources.list.d/docker.list > /dev/null# 阿里云:echo \\"deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] </docker-ce/linux/ubuntu> \\$(lsb_release -cs) stable " | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null# 腾讯云echo \\"deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] <https://mirrors./docker-ce/linux/ubuntu/> \\$(lsb_release -cs) stable " | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null

4.3其他步骤如上3.3 docker安装mysql 开始

参考文章

https://www.grandpa2.fun/archives/docker安装halonginx#toc-head-4

https://docs.halo.run/getting-started/install/docker/#nginx

/chaifeng/ufw-docker

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。