Docker作为目前最流行的虚拟容器平台,用起来真的很方便,且需要长期后台运行的服务用它来管理也更便捷,所以本篇文章参考官方说明中的: 通过Docker安装Misskey
开始安装
按照官方文档的说明进行操作已经足够安装运行Misskey了,但作者还是遇到了一些小坑,在此记录一下。
首先,先贴出官方文档中的所有命令
# Step 1 Clone程序代码至本地
git clone -b master https://github.com/misskey-dev/misskey.git
cd misskey
git checkout master
# Step 2 复制两份默认的配置文件,并按需设置
cp .config/example.yml .config/default.yml
cp .config/docker_example.env .config/docker.env
# Step 3 构建并初始化程序
sudo docker compose build
sudo docker compose up db redis -d # 这行命令看后面的注意事项
sudo docker compose run --rm web yarn run init
# Step 4 先关闭当前容器
sudo docker compose down
注意事项
作者遇到的一个小坑就是在第三步初始化的时候,此时数据库的Docker容器并没有运行,所以在初始化时会一直提示连接不上数据库,导致初始化无法成功,所以在初始化之前应该先运行相关的数据库容器。容器的名称参考docker-compose.yml
文件中的配置。
初始化成功后先关闭当前容器,因为后面我们需要做一个反向代理,因为Misskey是默认运行在3000端口上的,且需要通过https进行访问,所以我们还需要一个域名。
Caddy反向代理
Caddy则成为了我们最好的选择,目前的Caddy2是默认开启https访问且支持自动从http301跳转的,证书来源于Letsencrypt的90天免费证书,且Caddy可以将此证书自动续期,无需自己手动重新申请,可谓是一劳永逸。
Caddy配置文件,放到项目代码的根目录即可,由于后面使用了DockerCompose的link
字段,所以此处host应该为web
{
email youremail
}
yourdomain {
reverse_proxy http://web:3000
}
由于Misskey的服务和数据库都是通过Docker来运行的,所以此处打算将Caddy也以同样的方式运行,将以下配置填入项目代码的docker-compose.yml
中,注意缩进,要和services
下面的其他节点保持一致。
caddy:
image: caddy:2.5.2-alpine
container_name: caddy
links:
- web
volumes:
- ./Caddyfile:/etc/caddy/Caddyfile
- ./caddy_data:/data
- ./caddy_config:/config
- ./caddy_site:/srv
ports:
- "80:80"
- "443:443"
restart: unless-stopped
networks:
- internal_network
- external_network
depends_on:
- web
后记
搭建过程中发现,官方在docker-compose.yml
中配置了networks
,会导致web
容器在启动时无法访问两个数据库服务,理论上这样设置是没有问题的,但它确实发生了,作者后来将networks
节点注释掉就顺利解决了这个问题,如果有知道原因的网友,希望能留言指导一下.
最后附上我这里经过修改后可用的配置文件:docker-compose.yml
version: "3"
services:
redis:
restart: always
image: redis:7.0.4-alpine
# networks:
# - internal_network
volumes:
- ./redis:/data
expose:
- "6379:6379"
ports:
- "6379:6379"
db:
restart: always
image: postgres:14.4-alpine
# networks:
# - internal_network
env_file:
- .config/docker.env
volumes:
- ./db:/var/lib/postgresql/data
expose:
- "5432:5432"
ports:
- "5432:5432"
web:
build: .
restart: always
links:
- db
- redis
# - es
depends_on:
- db
- redis
expose:
- "3000:3000"
ports:
- "3000:3000"
# networks:
# - internal_network
# - external_network
volumes:
- ./files:/misskey/files
- ./.config:/misskey/.config:ro
caddy:
image: caddy:2.5.2-alpine
container_name: caddy
links:
- web
volumes:
- ./Caddyfile:/etc/caddy/Caddyfile
- ./caddy_data:/data
- ./caddy_config:/config
- ./caddy_site:/srv
ports:
- "80:80"
- "443:443"
restart: unless-stopped
# networks:
# - internal_network
# - external_network
depends_on:
- web
# es:
# restart: always
# image: docker.elastic.co/elasticsearch/elasticsearch-oss:6.4.2
# environment:
# - "ES_JAVA_OPTS=-Xms512m -Xmx512m"
# - "TAKE_FILE_OWNERSHIP=111"
# networks:
# - internal_network
# volumes:
# - ./elasticsearch:/usr/share/elasticsearch/data
networks:
internal_network:
internal: true
external_network:
0 条评论