
docker pull mysql:5.7docker run \
--name mysql \
-d \
-p 3306:3306 \
--restart unless-stopped \
-v /mydata/mysql/log:/var/log/mysql \
-v /mydata/mysql/data:/var/lib/mysql \
-v /mydata/mysql/conf:/etc/mysql \
-e MYSQL_ROOT_PASSWORD=123456 \
mysql:5.7
docker ps
验证MySQL
# 通过Docker命令进入Mysql容器内部
docker exec -it mysql /bin/bash
# 或者
docker exec -it mysql bash
mysql -uroot -p#查看已开发的端口
firewall-cmd --list-all
# 开发3306端口
firewall-cmd --add-port=3306/tcp --permanent
# 策略生效
firewall-cmd --reloadHost列指定了允许用户登录所使用的IP,比如user=root Host=192.168.1.1。这里的意思就是说root用户只能通过192.168.1.1的客户端去访问。 user=root Host=localhost,表示只能通过本机客户端去访问。而%是个通配符 ,如果Host=192.168.1.%,那么就表示只要是IP地址前缀为“192.168.1.”的客户端都可以连接。如果 Host=% ,表示所有IP都有连接权限。 注意:在生产环境下不能为了省事将host设置为%,这样做会存在安全问题,具体的设置可以根据生产环境的IP进行设置
use mysql;
select Host,User from user;
update user set host = '%' where user ='root';
flush privileges;create database halodb character set utf8mb4 collate utf8mb4_bin;
安装Halo
docker pull halohub/halo:2.5.2docker run \
-it -d \
--name halo \
-p 8090:8090 \
-v ~/.halo2:/root/.halo2 \
--restart=unless-stopped \
halohub/halo:2.5.2 \
--halo.external-url=https://192.168.111.201/ \
--halo.security.initializer.superadminusername=admin \
--halo.security.initializer.superadminpassword=P@88w0rd \
--spring.r2dbc.url=r2dbc:pool:mysql://192.168.111.201:3306/halo \
--spring.r2dbc.username=halodb \
--spring.r2dbc.password=XjwKMKZ2EEahwpPF \
--spring.sql.init.platform=mysql 变量详解:
参数名 | 描述 |
|---|---|
spring.r2dbc.url | 数据库连接地址,详细可查阅下方的 数据库配置 |
spring.r2dbc.username | 数据库用户名 |
spring.r2dbc.password | 数据库密码 |
spring.sql.init.platform | 数据库平台名称,支持 postgresql、mysql、h2 |
halo.external-url | 外部访问链接,如果需要在公网访问,需要配置为实际访问地址 |
halo.security.initializer.superadminusername | 初始超级管理员用户名 |
halo.security.initializer.superadminpassword | 初始超级管理员密码 |
数据库配置:
链接方式 | 链接地址格式 | spring.sql.init.platform |
|---|---|---|
PostgreSQL | r2dbc:pool:postgresql://{HOST}:{PORT}/{DATABASE} | postgresql |
MySQL | r2dbc:pool:mysql://{HOST}:{PORT}/{DATABASE} | mysql |
MariaDB | r2dbc:pool:mariadb://{HOST}:{PORT}/{DATABASE} | mysql |
H2 Database | r2dbc:h2:file:///${halo.work-dir}/db/halo-next?MODE=MySQL&DB_CLOSE_ON_EXIT=FALSE | h2 |
用浏览器访问 /console 即可进入 Halo 管理页面,用户名和密码为启动参数中的 superadminusername 和 superadminpassword。
[root@node-3 ~]# docker start cb67ca97f90d
cb67ca97f90d
[root@node-3 ~]#
[root@node-3 ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
f9828b3ebe50 mysql:5.7 "docker-entrypoint.s…" 2 hours ago Up 2 hours 0.0.0.0:3306->3306/tcp, 33060/tcp mysql
[root@node-3 ~]# docker logs halo
[0.002s][warning][os,thread] Failed to start thread "GC Thread#0" - pthread_create failed (EPERM) for attributes: stacksize: 1024k, guardsize: 4k, detached.
#
# There is insufficient memory for the Java Runtime Environment to continue.
# Cannot create worker GC thread. Out of system resources.
# An error report file with more information is saved as:
# /application/hs_err_pid6.log
[0.002s][warning][os,thread] Failed to start thread "GC Thread#0" - pthread_create failed (EPERM) for attributes: stacksize: 1024k, guardsize: 4k, detached.
#
# There is insufficient memory for the Java Runtime Environment to continue.
# Cannot create worker GC thread. Out of system resources.
# An error report file with more information is saved as:
# /application/hs_err_pid6.log解决办法:升级docker
Caused by: io.netty.channel.AbstractChannel$AnnotatedConnectException: finishConnect(..) failed: Connection refused: localhost/127.0.0.1:3306
Caused by: java.net.ConnectException: finishConnect(..) failed: Connection refused
at io.netty.channel.unix.Errors.newConnectException0(Errors.java:166) ~[netty-transport-native-unix-common-4.1.91.Final.jar:4.1.91.Final]
at io.netty.channel.unix.Errors.handleConnectErrno(Errors.java:131) ~[netty-transport-native-unix-common-4.1.91.Final.jar:4.1.91.Final]
at io.netty.channel.unix.Socket.finishConnect(Socket.java:359) ~[netty-transport-native-unix-common-4.1.91.Final.jar:4.1.91.Final]
at io.netty.channel.epoll.AbstractEpollChannel$AbstractEpollUnsafe.doFinishConnect(AbstractEpollChannel.java:710) ~[netty-transport-classes-epoll-4.1.91.Final.jar:4.1.91.Final]
at io.netty.channel.epoll.AbstractEpollChannel$AbstractEpollUnsafe.finishConnect(AbstractEpollChannel.java:687) ~[netty-transport-classes-epoll-4.1.91.Final.jar:4.1.91.Final]
at io.netty.channel.epoll.AbstractEpollChannel$AbstractEpollUnsafe.epollOutReady(AbstractEpollChannel.java:567) ~[netty-transport-classes-epoll-4.1.91.Final.jar:4.1.91.Final]
at io.netty.channel.epoll.EpollEventLoop.processReady(EpollEventLoop.java:489) ~[netty-transport-classes-epoll-4.1.91.Final.jar:4.1.91.Final]
at io.netty.channel.epoll.EpollEventLoop.run(EpollEventLoop.java:397) ~[netty-transport-classes-epoll-4.1.91.Final.jar:4.1.91.Final]
at io.netty.util.concurrent.SingleThreadEventExecutor$4.run(SingleThreadEventExecutor.java:997) ~[netty-common-4.1.91.Final.jar:4.1.91.Final]
at io.netty.util.internal.ThreadExecutorMap$2.run(ThreadExecutorMap.java:74) ~[netty-common-4.1.91.Final.jar:4.1.91.Final]
at java.base/java.lang.Thread.run(Unknown Source) ~[na:na]如果使用MySQL数据库,我们需要更改容器的网络配置。
Docker默认的网络模式是bridge,因此默认容器内无法访问本地127.0.0.1
--net,指定容器的网络配置:
--net=bridge 这个是默认值,连接到默认的网桥。
--net=host 容器使用本地主机的网络,它拥有完全的本地主机接口访问权限
--net=container:NAME_or_ID 让 Docker 使用其他容器的网路,共享IP和PORT等网络资源,两者进程可以直接通过 lo 环回接口通信
--net=none 容器使用自己的网络,但是不进行网络配置,之后用户可以自行配置docker run \
-it -d \
--name halo \
-p 8090:8090 \
-v ~/.halo2:/root/.halo2 \
--net=host \
--restart=unless-stopped \
halohub/halo:2.6 \
--halo.external-url=https://192.168.111.201 \
--halo.security.initializer.superadminusername=admin \
--halo.security.initializer.superadminpassword=P@88w0rd \
--spring.sql.init.platform=mysql \
--spring.r2dbc.url=r2dbc:pool:mysql://192.168.111.201:3306/halodb \
--spring.r2dbc.username=halodb \
--spring.r2dbc.password=tbcCzGf3JfMZncpadocker logs -f halohttp://192.168.111.201:8090/

反向代理实现域名访问


配置反向代理

即可通过域名访问该站点,并可以通过申请证书开启https访问。