团队活动安排工具Rallly

什么是 Rallly ?

Rallly 是一个免费的小组会议安排工具——使用 Next.jsPrismaTailwindCSS 构建。可用于发现与您的同事或朋友开会的最佳日期,而不需要通过来回发送电子邮件沟通。

从思路上看和 Calendso 是类似的,只是更专注于采用多人投票的方式,来决定活动的预约安排。

构建镜像

可以搜索到官方的镜像

但并没有相应的镜像下载

不过官方提供了 Dockerfile ,可以自己下载源代码构建

老苏可以给大家提供了编译好的镜像,但是需要说明的是,老苏比较懒,如果你想要使用最新的版本,还是自己下代码编译比较好

1
2
3
4
5
6
7
8
9
10
11
12
13
14
# 下载代码
git clone https://github.com/lukevella/rallly.git

# 或者加个代理
git clone https://ghproxy.com/github.com/lukevella/rallly.git

# 进入目录
cd rallly

# 构建镜像(v1版)
docker build \
--build-arg DATABASE_URL=postgres://your-database/db \
--build-arg NEXT_PUBLIC_BASE_URL=http://localhost:3000 \
-t wbsu2003/rallly:v1 .

好家伙,1.9G

更重要的编译完成的静态代码,再传递 NEXT_PUBLIC_BASE_URL 参数不起作用。所以需要改造,据说可以通过修改 next.config.js 搞定,不过老苏还是继续使用了常用的占位替换法。

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
47
48
49
50
# 安装 Next.js 应用依赖
FROM node:lts-alpine as dependencies

RUN mkdir -p /usr/src/app

ENV PORT 3000
ARG DATABASE_URL
ENV DATABASE_URL "postgres://your-database/db"

WORKDIR /usr/src/app

COPY package.json /usr/src/app
COPY yarn.lock /usr/src/app
COPY prisma/schema.prisma /usr/src/app

RUN yarn --frozen-lockfile

# 构建 Next.js 应用程序
FROM node:lts-alpine as builder

WORKDIR /usr/src/app

COPY . .
COPY --from=dependencies /usr/src/app/node_modules ./node_modules

ARG NEXT_PUBLIC_BASE_URL
ENV NEXT_PUBLIC_BASE_URL "http://localhost:3000"

RUN yarn build

# 配置 Next.js 应用的运行环境
FROM node:lts-alpine as runner

WORKDIR /usr/src/app

ENV NODE_ENV production
COPY --from=builder /usr/src/app/next.config.js ./
COPY --from=builder /usr/src/app/next-i18next.config.js ./
COPY --from=builder /usr/src/app/templates ./templates
COPY --from=builder /usr/src/app/public ./public
COPY --from=builder /usr/src/app/.next ./.next
COPY --from=builder /usr/src/app/node_modules ./node_modules
COPY --from=builder /usr/src/app/package.json ./package.json
COPY --from=builder /usr/src/app/prisma/ ./prisma
COPY --from=builder /usr/src/app/replace_api_url.sh ./

RUN chmod +x replace_api_url.sh

EXPOSE 3000
CMD ["yarn", "start"]

replace_api_url.sh 是用来替换静态 js 中的变量的

理论上 DATABASE_URL 可以不用替换

1
2
3
4
5
6
7
8
9
10
11
#!/usr/bin/env sh  

echo "---replace begin---"

find '/usr/src/app/.next' -name '*.js' -exec sed -i -e 's,postgres://your-database/db,'"$DATABASE_URL"',g' {} \;

find '/usr/src/app/.next' -name '*.js' -exec sed -i -e 's,http://localhost:3000,'"$NEXT_PUBLIC_BASE_URL"',g' {} \;

echo "---replace end---"

yarn start

开始构建

1
2
3
4
5
6
7
8
9
# 进入目录  
cd rallly

# 修改 Dockerfile 文件

# 新增 replace_api_url.sh 文件

# 构建镜像(v2版)
docker build -t wbsu2003/rallly:v2 .

大概 0.8G,小了一半不止

docker-compose 安装

docker-compose.yml 是在官方的基础上改的,下面👇是个完整的示例

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
version: "3.3"  

services:
rallly_db:
image: postgres:latest
restart: always
volumes:
- ./data:/var/lib/postgresql/data
environment:
- POSTGRES_USER=postgres
- POSTGRES_PASSWORD=postgres
- POSTGRES_DB=db

rallly:
image: wbsu2003/rallly
restart: always
command: sh -c "yarn prisma migrate deploy --schema prisma/schema.prisma && ./replace_api_url.sh"
depends_on:
- rallly_db
ports:
- 4300:3000
environment:
- DATABASE_URL=postgres://postgres:postgres@rallly_db:5432/db
- NEXT_PUBLIC_BASE_URL=http://192.168.0.197:4300
- SECRET_PASSWORD=%AhUouD&3N^Zc7UTiV*6vdM@^n^Gke%R
- SUPPORT_EMAIL=wbsu2003@88.com
- SMTP_HOST=smtp.88.com
- SMTP_PORT=587
- SMTP_SECURE=false
- SMTP_USER=wbsu2003@88.com
- SMTP_PWD=<第三方邮件客户端密码>

需要修改的参数老苏做了说明

范围 默认 描述
NEXT_PUBLIC_BASE_URL http://localhost:3000 服务器的托管 url,用于创建链接和从客户端进行 api 调用。
DATABASE_URL postgres://postgres:postgres@rallly_db:5432/db postgres 数据库 URL。如果使用 docker-compose 文件,请忽略它,因为它会启动并连接到自己的数据库实例。
SECRET_PASSWORD - 用于加密会话数据的长字符串(最少 32 个字符)。
SUPPORT_EMAIL - 一个电子邮件地址,将显示为所有正在发送的电子邮件的 FROM 电子邮件。
SMTP_HOST - SMTP 服务器的主机名
SMTP_PORT - SMTP 服务器的端口
SMTP_SECURE false 如果为您的 SMTP 连接启用 SSL,则设置为true
SMTP_USER - 用于 SMTP 连接的用户名
SMTP_PWD - 用于 SMTP 连接的密码

然后执行下面的命令安装容器

1
2
3
4
5
6
7
8
9
10
# 新建文件夹 rallly 和 子目录
mkdir -p /volume2/docker/rallly/data

# 进入目录
cd /volume2/docker/rallly

# 将 docker-compose.yml 放入当前目录

# 一键启动
docker-compose up -d

运行

在浏览器中输入 http://群晖IP:4300 就能看到主界面

Get Started 开始

先登录

输入邮箱

收到邮件后,点 Log me in

登录成功后会显示用户名

只有 NEXT_PUBLIC_BASE_URL 采用域名时才行,用局域网 IP 不行

开始创建活动

比如选定两天

填上你的信息,所以是否登录并不重要

生成一个活动,将链接分享出去

收到的人点开链接

输入名字或者邮箱地址,选择你希望的时间

手机上的效果

发起者这边能实时看到投票的结果

你可以根据投票的结果来确定活动的安排

参考文档

lukevella/rallly: Self-hostable doodle poll alternative. Find the best date for a meeting with your colleagues or friends without the back and forth emails.
地址:https://github.com/lukevella/rallly

Koyeb - How to Dockerize and Deploy a Next.js Application on Koyeb
地址:https://www.koyeb.com/tutorials/how-to-dockerize-and-deploy-a-next-js-application-on-koyeb