什么是 Rallly ?
Rallly
是一个免费的小组会议安排工具——使用 Next.js
、Prisma
和 TailwindCSS
构建。可用于发现与您的同事或朋友开会的最佳日期,而不需要通过来回发送电子邮件沟通。
从思路上看和 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 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 FROM node:lts-alpine as dependenciesRUN mkdir -p /usr/src/app ENV PORT 3000 ARG DATABASE_URLENV 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 FROM node:lts-alpine as builderWORKDIR /usr/src/app COPY . . COPY --from=dependencies /usr/src/app/node_modules ./node_modules ARG NEXT_PUBLIC_BASE_URLENV NEXT_PUBLIC_BASE_URL "http://localhost:3000" RUN yarn build FROM node:lts-alpine as runnerWORKDIR /usr/src/app ENV NODE_ENV productionCOPY --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 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 mkdir -p /volume2/docker/rallly/datacd /volume2/docker/ralllydocker-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