我正在尝试在Docker多个容器上设置Node.js应用程序.我的应用程序目前在一个Ubuntu DO Droplet上使用:
我需要对不同的部分进行dockerize,显然每个容器一个,然后使用Docker-Compose(以前称为图)简单描述不同的容器并设置它们之间的链接.我对多容器appraoch的窃取不清楚.
一个用于nginx,
一个用于Node.js,我的快速应用
一个用于MySql
,一个用于Redis
Docker-compose.yml会是什么样子?我猜nginx,mysql和redis将是未经修改的官方图片?虽然node.js将有一个构建指令指向Dockerfile,它会注意到它是基于node.js官方映像以及配置指令吗?我需要配置/配置mysql和redis例如,这是否意味着每个都需要与自己的Dockerfile分开?
容器之间的链接方式是什么?使用卷将文件复制到它们中,设置端口,调整hosts文件以将some.domain.com映射到nginx ip?
然后我需要在全局安装一些npm软件包,比如nodemon和PM2,并设置一些cron作业......(在Node.js容器上?)
这是初稿,如果能够更好地理解这个新设置,我将不胜感激:
泊坞窗,compose.yml
nginx:
image: nginx
links:
- "node"
node:
build: .
volumes:
- "app:/src/app"
ports:
- "3030:3000"
links:
- "db:mysql"
db:
image: mysql:5.6
environment:
- MYSQL_ROOT_PASSWORD=mypassword
Run Code Online (Sandbox Code Playgroud)
Dockerfile
FROM node:0.12
RUN mkdir /src
RUN npm install nodemon pm2 -g
WORKDIR /src
ADD app/package.json /src/package.json
RUN npm install
ADD app/nodemon.json /src/nodemon.json
EXPOSE 3000
CMD npm start
Run Code Online (Sandbox Code Playgroud)
我正在使用这个简单的项目作为基础,虽然我的应用程序需要
我会尝试尽可能直截了当地做到这一点.
来自MySQL并考虑表格,让我们使用以下示例:
假设我们有一个房地产网站,我们正在显示房屋清单
,我会使用下表:
据我所知,MongoDB可让您灵活地在不同的集合中设计您的Web应用程序,其中包含与关系数据库(规范化)非常相似的唯一ID,并且为了享受快速选择,您可以在集合,相关对象和数据中嵌套(未标准化) ).
回到我们的房地产房屋列表,用于填充它的查询在普通的关系数据库中相当昂贵,对于每个房屋,您需要查询其图像,评论,所有者和代理商,每个实体都位于不同的表中,其中包含其字段,你可能会使用连接并将多个查询合并为一个 - 昂贵!
输入MongoDB - 您不需要连接,并且您可以将房屋的所有相关数据存储在房屋集合中的房屋项目中,选择从未更快,这是天堂!
但是当您需要添加/更新/删除相关评论/代理/所有者/图像时会发生什么?
这对我来说是一个谜,如果我需要猜测,每个相关的集合都存在于其自己的集合中,并且在house表中的数据之上,并且一旦这些相关数据中的一个被添加/更新/删除,你就会'我必须在自己的集合以及房屋集合上更新它.在此更新时 - 我是否还需要查询其他集合以确保我使用所有更新的相关数据更新房屋记录?
我只是在这里猜测,非常感谢您的反馈.
谢谢,
Ajar
here is the deal:
I have two models - User and House
User has many houses
House belongs to a User
I've entered some dummy data and created a minimal express app to serve an api
I want to return a list of users and include each users houses.
api 端点如下所示:
router.get('/users', function(req, res,next) {
models.User.findAll({
include: [ models.House ],
raw: true // returns result-set as a clean json...
})
.then(function(users) {
d('num users found: ' + users.length);
res.json(users);
}) …Run Code Online (Sandbox Code Playgroud) 我在网站上一遍又一遍地寻找这个简单的问题,但没有找到答案我认为这是非常普遍的需求假设您有两个下拉列表,其中一个您想要填充国家/地区列表,并且一次您选择了一个 - 用其区域列表填充另一个。甚至可以使用 Google Places API 实现吗?干杯:)
google-maps geocoding google-geocoding-api google-places-api google-places
我在ubuntu digitalocean droplet上运行了一个node.js express app.我正在使用PM2来启动和监控我的应用程序.我想确定 - 如果服务器需要重启/崩溃,PM2在服务器重启时包含我的Redis和Mongo服务,因为它们对我的应用程序至关重要.我认为这是一个非常直接的通用需求,但却无法找到直接的答案.我很感激任何帮助.干杯阿贾尔
我在大学教 Javascript。我想编写需要对学生编写的代码运行单元测试的课程考试。
\n\n我需要创建考试,对我的学生编写的代码运行笑话单元测试。
\n很像edabit或codewars,您在预定义测试中遇到挑战...\n在某些时候,学生需要编写自己的笑话单元测试并针对自己的代码运行它,就像在codesandbox中所做的那样。
我现在使用ace 编辑器来允许学生在浏览器中编写代码。我需要您在以下方面提供帮助:
\n\n需要什么样的 Jest 变体/配置来编写预定义的单元测试,以便在浏览器中测试学生的代码?\xc2\xa0
运行在基于浏览器的编辑器中编写的代码的最佳方法是什么?我认为简单的eval()是有问题的并且不安全......我需要在浏览器中运行它,所以 node.js 不是一个选项。
你们如何支持 ES6 模块的导入/导出?您是否真的需要编写自己的模块捆绑器才能在浏览器中执行?这是唯一的方法吗?是否有任何模块捆绑器支持基于浏览器的捆绑?
我有一个带有sender_id和receiver_id字段的事务表,另一个带有user_id first_name last_name等的用户表...
我想从事务中查询数据并从用户处加入详细信息,我需要为发送方和接收方带来first_name&last_name ...
SELECT t.* u.*
FROM transactions t, users u
WHERE t.sender_id = u.user_id OR t.receiver_id = u.user_id
Run Code Online (Sandbox Code Playgroud)
这当然不是解决方案,因为我无法知道结果集中的发送者/接收者,但它有助于说明问题
有任何想法吗?感谢Ajar
node.js ×3
mongodb ×2
mysql ×2
ace-editor ×1
database ×1
docker ×1
express ×1
fig ×1
geocoding ×1
google-maps ×1
javascript ×1
jestjs ×1
nginx ×1
nosql ×1
pm2 ×1
reactjs ×1
redis ×1
sequelize.js ×1
sql ×1
ubuntu ×1
unit-testing ×1